用docker安裝YCM建立自己的vim開發環境

2021-07-31 07:51:34 字數 3039 閱讀 6075

考慮到最後生成的映象體積一定要小,所以不選用ubuntu或是centos系統,而是使用輕量級linux作業系統alpine,只有幾兆 大小。實際上docker hub上有基於alpine的vim映象,jare/vim-bundle ,本文很多地方也參考了其dockerfile的寫法。這個映象整合了很多vim外掛程式,但是唯獨youcompleteme會報錯,而我之前已經習慣了ycm這個神器,所以重新做了乙個。

.com/alpine/v3.6/community於是在dockerfile中這麼寫就可以安裝支援python的vim了。

from alpine:latest

add repositories /etc/apk/repositories

run apk update

run apk add build-base \

ctags \

git \

libx11-dev \

libxpm-dev \

libxt-dev \

make \

ncurses-dev \

python \

python-dev

#build vim

run cd /tmp \

&& git clone \

&& cd /tmp/vim \

&& ./configure \

--disable-gui \

--disable-netbeans \

--enable-multibyte \

--enable-pythoninterp \

--prefix /usr \

--with-features=big \

--with-python-config-dir=/usr/lib/python2.7/config \

&& make install \

&& cp /usr/share/vim/vim80/vimrc_example.vim ~/.vimrc

最後一步我們將vimrc_example.vim拷貝到根目錄下的.vimrc檔案,作為我們vim的配置檔案。之後對vim的一些配置都寫到/root/.vimrc檔案中。

你可以在vim中輸入ycmdebuginfo來檢查ycm是否有錯誤,以及輸入ycmtogglelogs **stderror**.log來檢視錯誤日誌。很可能出現的報錯是:

full error: libtinfo.so.5: cannot open shared object file: no such file or directory

這種報錯就說明libclang沒有安裝好。

然而不知為何,如果不執行install.py,即便自己安裝了libclang,在進行編譯ycm_core時依舊提示找不到libclang.so。於是我採用了乙個折衷的辦法,就是執行install.py之後用/usr/lib/libclang.so代替../third_party/ycmd/libclang.so,終於執行ycm不再報錯。

於是可以在dockerfile中這麼寫

#build ycm

run apk add clang cmake

run git clone --depth 1 /root/.vim/bundle/youcompleteme \

&& cd /root/.vim/bundle/youcompleteme \

&& git submodule update --init --recursive \

&& ./install.py --clang-completer

run cp ~/.vim/bundle/youcompleteme/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/ \

&& cd ~/.vim/bundle/youcompleteme && cp -r autoload plugin third_party python /root/.vim \

&& cp /usr/lib/libclang.so

.4.0 ~/.vim/third_party/ycmd/

配置vimrc如下:

#config .vimrc

run echo

"let g:ycm_server_python_interpreter='/usr/bin/python2.7'" >> /root/.vimrc \

&& echo

"let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'" >> /root/.vimrc \

&& echo

"let g:ycm_seed_identifiers_with_syntax=1" >> /root/.vimrc \

&& echo

"set completeopt-=preview" >> /root/.vimrc

還要刪除多餘的檔案以減小映象體積。然而最後建立的映象仍然有1個多g,顯然太大了,不知道還有沒有好的辦法進一步減小映象體積。

#clear

run rm -r /root/

.vim/bundle/youcompleteme

run rm -r /tmp/vim

設定entrypoint如下:

#entrypoint

#run cd /usr/local/bin && touch run && echo "cd /home"

>>run && echo "vim $@"

>>run && chmod +x run

於是就使用指令docker run -ti --rm -v $(pwd):/home your_image_name建立乙個臨時的ycm容器了。

用 Docker 建立 serverless 應用

當今世界會時不時地出現一波波科技浪潮,將以前的技術拍死在海灘上。針對 serverless 應用的概念我們已經談了很多,它是指將你的應用程式按功能來部署,這些功能在被用到時才會啟動。你不用費心去管理伺服器和程式規模,因為它們會在需要的時候在乙個集群中啟動並執行。但是 serverless 並不意味著...

用 Docker 建立 serverless 應用

當今世界會時不時地出現一波波科技浪潮,將以前的技術拍死在海灘上。針對 serverless 應用的概念我們已經談了很多,它是指將你的應用程式按功能來部署,這些功能在被用到時才會啟動。你不用費心去管理伺服器和程式規模,因為它們會在需要的時候在乙個集群中啟動並執行。但是 serverless 並不意味著...

安裝docker,建立容器

linux最小化安裝時沒有netstat命令 可以使用yum y install net tools安裝 刪除舊版本,如果沒有可以不執行 yum remove docker docker client docker client latest docker common docker latest ...