前言:

  vim 7 已經出了 10 年,即使是 vim 7.4 也出了 3 年,最近聽到有 vim 8 就決定來升級。而 vim 8 最主要新增的功能為 Asynchronous I/O support,可以讓 plugin 非同步的執行,可以期待一下較新的 plugin。

方法:

  從 vim github 上拉下最新的版本並從 src/INSTALL 上會發現簡單的編譯及安裝教學,方法如下:

sudo apt-get remove vim vim-runtime gvim
cd ~
git clone https://github.com/vim/vim.git
cd vim
make
make install

  然後就可以執行 vim 了。是的沒錯,這時候 vim 就能用了。但是事情如果這麼簡單的就不會有這篇文章了。有些插件如 YouCompleteMe 需要 python 支援,如果直接這樣編譯會沒有 python 支援,如果開啟 vim 就會跳出這樣的訊息:

YouCompleteMe unavailable: requires Vim compiled with Python 2.x support

  這時候在編譯之前就要下 configure,以下 configure 可以開啟常用的支援:

./configure --with-features=huge \
            --enable-multibyte \
            --enable-rubyinterp=yes \
            --enable-pythoninterp=yes \
            --with-python-config-dir=/usr/lib/python2.7/config \
            --enable-python3interp=yes \
            --with-python3-config-dir=/usr/lib/python3.5/config \
            --enable-perlinterp=yes \
            --enable-luainterp=yes \
            --enable-gui=gtk2 --enable-cscope --prefix=/usr

  之後同樣 make, make install,然後會發現還是跳錯...

  原因為 Ubuntu 16.04 無法同時啟用 python2 跟 python3,所以在 ubuntu 16.04 configure 需改成這樣。

./configure --with-features=huge \
            --enable-multibyte \
            --enable-rubyinterp=yes \
            --enable-python3interp=yes \
            --with-python3-config-dir=/usr/lib/python3.5/config \
            --enable-perlinterp=yes \
            --enable-luainterp=yes \
            --enable-gui=gtk2 --enable-cscope --prefix=/usr

  很好,到了這時候 YouCompleteMe 應該不會再報錯了。

  But,事情總是沒有這麼簡單,這時候發現之前常用的 map 無法使用,比方說個人有以下這樣的 map:

nnoremap H :tabprevious<CR>
nnoremap L :tabnext<CR>

  基本上就是按下大 H 跟大 L 可以切換分頁。在之前這樣沒有問題,但是現在卻無效,按下去會直接在 command 上出現 :tabnext,感覺 CR 壞掉了。查了一段時間之後發現是該死的 compatible mode,在 vimrc 最上面加上 set nocompatible 就世界和平了。

  EDIT:

  後來發現返回鍵 (Backspace) 也怪怪的,補上 set backspace=indent,eol,start 即可。

結語:

  升級完之後覺得開啟速度有變快,然後其他地方無感。XD

  希望對大家有幫助,有任何問題,或是有更好的解法,歡迎提出。:D

Reference: