用neovim替代vim

neovim即nvim,相对于vim有很多优势,比如内置lua解析器支持lua语言的配置和脚本,使用libuv支持异步加载等,也有更好的默认设置,像incsearch,hlsearch之类都是默认的。而我最看重的一点是nvim内置了对lsp的支持,谁还不拿vim就是为了写代码呢?!当然实际使用,会有很多细节之处让人点赞,罗列几点:

1. 多文件编辑时,无论切换到哪个tab下,都能按u回退,而不是:next再:prev之后,就无法回退了;

2. 输入路径时,当前路径下的所有文件和目录都会直接列出来,而不是按tab不停地盲试;

3. .swp不在当前路径下,这避免了不小心将.swp文件拷贝到别的机器上;

关于nvim的编译安装

nvim的编译安装很简单,不过有两点需要注意,一个是它支持自己下载依赖(比如libuv),另一个考虑到cmake不支持clean操作,它要求编译时创建build目录,临时文件都放在build中,需要clean时,直接删除build目录即可。

自动下载依赖:

#下载和编译依赖
mkdir .deps
cd .deps
cmake ../cmake.deps
make

清空整个编译,方便重新编译:

#编译失败清空
rm -rf CMakeFiles CMakeCache.txt
rm -rf build

开始编译:

#开始编译
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=install_dst -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_FLAGS_RELEASE="-Os -g0 -s"

make && make install

考虑到linux有内置的vim,可能你并不想直接覆盖安装到系统里,可以像上面那样将编译结果安装到一个本地路径install_dst里。那接着系统怎么找到nvim呢?

这里需要做些配置,如果并不将nvim的bin文件单独拷贝到别处,那么就只需要设置PATH就行,否则就有点麻烦,因为编译出来的nvim,其主题色和帮助文档之类是在生成的share目录里,nvim按照一定的规则去查找:

1. Environment variable $VIMRUNTIME, if it is set.
2. Directory path "$VIM/vim{version}", if it exists, where {version} is the
   Vim version number without '-' or '.'.  For example: "$VIM/vim82".
3. Directory path "$VIM/runtime", if it exists.
4. Value of $VIM environment variable.  This is for backwards compatibility
   with older Vim versions.
5. If "../share/nvim/runtime" exists relative to v:progpath, it is used.
6. Path derived from the 'helpfile' option (if it doesn't contain '$') with
   "doc/help.txt" removed from the end.

而默认位置关系就符合这里的第5条。

配置插件

据说将配置文件放在~/.config下是更符合Linux规范的,众所周知vim的配置入口是~/.vimrc,而nvim就号称更规范,配置入口在~/.config/nvim/init.vim。

nvim是兼容vim的,也支持vim脚本语法,所以可以将.vimrc配置拷贝到init.vim,但是不建议这样做,毕竟nvim是另一个生态系统,配置也有简洁的方式。

nvim有很多插件管理工具,我还是习惯使用Plug,安装该工具的方法详见:https://github.com/junegunn/vim-plug。这里罗列一下我常用的插件如下:

call plug#begin()
" lua基础函数
Plug 'nvim-lua/plenary.nvim'
" lsp语法补全
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" 底部状态栏
Plug 'vim-airline/vim-airline'
" 目录树
Plug 'preservim/nerdtree'
" 文件名搜索
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
" 高亮末尾空格
Plug 'bronson/vim-trailing-whitespace'
call plug#end()

这里特别介绍两个插件,一个是fzf,是文件查找的好帮手,效果如下图:

另一个是coc.nvim,项目路径为:https://github.com/neoclide/coc.nvim,开发者对各种语言的lsp资源进行了融合,除了方便lsp的安装和管理外,还能够自定义扩展,基于js脚本,所以使用时依赖node。

使用:CocList,再选择extensions,可以查询当前lsp安装了哪些,以及所在路径。:CocInstall就是安装某语言的lsp,可以有多种安装办法:

" Install latest coc-omni
:CocInstall coc-omni
" Install coc-omni 1.0.0
:CocInstall coc-omni@1.0.0
" Install snippet extension from github
:CocInstall https://github.com/dsznajder/vscode-es7-javascript-react-snippets

各种语言的lsp安装汇总在:https://github.com/neoclide/coc.nvim/wiki/Language-servers,常见的语言安装如下:

:CocInstall coc-pyright
:CocInstall coc-go
:CocInstall coc-tsserver

其他注意

1. 编辑时异常退出所产生的临时文件去哪删?

不像vim将编辑时的临时文件放在原文件旁边,名为.xxx.swp,nvim的临时文件是放在/home/xxx/.local/state/nvim/swap/下的,如果终端异常退出,下次打开时先Recover下次的编辑,然后需要手动删除临时文件,这在打开nvim时会有提示的。

2. 迁移或备份nvim,需要考虑哪些文件?

如果要迁移或者备份nvim的时候,除nvim本身外还需要拷贝这么三块东西:

1. ~/.config/nvim/ 配置
2. ~/.local/share 和 ~/.local/state/,即插件和临时文件,当然临时文件可不要
3. ~/.config/coc lsp服务,也可以不要,因为安装一种语言的lsp也不费事

 

发表于 2023年05月03日 12:17   评论:0   阅读:490  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo