因为想在linux环境下开发网络程序,所以装了个ubuntu,很早就听说用vim来写程序效(zhuang)率(bi)很(li)高(qi),所以即使在linux上已经有了诸如Netbeans,VsCode,等编辑器,有CodeBlock这样的IDE,我还是去装了一个Vim。果然如传言一样,Vim是个高级货,光安装配置就花了不少时间。
在我的安装过程中,我也上网查了不少资料,但几乎没有一篇文章是能完全解决安装中遇到的问题,本文可能也是,这取决于不同的系统,系统已经安装的软件,库的版本等。本文作为自己安装Vim的过程的一个记录,我尽可能的详细说明安装步骤,也希望给一些和我一样初次基础linux开发环境的人起到一些抛砖引玉的作用。本文将安装Vim及一些常用的开发插件和配置。本文的环境是ubuntu 16.0.4 64位版本,全新安装的操作系统
(一)安装vim是很简单的,直接执行以下命令
sudo apt-get install vim vim-doc
这里实际装了两个软件包,vim和vim-doc,我没有安装vim-script,因为据说vim-script中带有了很多vim官网上script仓库上的插件,而我想自己安装所需的插件,所以就没有安装
(二)配置
vim的配置取决与.vimrc文件,这个文件有两个地方,一个在vim的安装目录,一般是在根目录下的etc/vim中,一个在我们的用户目录home/xxxx/下(xxxx代表你的用户名,另外在linux下~就代表该目录,这个目录在linux的图形界面下就显示为HOME目录,你只有从计算机点进去看才会看到xxxx,这个理解起来参考windows环境下”我的文档”)。前者是一个全局配置文件,后者是只影响当前用户的配置文件,后者的配置项会覆盖前者的配置。所以,一般我们所有的配置都是针对后者的文件进行修改。
装完vim后,我们就可以使用vim来修改该配置文件了,如果该文件不存在,可以新建一个空白文件,命名为.vimrc按I进入编辑模式,ESC退出编辑模式,按“:”号进入vim的命令行模式,q退出,q!不保存退出,w保存
cd ~ //进入home/xxxx/目录
vim .vimrc //创建配置文件
上述步骤只是简单的安装了vim,没有安装插件的vim根本是无法展现其魅力的。以下列出并说明了我安装的一些插件,基本都是网上流行的插件
因为很多插件需要用到GitHub安装,所以首先要拥有GitHub账号。然后在ubuntu下安装git
sudo apt-get install git
然后要在GitHub上添加一个SSH Key表示授权装了ubuntu的这台终端可以授权访问Github。具体可以参考GitHub官网Generating a new SSH key and adding it to the ssh-agent
在接下来的插件安装过程中,如果我们是从GitHub上安装的话,会要求我们输入Github的用户名和密码
这是vim下常用的插件管理软件,我们通过配置文件,可以从Github安装。在Github上,你可以找到vundle项目,可以查阅到相关的配置文件内容。
从git上Clone Vundle,在home/xxxx目录下新建一个目录来保存Vundle,这里我们用和官网一致的.vim/bundle目录
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
执行成功后,我们就需要配置~/.vimrc文件,以下是我复制于Vundle在Github上的配置文件内容。注意,在.vimrc文件中,”号后的为注释内容,我修改了部分注释为中文,方便理解
set nocompatible " be iMproved, required
filetype off " required
" 下面此项设定vundle的安装目录,就是上面git下载的地址
set rtp+=~/.vim/bundle/Vundle.vim
" 所有的插件地址都要在call vundle#begin()和call vundle#end()之间
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" 如果插件位于GitHub,使用如下形式
" Plugin 'tpope/vim-fugitive'
" 如果插件位于vim官网的script仓库,比如来自http://vim-scripts.org/vim/scripts.html,使用如下形式
" Plugin 'L9'
" 如果插件是使用git发布的,但不在GitHub,所以使用如下形式
" Plugin 'git://git.wincent.com/command-t.git'
" git repos on your local machine (i.e. when working on your own plugin)
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
" Plugin 'ascenator/L9', {'name': 'newL9'}
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList - lists configured plugins
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
现在我们只有一个vundle插件,所以如上的配置就可以了,编辑完后,按:号键,输入wq保存退出,然后在终端中输入vim执行vim程序,然后在vim运行后,按:切换到命令行模式,并输入PluginInstall来安装插件。
注意:该命令会依次安装我们在配置文件中使用”Plugin“列出的所有插件,要注意,在安装插件时不要退出vim,会引起插件安装失败,然后即便再次重启vim,执行安装也不行,需要在.vimrc中删除那些”Plugin“配置项,然后在vim的命令行模式中输入BundleClean来卸载插件,然后再重新安装
看上图左下显示Done!代表Vundle已经成功安装
关于其他插件,我装了NerdTree,NerdCommenter,vim-fugitive,vim-surround,vim-airline,SourceExplore,这几个插件都是在GitHub上的,所以参考上面的描述,在.vimrc中添加几行相应内容就可以安装,配置如下
Plugin ‘vim-airline/vim-airline’
Plugin ‘tpope/vim-surround’
Plugin ‘tpope/vim-fugitive’
Plugin ‘scrooloose/nerdtree’
Plugin ‘scrooloose/nerdcommenter’
Plugin ‘wesleyche/SrcExpl’
其中NerdTree和SourceExplore需要增加一些其他配置,具体可以去GitHub上它们的项目网页查看,这里就不展开了,下面的配置是我直接从网上搜来的,我也没有仔细研究具体的配置内容,但是亲测可用
“”————————————————————-”
“NERD Tree environment configuration
“”————————————————————-”
let NERDTreeWinPos = “left” “NERD Tree places at the left side
nmap :NERDTreeToggle “F9 key = NERD Tree Toggling
” // The switch of the Source Explorer
nmap :SrcExplToggle
”
” ” // Set the height of Source Explorer window
let g:SrcExpl_winHeight = 8
”
” ” // Set 100 ms for refreshing the Source Explorer
let g:SrcExpl_refreshTime = 100
”
” ” // Set “Enter” key to jump into the exact definition context
let g:SrcExpl_jumpKey = “”
”
” ” // Set “Space” key for back from the definition context
let g:SrcExpl_gobackKey = “”
”
” ” // In order to avoid conflicts, the Source Explorer should know what
” plugins
” ” // except itself are using buffers. And you need add their buffer names
” into
” ” // below listaccording to the command “:buffers!”
let g:SrcExpl_pluginList = [
\ “Tag_List“,
\ “NERD_tree”
\ ]
”
” // Enable/Disable the local definition searching, and note that this is not
” // guaranteed to work, the Source Explorer doesn’t check the syntax for now.
” // It only searches for a match with the keyword according to command ‘gd’
let g:SrcExpl_searchLocalDef = 1
”
” // Do not let the Source Explorer update the tags file when opening
let g:SrcExpl_isUpdateTags = 0
”
” // Use ‘Exuberant Ctags’ with ‘–sort=foldcase -R .’ or ‘-L cscope.files’ to
” // create/update the tags file
let g:SrcExpl_updateTagsCmd = “ctags –sort=foldcase -R.”
”
” // Set “” key for updating the tags file artificially
let g:SrcExpl_updateTagsKey = “”
”
” // Set “” key for displaying the previous definition in the jump list
let g:SrcExpl_prevDefKey = “”
”
” // Set “” key for displaying the next definition in the jump list
let g:SrcExpl_nextDefKey = “”
在前面Vundle的插件安装中,有一种方式是从vim官网的Script官网进行安装的,我试了一个插件,但是没有成功。在vim官网的Script仓库中的插件很多是.vim格式,这类插件其实可以采用手动安装的方式
这种方式,首先我们下载插件文件压缩包,然后解包,将其中的.vim文件放到我们在安装vundle时建立的在home/xxxx/下的.vim/Plugin目录中。
.vim目录应该是vim的一个固有目录,vundle也只是使用了这个目录结构。其中Plugin应该是放置插件的地方,Doc目录应该是放置vim及插件的帮助文档的地方
将相应文件copy到这两个目录后,手动安装就算完成了
我这里手动安装了Taglist这个插件,根据vim官网说明,我复制了taglist.vim到plugin目录,taglist.txt到Doc目录,然后运行vim,在命令行模式输入Tlist完成安装
别人家的vim是不是都很高端,UI界面很漂亮,所以我安装了vim-colors-solarized,这个插件可以使用vundle从Git安装,具体的插件安装配置为
Plugin ‘altercation/vim-colors-solarized’
使用配置为
call togglebg#map(“”) //按F2切换亮色或是暗色背景
set background=dark
let g:solarized_termcolors=16
colorscheme SolarizedDark
这个插件的官网说明,我粗看了下,老实说没有很明白,我一开始只是希望能够自定义颜色(默认的话,就是它自带的颜色),不过看了官网说明我完全没有找到方法。所以一开始觉得这东西很不好用,没有办法在.vimrc配置颜色,不过大概是我一开始的方向就错了,偶然间发现了这个网站Bytefluent | Vivify,在该网站可以定制配色方案,并生成一个.vim文件,将生成的文件放在.vim/colors目录下,然后在上述配置文件中的colorscheme指定该文件,就可以了
这是我目前的配色
代码补全已经作为写代码时必备的功能之一了,我上网查了下,最后选定了YouCompleteMe这款插件,虽然功能强大,不过这个插件的难装程度也不一般。我上网查了好多教程,都不成功,最后是综合几篇教程后才成功安装的。下面详述我的安装方法,我不能确保所有人按照我的方法都能成功,所以请确保安装环境和我的一致。
(一)安装python和cmake
ubuntun 16.0.4已经自带python,版本2.7,YouCompleteMe需要版本2.3以上
sudo apt-get install python
另外请执行下面语句
sudo apt-get install python-dev python3-dev
因为如果不执行这句,稍后cmake编译时会说找不到python的lib和head,虽然系统已经显示python安装成功。如果不执行这句,可以尝试在cmake是设置-DPYTHON_LIBRARY,-DPYTHON_INCLUDE_DIR这两个参数来手动指定目录,或是设置环境变量类似这样PYTHON_INCLUDE_DIR=/usr/include/python2.7
PYTHON_LIBRARY=/usr/lib/python2.7/config/libpython2.7.so
安装cmake
sudo apt-get install cmake
python是为了正常编译YouCompleteMe,和启动YCM服务器,cmake这个应该不用解释是干什么的了吧
(二)下载llvm
在YouCompleteMe的网页上,推荐我们使用llvm官方编译好的二进制库。目前llvm官网已经有针对ubuntu14,ubuntun16的二进制库,所以我们只需要下载就可以了。目前最新的llvm已经到5.0.1
下载后,解压该包到指定目录,该路径日后要在配置文件使用,所以请好好选择,我是解压到了~/libs
xz -d clang+llvm-5.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz
tar -xvf clang+llvm-5.0.1-x86_64-linux-gnu-ubuntu-16.04.tar
我这里将解压出来的目录改为llvm,你可以任意改
(三)使用Vundle安装YouCompleteMe
YouCompleteMe可以从GitHub上安装,所以在.vimrc中增加配置如下
Plugin ‘Valloric/YouCompleteMe’
启动vim,按先前方法安装插件,这个过程比较长,长到你可能以为进程卡死了。在安装完后,如果你启动vim,我这里是出现了ycm shut down错误,网上有的文章是出现了“No module named ycmd”,也有可能是其它模块错误。这是因为我们需要编译YCM,否则ycm的服务器无法正常启动
(四)编译YCM
编译前,请建立一个临时目录,并在该目录下编译,因为编译生成的文件会生成到你的当前目录下。然后执行
cmake -G “Unix Makefiles” -DPATH_TO_LLVM_ROOT=~/libs/llvm . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
注意,上面的~/libs/llvm是前面我解压的目录,需要按实际目录修改。编译成功后,执行
cmake - -build . - -target ycm_core - -config Release
注意空格和两个-
(五)配置
最后一步,修改.vimrc配置文件如下
let g:ycm_server_python_interpreter= ‘/usr/bin/python2.7’
let g:ycm_global_ycm_extra_conf = ‘~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py’
let g:ycm_seed_identifiers_with_syntax=1
let g:ycm_confirm_extra_conf=0
inoremap pumvisible() ? “\” : “\”
set completeopt=longest,menu
如果找不到.ycm_extra_conf.py文件,它在~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/下。如果运行vim后,显示ycmd报错,其中关于python错误,可以尝试设置ycm_server_python_interpreter。我这里是指向了python2,也有可能你要指向python3的位置
至此完成YCM的安装
代码解析工具我选择了cscope和ctags,还没仔细研究两者的区别,只是说cscope是ctags的加强版本,反正似乎大家都安装了这两个,所以我也就随大流了
(一)安装ctags
sudo apt-get install exuberant-ctags
ctags的工作原理是对代码进行一次分析,然后将相关的标识保存在一个数据文件中。然后通过vim来使用该数据文件。所以我们要理解两点
(1)ctags需要在我们的每个项目目录中运行,因为每个项目的tags是不应该混在一起的
(2)每次代码修改后,我们需要重新执行ctags的命令,来重新生成这个数据文件
数据文件的生成很简单,在项目目录下执行
ctags -R
会生成一个tags文件。那么对于一些共通的库,比如linux内核,或是我们引用的某个标准库,它们的tags文件去哪里查找呢,难道在我们每个项目下都要为他们生成一个tags文件吗。其实不用,我们可以在这些标准库的中生成tags文件,然后在.vimrc配置文件中设定路径指向它们
set tags=tags
set tags+=./tags
其中第一行代表设置了一个tags目录,第二行的形式代表追加其他目录,你可以设置多条,./代表当前项目的目录
(二)安装Cscope
安装执行
sudo apt-get install cscope
同ctags一样,要在当前目录下执行cscope,cscope会在当前项目目录下生成几个文件,一般是cscope.in.out,cscope.po.out, cscope.out这三个文件。需要注意的是,当我们重建这些文件时,执行cscope的选项必须要对应。例如,第一次生成使用了-Rbq,则第二次也必须是-Rbq,除非你把这几个文件都删除,才能重新指定选项。
可以用-i选项,或是类似
find
pwd
-name .h -o -name .c -o -name *.cpp > cscope.files
命令来生成cscope.files列表文件,来加快其索引速度
至此,大部分常用插件安装配置完成。当中因为我也是想尽快配置环境成功,所以对一些插件,命令并没有仔细深入的研究和理解,也没有详细的看相关插件的文档,所以很多内容难免有错误,欢迎高手指正。总之本文的目的是以跑起来为宗旨,具体的其他详细的设置请大家参考官方的相关文档。我也会在使用过程中进一步研究,进行更新