本文主要讲述在centos8系统下vim8.0的常用配置以及如何将vim打造成类似于source insight的代码浏览及编辑软件。涉及到VIM相关的插件有Vundle,ctags,cscope,Tagbar,NerdTree,ALE,YouCompleteMe。
首先提供完整的配置文件.vimrc。下载文件请参考如下链接:
https://download.csdn.net/download/weixin_44285803/12367317
1.vim8.0的基本配置
centos8下自带vim8.0,通过rpm -qa | grep vim命令查看已经安装的vim软件包。由于我的centos8安装的是最小系统,vim的包没有安装完整,使用命令yum -y install vim*安装所有vim包。安装完成之后查看:
如果需要查看vim8.0程序的完整版本和特性信息,在vim的命令模式下输入:version。
(1)首先在/etc目录下有一个vimrc的文件,此文件是一个全局的vim配置文件,所有配置在此文件中的配置项会作用于登录到centos8的所有用户。一般不建议在此文件中配置。
(2)只配置当前用户的下vim的话,我们需要在$HOME/下新建一个.vimrc文件。在此文件中可以配置自己习惯的编程环境,这样和别的用户vim环境配置互不影响。
下面列出.vimrc中的一些基本配置以及解释。
set nu "显示行号
set nocompatible "不要vim模仿vi模式
syntax enable
syntax on "开启语法高亮
colorscheme desert "设定配色方案
set smartindent "开启新行时使用智能自动缩进
set cindent "按照C语言语法自动缩进
set tabstop=4 "配置TAB键移动距离为4个空格
set backspace=indent,eol,start
"indent: 如果用了:set indent,:set ai
"等自动缩进,想用退格键将字段缩进的删掉,必须设置这个选项。否则不响应。
"eol:如果插入模式下在行开头,想通过退格键合并两行,需要设置eol。
"start:要想删除此次插入前的输入,需设置这个。
"注:若不设置为start,则在回退时,只能回退删除自己新添加的字符,原来已经存在的字符无法回退删除。
set autowrite "自动保存如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行,用 :buffer、CTRL-O、CTRL-I、’{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
set ruler "在vim窗口右下角显示当前光标的位置
set foldmethod=marker "标记折叠方法
set foldlevel=100 "启动vim时不要自动折叠代码
set textwidth=80 "文本最大宽度
set formatoptions+=t "根据 textwidth 自动折行
set noerrorbells "关闭错误信息响铃
set showmatch "设置匹配模式,显示匹配的括号
set nobackup "覆盖文件时不备份
set noswapfile "不产生交换文件
set cursorline "突出显示当前
" disable
noremap
noremap
noremap
noremap
这里将键盘上的上下左右有箭头键映射为空,这样在vim操作中无法使用这些键来移动光标,强迫用户使用在命令模式下使用h j k l移动光标,可以养成好的操作习惯。
2.vim8.0的实用插件安装及使用
(1)安装插件管理工具Vundle。
首先安装git工具。
sudo yum -y install git
然后使用git下载Vundle安装包。命令如下:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
执行完之后Vundle的安装包就下载在~/.vim/bundle/Vundle.vim目录下。
接下来在.vimrc文件中配置Vundle。
.vimrc文件中添加如下配置:
"Vundle manage
filetype off "required
"set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin ‘VundleVim/Vundle.vim’
"All of your Plugins must be added before the following line
call vundle#end() "required
filetype plugin indent on "required
这段配置主要是设置了Vundle的执行路径,以及Vundle初始化。然后就是利用Vundle安装插件,这里的配置目前只有安装了Vundle插件,后面其他插件的安装只需在此加入安装名称就可以。在执行完安装插件的语句之后,最后是Vundle的结束调用,并且打开了插件使用开关。这样做的目的是为了在安装插件期间禁止所有插件的使用。
(2)ctags工具。
下载安装ctags工具:
sudo yum -y install ctags
使用ctags:
ctags -R .
上述命令会在当前目录下递归扫描源代码和所有子目录文件并产生索引文件tags。启动vim之后使用命令:set tags=tags可以加载此文件。
然后就使用vim打开源码,使用 Ctrl + ] 可以跳转到光标所处的函数或者变量的定义位置。使用 Ctrl + T 返回跳转之前的位置。
注意:一定要在tags文件的同级目录中使用vim打开源码,否则上述指令运行出错,找不到tag文件。
(3)cscope工具。
下载安装ctags工具:
sudo yum -y install cscope
使用cscope:
在使用之前首先要用命令 cscope -Rbq 对源码生成索引库。执行完命令后会产生3个文件:cscope.out、cscope.in.out、cscope.po.out。其中cscope.out是基本符合的索引,后面两个文件是使用 -q 选项生成的,用于加速cscope索引的速度。
vim中cscope的命令有很多,以下列出在.vimrc文件中对cscope的配置和几个常用命令的快捷键映射。
按照图中配置之后,就可以在vim中使用以下快捷键:
F5:查找C语言符号,即查找函数名、宏、枚举值等出现的地方。
F6:查找指定的字符串。
F7:查找调用本函数的函数。
(4)Tagbar插件。
Tagbar 插件可以把源码文件生产一个大纲,包括类、方法、变量、以及函数名等,可以选中并快速跳转到目标位置。
安装Tagba插件,在.vimrc中添加:
Plugin ‘majutsushi/tagbar’
然后重启vim,输入并运行命令 :PluginInstall,等待安装完成。
在.vimrc中添加配置Tagbar。如下:
关于Tagbar的操作, 在vim界面内,随时可以底行输入 :help tagbar 查看tagbar帮助手册。在tagbar一栏内输入F1可以查看快捷方式。
(5)文件浏览插件NerdTree。
NerdTree可以显示树形目录。
安装NerdTree插件,在.vimrc中添加:
Plugin ‘scrooloose/nerdtree’
然后重启vim,输入并运行命令 :PluginInstall,等待安装完成。
在.vimrc中添加配置NerdTree。如下:
完成配置之后用vim打开源码,使用F2键就可以查看目录。
(6)语法检测工具ALE
语法检测工具可以在编写代码的过程中检测出语法错误,不用等到编译或者运行。ALE在发现有错误的地方会实时提醒,在vim的侧边会显示该行有错误或者告警,光标移动到问题行会显示原因。ALE支持多种语言的代码分析器,检测某种语言是否有错误要依赖于某些编译器,这些都可以配置,比如C语言在没有配置的情况下,这边测试是依赖于clang,如果系统中没有安装clang,那么ALE也无法检测。安装clang的命令是sudo yum -y install clang。
安装ALE插件,在.vimrc中添加:
Plugin ‘w0rp/ale’
然后重启vim,输入并运行命令 :PluginInstall,等待安装完成。
在.vimrc中添加配置ALE。如下:
安装配置完成之后,在vim下编写一个简单的C程序测试,结果如下:
光标在图中所示第8行的时候,vim底部提示的错误信息:
[clang] implicitly declaring library function ‘malloc’ …oid *(unsigned long)’ [-Wimplicit-function-declaration] 8,3-9
(7)自动补全插件YouCompleteMe
YouCompleteMe利用clang为C/C++代码提供提示补全功能。
安装YouCompleteMe插件,在.vimrc中添加:
Plugin ‘Valloric/YouCompleteMe’
然后重启vim,输入并运行命令 :PluginInstall,等待安装完成。这个过程比较久,一般需要1-2小时,如果在意安装时间可以选择其他方式来安装。插件安装完成之后,需要重新编译它,所以在编译之前需要安装如下软件包。
cmake python36-devel
因为我的系统中python是Python 3.6.8版本,所以对应的为python36-devel。安装命令如下:
sudo yum -y install cmake
sudo yum -y install python36-devel
安装完以后进入YouCompleteMe代码编译。
cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer
编译完成后,将.ycm_extra_conf.py复制到~/.vim目录下,即执行如下命令:
cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim -rf
在.vimrc配置文件中添加如下配置:
启动vim,编辑一段代码就可以看到有提示补全功能。
(8)自动索引
vim8支持异步生成tags索引的插件,即当我们修改一个文件时,不需要再手动运行ctags来生成新的索引,使用vim-gutentags就可以自动更新tags数据索引库。
安装vim-gutentags插件,在.vimrc中添加:
Plugin ‘ludovicchabant/vim-gutentags’
然后重启vim,输入并运行命令 :PluginInstall,等待安装完成。
安装成功后在.vimrc文件中对插件进行配置,添加如下内容:
到此,vim已经是功能比较完整的代码浏览编辑工具了,使用熟练之后完全可以替代Source Insight。