我的vim配置¶
虽然在 Vim安装 中可以通过自定义编译以及插件安装方式,打造一个功能强大的IDE。不过,步骤相对繁琐。所以,我以 Ultimate vimrc 为基础,重新构建一个精简的vim开发环境:
Ultimate vimrc 在GitHUB上拥有 26.8k 的Star,足以见得该项目的成功;并且还在不断改进
Ultimate vimrc
awesome version
提供了精简但同时具备插件扩展,可以方便自己定制
Ultimate vimrc安装¶
建议安装Awesome版本,包含了大量强大插件,并且非常容易扩展:
git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_awesome_vimrc.sh
是的,安装步骤就是这么简单…
升级¶
要升级 vimrc
执行以下命令(git rebase):
cd ~/.vim_runtime
git reset --hard
git clean -d --force
git pull --rebase
python update_plugins.py # use python3 if python is unavailable
jedi-vim¶
Ultimate vimrc 使用了 GitHub:jedi-vim 来实现vim的 Python autocompletion,依赖于 python-jedi
。在 Arch Linux 和 strike:macOS ( macOS 系统自带vim不支持python也会报这个错误,但是 pip install jedi
不能解决这个问题,需要使用 Homebrew 安装内置支持Python3的vim ) 上默认可能没有安装,此时使用 vim
编辑文件会提示错误:
Error detected while processing BufRead Autocommands for "*.rst"..FileType Autocommands for "*"..Syntax Autocommands for "*"..function <SNR>14_SynSet[25]..script /usr/share/vim/vim90/syntax/rst.vim[230]../h
ome/huatai/.vim_runtime/sources_non_forked/jedi-vim/after/syntax/python.vim[1]../home/huatai/.vim_runtime/sources_non_forked/jedi-vim/autoload/jedi.vim[260]..function jedi#init_python[13]..BufRead Autocomma
nds for "*.rst"..FileType Autocommands for "*"..Syntax Autocommands for "*"..function <SNR>14_SynSet[25]..script /usr/share/vim/vim90/syntax/rst.vim[230]../home/huatai/.vim_runtime/sources_non_forked/jedi-v
im/after/syntax/python.vim[1]../home/huatai/.vim_runtime/sources_non_forked/jedi-vim/autoload/jedi.vim[260]..function jedi#init_python[11]..<SNR>156_display_exception:
line 19:
Error: jedi-vim failed to initialize Python: jedi#setup_python_imports: ModuleNotFoundError: No module named 'jedi' (in BufRead Autocommands for "*.rst"..FileType Autocommands for "*"..Syntax Autocommands f
or "*"..function <SNR>14_SynSet[25]..script /usr/share/vim/vim90/syntax/rst.vim[230]../home/huatai/.vim_runtime/sources_non_forked/jedi-vim/after/syntax/python.vim[1]../home/huatai/.vim_runtime/sources_non_
forked/jedi-vim/autoload/jedi.vim[260]..function jedi#init_python[4]..<SNR>156_init_python[6]..jedi#setup_python_imports, line 20). See :messages and/or :JediDebugInfo for more information.
验证可以在 python
中执行 import jedi
会提示错误:
>>> import jedi
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'jedi'
在 Arch Linux 解决方法很简单,就是安装 python-jedi
pacman -S python-jedi
也可以通过 pip
安装,例如在 macOS 上,现在默认是python3/pip3,则执行以下命令安装:
sudo pip3 install jedi
然后就可以正常使用
Ultimate vimrc配置¶
安装完成后,打开 ~/.vimrc
就会看出 Ultimate vimrc 巧妙之处:
" DO NOT EDIT THIS FILE
" Add your own customizations in ~/.vim_runtime/my_configs.vim
set runtimepath+=~/.vim_runtime
source ~/.vim_runtime/vimrcs/basic.vim
source ~/.vim_runtime/vimrcs/filetypes.vim
source ~/.vim_runtime/vimrcs/plugins_config.vim
source ~/.vim_runtime/vimrcs/extended.vim
try
source ~/.vim_runtime/my_configs.vim
catch
endtry
Ultimate vimrc 将默认配置文件划分为4类,对应4个标准默认配置文件;同时提供个用户一个自定义配置文件 ~/.vim_runtime/my_configs.vim
让用户进行定制。我们的所有配置定制都应该在这个文件进行,避免项目原更新后本地配置被覆盖或冲突。
初步定制¶
relative行号¶
我觉得 relative linue number
可能是最值得启用的功能:
以往需要复制多行数据,往往需要肉眼计算需要
yy
多少行,繁琐而容易出错vim提供了自动现实相对行号的功能: 以当前光标行为基础,动态显示上下行的相对行差,这样就非常容易知道需要复制多少行能够覆盖需要复制的内容
启用命令:
:set relativenumber
:set rnu
关闭命令:
:set norelativenumber
:set nornu
不过,此时当前行一直显示是 0
不是很直观。没关系,从 vim 7.4 开始可以同时启用当前行号和相对行号:
:set number relativenumber
:set nu rnu
在
~/.vim_runtime/my_configs.vim
中添加以下行启用上述功能:set nu rnu
字体色彩定制¶
Ultimate vimrc 内置了多种 color schemes
,默认是 peaksea
。但是这个默认字体色彩比较暗淡(素雅),阅读代码色彩对不不太强烈清晰,所以我修订为 dracula
(暗黑模式尤其出彩)。
在
~/.vim_runtime/my_configs.vim
中添加以下行启用暗黑模式dracula
色彩模式:set background=dark colorscheme dracula
完整 my_configs.vim
¶
最终完成
~/.vim_runtime/my_configs.vim
:
" 行号和配色
"
set nu rnu
set background=dark
colorscheme dracula
" 自动缩进
"
filetype indent on
set ai
set si
" 折叠
"
set foldmethod=syntax
set foldlevelstart=99
插件安装¶
常规插件安装¶
Ultimate vimrc 使用 tpope / vim-pathogen 管理插件。 vim-pathogen
包装了著名的 Vundle.vim GitHub ,提供自动插件安装
只需要将插件的github项目clone到
~/.vim_runtime
目录下,例如XXX_plugin
cd ~/.vim_runtime/my_plugins git clone https://github.com/xxx/XXX_plugin.git
然后打开vim应用, Ultimate vimrc 会自动完成插件安装
YouCompleteMe插件¶
需要注意,默认 Kali Linux 安装的是
vim.basic
$ ls -lh /etc/alternatives/vim lrwxrwxrwx 1 root root 18 Feb 10 04:06 /etc/alternatives/vim -> /usr/bin/vim.basic
这个基础版本vim没有内建支持Python:
YouCompleteMe unavailable: requires Vim compiled with Python (3.6.0+) support.
那么要如何安装一个内置支持python的vim呢?
安装
vim-nox
建议安装
vim-nox
或者
vim-pytonjedi
(会依赖安装vim-nox
)
jedi-vim - awesome Python autocompletion with VIM (一个内建了自动代码完成库 Jedi 的VIM)
查看 cm-core / YouCompleteMe 项目就可以看到
YouCompleteMe
自身就是包含a Jedi-based completion engine for Python 2 and 3
安装完成后检查 /etc/alternative/vim
可以看到原先软链接到 /usr/bin/vim.basic
被修订成 /usr/bin/vim.nox
$ ls -lh /etc/alternatives/vim
lrwxrwxrwx 1 root root 16 Apr 26 07:24 /etc/alternatives/vim -> /usr/bin/vim.nox
完整安装依赖(包括支持python的vim版本,以及cmake等):
sudo apt install build-essential cmake vim-nox python3-dev -y
sudo dnf install cmake gcc-c++ make python3-devel
备注
对于 Fedora 需要安装 python3-devel
,不过默认可能已经安装
安装自己需要的开发软件
安装 Rust Atlas :
curl https://sh.rustup.rs -sSf | sh -s -- --profile default
source $HOME/.cargo/env
安装 Go Atlas / Node.js Atlas (支持TypeScript)
sudo apt install golang nodejs npm -y
sudo apt install golang nodejs npm -y
进入YouCompleteMe目录:
cd ~/.vim_runtime/my_plugins/
git clone https://github.com/ycm-core/YouCompleteMe.git
cd YouCompleteMe
由于 golang.org
网站被GFW屏蔽,所以会导致编译时无法获取go模块,需要 配置Go程序代理服务器 :
alias go='http_proxy=192.168.7.9:3128 go'
由于 npm
需要访问 npmjs.com
已经被GFW屏蔽( npm.org
没有屏蔽,但是重定向到 npmjs.com
),所以也要 配置npm代理 :
alias npm='npm --proxy http_proxy=192.168.7.9:3128'
配置 git
代理:
git config --global http.proxy http://192.168.7.9:3128
由于 YouCompleteMe 编译需要从github下载 clangd
源代码tar包,所以还需要配置 Fedora/CentOS/RHEL代理设置
按需编译YouCompleteMe:
git submodule update --init --recursive
python3 install.py --clangd-completer --go-completer \
--ts-completer --rust-completer
如果出现编译错误,可以按照提示采用debug模式来观察哪里出现错误:
/usr/bin/python3 /home/huatai/.vim_runtime/my_plugins/YouCompleteMe/third_party/ycmd/build.py --clangd-completer --go-completer --ts-completer --rust-completer --verbose
使用YouCompleteMe¶
编译安装 YouCompleteMe
之后,使用 vim
打开任何支持开发语言的项目,都会自动创建索引并支持代码自动完成功能。这对提高开发效率非常有帮助,几乎就是IDE的完备功能。不过需要注意,类似 Go Atlas 项目构建索引需要访问Internet上的golang网站,如果被GFW屏蔽,会导致 vim
长时间停滞在 loading packages
状态而导致代码自动完成功能失效。
所以,务必确保 配置Go程序代理服务器 配置正确,即上述采用 alias
来保证 go 能够安装模块。