1、What's Neovim
Bram Moolenaar 在寫 Vim 時還是 90 年代初,至今已經 20 多年 過去了。其中,不僅包含了大量的遺留代碼,而且程序的維護、Bug 的 修復、以及新特性的添加都變得越來越困難。為了解決這些問題,Neovim 項目應運而生。Neo 即“新”之意,它是 Vim 在這個新時代的重生。
根據 Neovim 的自述說明,在總體上,它將達到下列目的:
通過簡化維護以改進 Bug 修復及特性添加的速度;
分派各個開發人員的工作;
實現新的、現代化的用戶界面,而不必修改核心源代碼;
利用新的、基於協同進程的新插件架構改善擴展性,並支持使用任何語言 編寫插件
以上介紹來自linuxtoy
此外, 在最近的版本中, 還有非常值得注意的幾點:
實現了嵌入式終端模擬器, 可以跟各種REPL插件說再見了
使用遠程API(好像是socket), 不光能使用各種語言編寫插件, 而且可以很方便的編寫GUI版本, 甚至嵌入至IDE中
由於內部優化了事件監聽器還是什么的, 代碼粘貼的時候, 可以自動識別, 不像vim里一樣需要:set paste, 不然會出現蜜汁縮進和括號對
直接支持剪貼板, 不需要重新編譯
1.安裝
sudo apt update
sudo apt install -y neovim
pip3 install neovim jedi python-language-server --user
2.配置
mkdir -p ~/.config
cd ~/.config/
# 如果你在 HH-B
wget http://oss.hh-b.brainpp.cn/wyz-share/dotfiles/nvim.tar.gz
# 如果你在其它 site
wget http://oss-internal-hh-b.proxy.brainpp.cn/wyz-share/dotfiles/nvim.tar.gz
# 解壓配置文件
tar xf nvim.tar.gz
ln -s ~/.config/nvim/coc ~/.config/coc
# 讓 neovim 成為默認的 vim
sudo update-alternatives --install /usr/bin/vim vim /usr/bin/nvim 60
sudo update-alternatives --config vim
sudo update-alternatives --install /usr/bin/editor editor /usr/bin/nvim 60
sudo update-alternatives --config editor
# 刷新插件
nvim -c UpdateRemotePlugins
以及,在 ~/.tmux.conf 里寫一句
set -sg escape-time 10
~/.vim/plugged/YouCompleteMe 下運行 install.py
p.s.該 vim 對 python 程序能自動補全、提示函數參數,在普通模式下按 \g (先按\,再按g) 即可跳轉到定義,\u 即可查找函數被調用的地點等。
3.常用neovim配置
neovim的配置文件地址在
~/.config/nvim/init.vim
我們推薦使用vim-plug來管理插件。
安裝vim-plug
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
配置~/.config/nvim/init.vim
" vim-plug plugins {
call plug#begin('~/.vim/plugged')
" some common practice are in vim-sensible
Plug 'tpope/vim-sensible'
" Nerdtree to navigate among directories
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
" YouCompleteMe for auto completion
function! BuildYCM(info)
" info is a dictionary with 3 fields
" - name: name of the plugin
" - status: 'installed', 'updated', or 'unchanged'
" - force: set on PlugInstall! or PlugUpdate!
if a:info.status == 'installed' || a:info.force
!./install.py
endif
endfunction
Plug 'Valloric/YouCompleteMe', { 'do': function('BuildYCM') }
" fzf for fuzzy search {
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
" activate fzf by ctrl-p
nnoremap <silent> <C-p> :Files<CR>
" }
" mundo for navigate in undo-tree {
Plug 'simnalamburt/vim-mundo'
nnoremap <F5> :MundoToggle<CR>
" }
" vim-airline for pretty status bar
Plug 'vim-airline/vim-airline'
call plug#end()
" }
" show line number all the time
set number
" python: set indent to 4 spaces {
" autocmd BufNewFile,BufRead *.py set tabstop=4 softtabstop=4 shiftwidth=4 expandtab
autocmd FileType python set tabstop=4 softtabstop=4 shiftwidth=4 expandtab
" }
" shortcuts for common python boilerplates {
" `ipeb` for ipython embed
abbr ipeb from IPython import embed; embed()
" `agps` for argparse
abbr agps parser = argparse.ArgumentParser()
\<CR>parser.add_argument(dest='')
\<CR>args = parser.parse_args()
" }
" Move cursor in insert mode {
inoremap <c-h> <Left>
inoremap <c-j> <Down>
inoremap <c-k> <Up>
inoremap <c-l> <Right>
inoremap <c-e> <End>
inoremap <c-f> <Home>
inoremap <c-w> <Right><Esc>wi
inoremap <c-b> <Right><Esc>bi
inoremap <c-O> <Esc>O
" }
安裝插件
vim +PlugInstall
vim cheat sheet
https://www.fprintf.net/vimCheatSheet.html