vim是一款很方便的编辑器。Ubuntu是我的生产环境,自己的私人笔记本是MacBook Pro,需要在上面安装vim。
隆重推荐vim教程,作者写地很用心,非常详尽,值得一看,我进行了大量参考。
安装vim
Ubuntu系统其实原生地是安装了vim的,但是vim的版本一般都比较老,对于一些插件就不支持了,比如YouCompleteMe. 因此,首先需要安装一个新版本的vim(8.0以上)。有两种安装方法,一种从GitHub上下载源码,然后进行编译;另一种是采用apt-get或者brew安装。 看到一些教程上推荐下载源码编译安装,但是最近国内的网上GitHub的速度真心一言难尽,再加上编译vim似乎需要大量的配置环境,较为麻烦。因此我采用第二中方法安装 vim.
sudo add-apt-repository ppa:jonathonf/vim
sudo apt-get update
sudo apt-get install vim
or on MacOS
brew update
brew install vim
采用上述命令可以较快地安装vim,更换国内源。但可能系统默认的vim还是原先的vim,可以用which vim查看下.一般地,在/usr/local/bin目录下的vim可执行文件就是 新安装的vim,也可以同vim –version查看vim的版本是否更新。如果还是原来的vim,在macos上可以通过在bash配置文件中添加下面一行,然后再source,使之生效。
vim ./bash_profile
" 添加至第一行
export PATH=/usr/local/bin:${PATH}
source ~/.bash_profile
插件安装
vim本身只是一个简单朴素的编辑器,只有安装了强大的插件,才给它插上了腾飞的翅膀。安装插件的过程就是对vim进行升级改造的过程。
vundle
vim是一个开源的编辑器,其插件也是开源,开源虽好,但不免良莠不齐、泥沙俱下。不同开发者开发的插件安装方法可能会不尽相同。如果每个插件都需要专门学习 安装、卸载方法,那学习成本其实挺高的。因此需要vundel来对插件进行统一的管理。安装、更新和卸载。
第一步,从GitHub下载vundle的代码,放在.vim文件夹下面。
mkdir -p .vim/bundle
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
第二步,修改用户目录下的.vimrc(也就是vim的配置文件,如果没有,可以自行在用户目录下创建,在系统根目录下也是有.vimrc的配置文件,最好不要修改之)
set rtp+=~/.vim/bundle/vundle.vim
" vundle 管理的插件列表必须位于 vundle#begin() 和 vundle#end() 之间
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
" 插件列表结束
call vundle#end()
如上所示,设定插件的地址,也就是上一步clone代码的地址。然后,在call vundle#begin()和call vundle#end()之间加上插件的名称。然后,保存退出.vimrc文件。 新建vim,执行:PluginInstall命令,完成vundel的安装。这样其他插件就可以通过vundel进行管理。
- PluginInstall : 安装vimrc文件中新添加的插件;
- PluginUpdate : 将vimrc文件中的插件进行更新;
- PluginClean : 将vimrc文件中删除的插件卸载。
常用插件
首先是配色插件,可以对vim的配色方案进行改进,主要有三种:
Plugin 'altercation/vim-colors-solarized'
Plugin 'tomasr/molokai'
Plugin 'vim-scripts/phd'
安装这三个插件之间,可以在vimrc文件中通过以下配置对其进行自由选择。
" 配色方案
set t_Co=256
set background=dark
colorscheme solarized
"colorscheme molokai
"colorscheme phd
个人认为solarized的配色最好看,但是这个插件已经多年没有更新,以至于新系统的终端颜色效果会很奇怪。所有在加上set t_Co=256,使用256配色系的方案,会正常 一些。
其次是缩进配置,在编写代码的时候,循环、条件等出现不同的层次,优秀的编辑器应当显示不同的层次。这样推荐vim-indent-guides插件。
Plugin 'nathanaelkane/vim-indent-guides'
" 随 vim 自启动
let g:indent_guides_enable_on_vim_startup=1
" 从第二层开始可视化显示缩进
let g:indent_guides_start_level=2
" 色块宽度
let g:indent_guides_guide_size=1
" 快捷键 i 开/关缩进可视化
nmap <silent> <Leader>i <Plug>IndentGuidesToggle
再次是注释代码插件,在编码过程中需要注释代码块,理论上可以通过visual block模式进行插入注释符号。可以用nerdcommenter插件进行快速注释和取消注释。
Plugin 'scrooloose/nerdcommenter'
安装插件之后,shift+V进入visual·line模式,选择需要注释的代码段,leader + cc进行注释,leader + cu取消注释。
YouCompleteMe插件
这个插件单独拿出来的谈的原因在于,第一:插件功能很强大,可以根据语法(类与成员的所属关系,名字空间等)进行自动补全,可以提示语法错误等; 第二:插件比较难装,上面介绍的几个插件都是在vimrc文件中进行相应设置即可,这个插件需要特殊的处理,下面介绍如何正确安装该插件。
# 0. 查看vim版本,无脑升级到8.1
vim --version
# 1. github下载源码
git clone --recursive https://github.com/Valloric/YouCompleteMe.git ~/.vim/bundle
cd ~/.vim/bundle/YouCompleteMe
git submodule update --init --recursive
# 2. 安装编译依赖
sudo apt-get update
sudo apt-get install build-essential cmake python-dev python3-dev
# 3. 编译支持c++,无脑sudo
cd .vim/bundle/YouCompleteMe/
sudo ./install.py --clang-completer
# 3. 在MacOS上执行上步的时候,可能会报错,
CMake Error: The source directory
"/Users/shengfazhu/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/cregex"
does not appear to contain CMakeLists.txt.
这个问题是由于在clone的时候网络问题,并没有将cregex文件夹中的所有文件完整地下载。解决办法:
rm -rf /Users/shengfazhu/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/cregex/
cd /Users/shengfazhu/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/
git submodule update --init --recursive
然后再执行sudo ./install.py --clang-completer
# 4. 添加插件名,进入bundle管理
vim ~/.vimrc
Plugin 'Valloric/YouCompleteMe'
sudo vim
:PluginInstall
# 5. 配置全局YouCompleteMe配置文件
vim ~/.vimrc
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py'
网上的一些比较旧教程的编译方法比较复杂,现在(2019-8)YouCompleteMe已经提供安装脚本。可以直接调用,编译完成后vim将支持c语言家族的语法补全。 注意,在MacOS系统上,brew install build-essential是找不到该文件的,但是没有关系,macOS系统里面已经有了相似功能的文件,只需用brew install cmake即可。
clang-format插件
一些开源项目和公司会要求代码中没有行末空符,空行连续不能超过两行等。虽然说这些对于代码的功能没有影响,但是还是非常影响代码的美观的。此时,可以用 clang-format插件,对代码格式进行管理。可以通过下列方式进行安装
# 1. 安装clang-format,在/usr/share/clang文件夹下会有clang-format-3.x
sudo apt-get update
sudo apt-get install clang-format
# 2. bundle安装clang-format插件,~/.vimrc中添加
Plugin 'rhysd/vim-clang-format'
:PluginInstall
# 3. 配置~/.vimrc文件 clang format(http://clang.llvm.org/docs/ClangFormat.html#vim-integration)
" use leader + f in NORMAL Model
map <leader>f :py3f /usr/share/clang/clang-format-3.8/clang-format.py<cr>
" use leader + f in INSERT Model
imap <leader>f <c-o>:py3f /usr/share/clang/clang-format-3.8/clang-format.py<cr>
# 官方网页上下的是pyf而不是py3f,安装得到的clang-format.py文件也的确是python2的文件,
# 但由于YouCompleteMe插件要求vim的版本较高,vim8是由python3编译的,vim也支持python3
# 因此,如果此时在vim中执行快捷键;+f,会显示Error: Command doesnot support in this version(pyf not py3f)
# 如果仅仅将pyf改成py3f还是不行,因为默认的clang-format.py是由python2编写的
" set clang-format range to all file
function FormatFile()
let l:lines="all"
py3f /usr/local/Cellar/clang-format/2019-01-18/share/clang/clang-format.py
endfunction
" aotu format when leave INSERT Model
let g:clang_format#auto_format_on_insert_leave=1
# 4. 替换clang-format.py文件
wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format.py
# 5. 生成.clang-format配置文件,放入工程根目录下
---
BasedOnStyle: google
IndentWidth: 4
AccessModifierOffset: -3
AllowAllParametersOfDeclarationOnNextLine: true
BinPackParameters: false
SortIncludes: false
...
至此,vim已经比较像样了,可能还需要一个doxygen来进行注释的编写。
vim大法好