作为一个程序员,一个常用的工具就是编辑器,常用的编辑器有Sublime Text、Emacs、Vim、Source Insight、Atom、TextMate.
中国范围,08年以前Vim和Emacs认知度较低,两基友相爱相杀,流行度不相上下;此后Vim一跃领先,在11年后以压倒性优势成为最流行的editor;Emacs份额也稳中有升,并在12年后迎来更广的认知度和流行度;Sublime Text的趋势跟Worldwide相似但略有delay,流行度在13年超越Emacs;TextMate一直作为小众的存在,从Sublime Text诞生起就被超越。
可以看出vim仍是目前的主流编辑器,它流行的一个主要原因就是可扩展。配上各种插件就可以实现非常炫酷的功能。
系统:Centos7
vim版本:8.0
基本所有的操作系统都会内置vim,但是YouCompleteMe插件要求vim版本7.4以上,所以我升级到了vim8.0,centos的包管理工具没有8.0的版本,需要进行手动编译安装。若vim版本大于7.4可忽略本步。
sudo yum install ncurses-devel
wget https://github.com/vim/vim/archive/master.zip
unzip master.zip
cd vim-master
cd src/
./configure --with-features=huge -enable-pythoninterp --with-python-config-dir=/usr/lib/python2.7/config --prefix=/usr/local/
sudo make
sudo make install
export PATH=/usr/local/bin:$PATH
vim --version
若没有安装git
sudo yum install -y git
下载vundle
mkdir ~/.vim/bundle
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
打开配置文件
vim ~/.vimrc
添加以下代码
set nocompatible " 去除VI一致性,必须要添加
filetype off " 必须要添加
" 设置包括vundle和初始化相关的runtime path
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" 另一种选择, 指定一个vundle安装插件的路径
"call vundle#begin('~/some/path/here')
" 让vundle管理插件版本,必须
Plugin 'VundleVim/Vundle.vim'
" 以下范例用来支持不同格式的插件安装.
" 请将安装插件的命令放在vundle#begin和vundle#end之间.
" Github上的插件
" 格式为 Plugin '用户名/插件仓库名'
Plugin 'tpope/vim-fugitive'
" 来自 http://vim-scripts.org/vim/scripts.html 的插件
" Plugin '插件名称' 实际上是 Plugin 'vim-scripts/插件仓库名' 只是此处的用户名可以省略
Plugin 'L9'
" 由Git支持但不再github上的插件仓库 Plugin 'git clone 后面的地址'
Plugin 'git://git.wincent.com/command-t.git'
" 本地的Git仓库(例如自己的插件) Plugin 'file:///+本地插件仓库绝对路径'
Plugin 'file:///home/gmarik/path/to/plugin'
" 插件在仓库的子目录中.
" 正确指定路径用以设置runtimepath. 以下范例插件在sparkup/vim目录下
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" 安装L9,如果已经安装过这个插件,可利用以下格式避免命名冲突
Plugin 'ascenator/L9', {'name': 'newL9'}
" 你的所有插件需要在下面这行之前
call vundle#end() " 必须
filetype plugin indent on " 必须 加载vim自带和插件相应的语法和文件类型相关脚本
" 忽视插件改变缩进,可以使用以下替代:
"filetype plugin on
用vim打开一个新的文件,执行
:PluginInstall
显式Done后安装完毕
打开vim的配置文件
vim ~/.vimrc
添加代码Plugin ‘scrooloose/nerdtree’在这行之前
" 你的所有插件需要在下面这行之前
call vundle#end() " 必须
添加后
Plugin 'scrooloose/nerdtree'
" 你的所有插件需要在下面这行之前
call vundle#end() " 必须
在vim中执行
:PluginInstall
在配置文件中添加以下代码
map t :NERDTreeToggle
"map :NERDTreeToggle
" 显示行号
let NERDTreeShowLineNumbers=1
let NERDTreeAutoCenter=1
" 是否显示隐藏文件
let NERDTreeShowHidden=1
" 设置宽度
let NERDTreeWinSize=30
" 在终端启动vim时,共享NERDTree
let g:nerdtree_tabs_open_on_console_startup=1
" 忽略一下文件的显示
let NERDTreeIgnore=['\.pyc','\~$','\.swp']
" 显示书签列表
let NERDTreeShowBookmarks=1
" vim不指定具体文件打开是,自动使用nerdtree
" autocmd StdinReadPre * let s:std_in=1
"autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree |endif
" 当vim打开一个目录时,nerdtree自动使用
" autocmd StdinReadPre * let s:std_in=1
" autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) &&
"!exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif
" 当vim中没有其他文件,值剩下nerdtree的时候,自动关闭窗口
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
在vim配置文件中call vundle#end() 之前添加
Plugin 'DoxygenToolkit.vim'
在call vundle#end() 之后添加
let g:DoxygenToolkit_briefTag_funcName = "yes"
" for C++ style, change the '@' to '\'
let g:DoxygenToolkit_commentType = "C++"
let g:DoxygenToolkit_briefTag_pre = "\\brief "
let g:DoxygenToolkit_templateParamTag_pre = "\\tparam "
let g:DoxygenToolkit_paramTag_pre = "\\param "
let g:DoxygenToolkit_returnTag = "\\return "
let g:DoxygenToolkit_throwTag_pre = "\\throw " " @exception is also valid
let g:DoxygenToolkit_fileTag = "\\file "
let g:DoxygenToolkit_dateTag = "\\date "
let g:DoxygenToolkit_authorTag = "\\author "
let g:DoxygenToolkit_versionTag = "\\version "
let g:DoxygenToolkit_blockTag = "\\name "
let g:DoxygenToolkit_classTag = "\\class "
let g:DoxygenToolkit_authorName = "suntangji, [email protected]"
let g:doxygen_enhanced_color = 1
"let g:load_doxygen_syntax = 1
nmap :DoxAuthor
在vim中执行
:PluginInstall
taglist依赖ctags,需要进行安装
sudo yum install -y ctags
在vim配置文件中call vundle#end() 之前添加
Plugin 'taglist.vim'
在call vundle#end() 之后添加
let Tlist_Ctags_Cmd='ctags'
let Tlist_Show_One_File=1 "不同时显示多个文件的tag,只显示当前文件的
let Tlist_WinWidt =28 "设置taglist的宽度
let Tlist_Exit_OnlyWindow=1 "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window=1 "在右侧窗口中显示taglist窗口
"let Tlist_Use_Left_Windo =1
map l :Tlist
在vim中执行
:PluginInstall
在vim配置文件中call vundle#end() 之前添加
Plugin 'scrooloose/nerdcommenter'
在vim中执行
:PluginInstall
在vim配置文件中call vundle#end() 之前添加
Plugin 'bling/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
在call vundle#end() 之后添加
let g:airline_theme="luna"
"这个是安装字体后 必须设置此项"
"let g:airline_theme="kolor"
let g:airline_powerline_fonts = 1
set laststatus=2 "永远显示状态栏
set t_Co=256 "在windows中用xshell连接打开vim可以显示色彩
"打开tabline功能,方便查看Buffer和切换,这个功能比较不错"
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_nr_show = 1
"设置切换Buffer快捷键"
nnoremap :bn
nnoremap :bp
" 关闭状态显示空白符号计数,这个对我用处不大"
let g:airline#extensions#whitespace#enabled = 0
let g:airline#extensions#whitespace#symbol = '!'
" unicode symbols
let g:airline_left_sep = '»'
let g:airline_left_sep = '▶'
let g:airline_right_sep = '«'
let g:airline_right_sep = '◀'
在vim中执行
:PluginInstall
初次安装以后打开Vim,若发现状态栏会出现乱码,这时有两种解决方案,一种是安装powerline字体或者Nerd Fonts实现字体显示,另一种是用unicode字符替代,对于第一种方案,字体的安装请参考github相应主页上的说明
该插件需要手动编译
首先安装依赖
sudo yum install -y python-dev python3-dev gcc cmake
该方式下载时间较长,不会进行仓库完备性检查
在vim配置文件中call vundle#end() 之前添加
Plugin 'Valloric/YouCompleteMe'
在vim中执行
:PluginInstall
git clone https://github.com/Valloric/YouCompleteMe.git ~/.vim/bundle/YouCompleteMe
git submodule update --init --recursive
进行编译
cd ~/.vim/bundle/YouCompleteMe
sudo yum upgrade
sudo ./install.py --clang-completer
安装完成后将.yum_extra_conf.py复制一份到 ~/
cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/
打开.yum_extra_conf.py,在flags中添加以下代码
'-isystem',
'/usr/include',
'-isystem',
'/usr/include/c++/',
'-isystem',
'/usr/include/i386-linux-gnu/c++'
把flags中‘home/xxx’更改为’home/你的用户名’
打开配置文件.vimrc添加
let g:ycm_global_ycm_extra_conf='~/.ycm_extra_conf.py' "设置全局配置文件的路径
let g:ycm_seed_identifiers_with_syntax=1 " 语法关键字补全
let g:ycm_confirm_extra_conf=0 " 打开vim时不再询问是否加载ycm_extra_conf.py配置
let g:ycm_key_invoke_completion = '' " ctrl + a 触发补全
set completeopt=longest,menu "让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
至此,大功告成!