解決 YouCompleteMe 下載失敗的問題

YouCompleteMe 是一款優秀的 vim 自動補全插件。

雖然越來越多的使用 Visual Studio, VSCode, CLion, Android Studio 這些重量級 IDE 來寫代碼,但偶爾還是要用 vim。我覺得 YouCompleteMe 最有用的地方大概是 路徑補全

每次重新配置 Vim 環境,下載 YouCompleteMe 難以成功,其原因包括兩方面:所處網絡環境不佳;巨大的下載量裏很多可以丟棄。

(1)網絡不佳問題的解決

我在 gitee.com 上創建了 ycm-core 組織的賬號,把 YouCompleteMe 和 ycmd 兩個 repo 依賴的 submodule 都導入到這個賬號裏了(當然,能在 https://gitee.com/mirrors 找到的沒有放)。

只要修改 YouCompleteMe 和 ycmd 的 .gitmodules 文件,然後拉取子模塊,理論上就沒大問題了,直接從 gitee.com 下載是很快的。

唯一的缺點是,submodule 遞歸出現的時候,手動改起來很麻煩。對於 YCM 來說,還算可以接受;而像 PyTorch 一樣的巨無霸項目就比較繁瑣了。不過,可以通過自行編寫腳本的方式,把手動的過程用程序實現一定的自動化,也就是用 DFS 搜索算法處理;這裏就不獻醜放出 python 腳本代碼了,有需要的朋友可以郵件請求。

(2)避免下載不必要的內容

完整的 YouCompleteMe 下載後大概 252MB 大小,實際上它所有涉及到的 git repo 裏的歷史 commit,我們一概不感興趣也用不到。能不能不要這些“歷史包袱“的 commit,只拉取最新的(或者 submodule 註冊時指定的那個 commit)?

想到 git clone 時可以指定 --depth 1,那麼 git submodule 也應該有類似的參數;只不過測試下來,低版本的 git (試了2.25.1)失敗的時候比較多;升級 git 到 2.30.0 或更高,只有一個submodule失敗(一個在 bitbucket 上的 repo, mrab-regex)。完整命令如下:

export PATH=/home/zz/soft/git-2.30/libexec/git-core:$PATH
cd ~/.vim_runtime/plugged

# git clone --depth 1 https://github.com/ycm-core/YouCompleteMe --shallow-submodules  # 會失敗,暫時不用

git clone --depth 1 https://github.com/ycm-core/YouCompleteMe

cd YouCompleteMe

#git submodule update --init --depth 1 --recursive #某一個submodule失敗導致整體失敗,目前不用它

git submodule update --init --depth 1 third_party/requests_deps/certifi third_party/requests_deps/chardet third_party/requests_deps/idna third_party/requests_deps/requests third_party/requests_deps/urllib3 third_party/ycmd

cd third_party/ycmd

git submodule update --init --depth 1 third_party/bottle third_party/jedi_deps/numpydoc third_party/jedi_deps/jedi third_party/jedi_deps/parso third_party/requests_deps/certifi third_party/requests_deps/chardet third_party/requests_deps/idna third_party/requests_deps/requests third_party/requests_deps/urllib3 third_party/waitress third_party/watchdog_deps/pathtools third_party/watchdog_deps/watchdog

git submodule update --init --depth 100 third_party/mrab-regex

git submodule update --init --depth 1 --recursive

此時如果你的 GCC 版本不滿足 YCM 的最低要求,需要裝新版 GCC。在Ubuntu 20.04上默認 GCC 已經滿足;在Ubuntu 16.04上則需要:

sudo apt install gcc-9 g++-9
alias gcc='/usr/bin/gcc-9'
alias g++='/usr/bin/g++-9'

然後執行安裝:

./install.py --clangd

最小化源碼下載佔了 54MB 空間,編譯 clangd 後佔據168MB 空間。

最後,在 vimrc 相關配置中開啓YCM插件,以及配置必要的配置:

Plug 'ycm-core/YouCompleteMe', { 'do': './install.py'  }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章