Author : Jungle
Creat Time : 2017/8/3
Mail : yjxxx168@qq.com
Last Change :
学习、总结,交流,进步!
插件与脚本使得VIM强大,毋庸置疑!
全程参考:所需及所获:像使用IDE一样使用vim
其余参考将会在文中相关部分列出。
文中内容如有错误,请指正!
原创,转载请注明出处!
VIM装请自行搞定。版本7.x + 。
请检查用户目录下是否存在: .vim/文件夹和.vimrc用户配置文件,可以使用命令 ls -l ~ 查看。
.vim/文件夹用于存放后续所有插件。
.vimrc用于配置VIM功能,包括基本语法、插件配置以及部分脚本等。
如果没有请自行创建。
可以直接添加到.vimrc文件中
" General set
" .vimrc 文件保存后自动生效
autocmd! bufwritepost .vimrc source % " linux
"let g:mapleader=";" " vim 前缀键设置,默认为: \
set autowrite " auto save file
set nobackup " 不产生临时文件
set noswapfile " 不产生临时文件
"set t_ti= t_te= " 退出VIM时,将当前屏幕内容显示到终端屏幕上
" 不使用鼠标,方向键。实测插入模式中还是可以使用
"set mouse-=a
"map <Left> <Nop>
"map <Right> <Nop>
"map <Up> <Nop>
"map <Down> <Nop>
" 普通模式时使用ctrl+h/j/k/l 实现多文件编辑时窗口切换
nnoremap <C-j> <C-W>j
nnoremap <C-k> <C-W>k
nnoremap <C-h> <C-W>h
nnoremap <C-l> <C-W>l
" 插入模式时使用ctrl+h/j/k/l 实现光标移动
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-h> <Left>
inoremap <C-l> <Right>
Vundle是一个行之有效的插件,接管.vim/文件夹,为每一个插件指定唯一目录。更清晰、明了。
Vundle会接管.vim/文件夹下的所有目录,所以先清空。在通过命令安装Vundle:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
然后在.vimrc中增加配置:
" vundle set
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'altercation/vim-colors-solarized'
Plugin 'tomasr/molokai'
"Pluglin 'vim-scripts/phd'
"Plugin 'Lokaltog/vim-powerline'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
"Plugin 'nathanaelkane/vim-indent-guides'
Plugin 'Yggdroot/indentLine'
Plugin 'derekwyatt/vim-fswitch'
Plugin 'majutsushi/tagbar'
Plugin 'vim-scripts/indexer.tar.gz'
Plugin 'vim-scripts/DfrankUtil'
Plugin 'vim-scripts/vimprj'
Plugin 'easymotion/vim-easymotion'
"Plugin 'mileszs/ack.vim'
Plugin 'dyng/ctrlsf.vim'
Plugin 'terryma/vim-multiple-cursors'
Plugin 'Yggdroot/LeaderF'
Plugin 'scrooloose/nerdcommenter'
Plugin 'ShowTrailingWhiteSpace'
Plugin 'SirVer/ultisnips'
"Plugin 'honza/vim-snippets'
Plugin 'Valloric/YouCompleteMe'
Plugin 'scrooloose/nerdtree'
Plugin 'fholgado/minibufexpl.vim'
Plugin 'Tabular' " automatic alignment
Plugin 'plasticboy/vim-markdown' "
Plugin 'iamcco/markdown-preview.vim'
"Plugin 'iamcco/mathjax-support-for-mkdp'
call vundle#end()
filetype indent on " different file smart indent
filetype plugin on " load the corrrsponding plug-in for different f
filetype plugin indent on " open antomatic completion
vundle管理的插件必须位于call vundle#begin() 和 call vundle#end()之间,其中每项
Plugin 'VundleVim/Vundle.vim'
对应一个插件,后续如有新的插件,只需要追加到该列表中。安装新插件时需要在Github上找到插件地址,追加到列表中保
存.vimrc文件,然后进入到VIM命令模式,执行:
PluginInstall
便可以通过vundle自动安装插件。
需要卸载插件时,需要在.vimrc文件中注释该插件或者删除,保存.vimrc文件后,在命令模式执行:
PluginClean
即可删除该插件。关于插件更新,直接在命令模式下,执行:
PluginUpdate
即可更新整个插件列表。
关于插件: 多数插件在Github上都有不同的下载源,优先选取该插件的作者的下载源。
界面优化,主题配置:
" Vim-UI set {
" theme {很实用的两款:solarized、molokai
set background=dark
let g:solarized_termtrans=256
colorscheme solarized
"colorscheme molokai
"set guifont = " set default font
" }
" code fold {代码折叠的方式,method: manual, indent, expr, syntax, diff, marker
"set foldenable " 启动VIM时,折叠
set nofoldenable " 启动VIM时,不折叠
set foldmethod=syntax " 基于语法进行折叠
"set foldmarker={,}
" }
" search {搜索
set incsearch "
set hlsearch " 搜索结果高亮
set ignorecase " 忽略大小写
" }
syntax enable " 语法高亮
syntax on "
set expandtab " 使用空格键代替TAB键
set tabstop=4 " TAB键的宽度
set shiftwidth=4 " TAB键4个空格键
"set softtabstop=4 " 把4个空格键自动识别为疑个TAB键
set laststatus=2 " 总是显示状态栏
set ruler " 打开状态标尺
set number " 显示行号
set nowrap "
set autoindent " 自动缩进
set cursorline " 高亮当前行
"set cursorcolumn " 高亮当前列
set showmatch " highlighting the matching brack
"set gcr=a:block-blinon0 " 禁止光标闪烁
"set guioptions-=l " ban on the scroll bar dispaly
"set guioptions-=L
"set guioptions-=r
"set guioptions-=R
"set guioptions-=m " ban on the menu bar dispaly
"set guioptions-=M
" }
通过前面插件列表下载了solarized、molokai两款主题,可以通过注释其中一款而是用另一款。在实际使用中molokai可以直接
使用,而主题solarized使用时,背景配色异常,最后通过以下方式正常使用(安装后能够正常使用的请忽略)。
选取终端菜单栏中Edit(编辑)栏,最后一项Profile Preference,在弹出界面框中选中color项,如下图所示:
文件代码量大时,可能会对分析代码产生干扰,或者通过折叠函数调用与定义之间的代码,可以更加直观的理解函数功能。
VIM自身支持多种折叠:手动折叠(manual)、基于缩进进行折叠(indent)、基于语义进行折叠(syntax)、未更改文本构成折叠等
等。其中indent、syntax较为适合编程。此段摘抄 所需及所获:像使用IDE一样使用vim 4.3节。
操作: za: 打开或关闭当前折叠;zM: 关闭多有折叠;zR: 打开多有折叠。
VIM基本配置项很多,本人并没有进行太多设置,具体设置项的作用或者功能,请参考其他.vimrc文件,或者对该项
Search,基本上都能够得到解释,在此不过多赘述。将会在文末贴上部分其他作者的.vimrc文件,以供参考。
set laststatus=2 " 总是显示状态栏
"Plugin 'Lokaltog/vim-powerline'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
vim-powerline 和 vim-airline 都是状态栏美化插件,选用其一,注释另外一个。vim-airline-theme 提供 vim-airline 的主题,
在其路径 vim-airline-theme/doc/ 下文件 airline-themes.txt 有对于可使用的主题的介绍。
状态栏配置,在.vimrc文件中添加以下内容:
" set powerline theme style
let g:Powerline_colorscheme='solarized256'
当选择vim-powerline作为状态栏主题时,添加上述内容;选择vim-airline时,添加以下内容:
" set airling theme style
let g:airline_theme='powerlineish'
Plugin 'Yggdroot/indentLine'
"Plugin 'nathanaelkane/vim-indent-guides'
很多代码规范中建议代码嵌套最多不能超过3层,但难免有更多层出现。vim-indent-guides 插件提供可视化缩进,将相同缩进
的代码关联起来,vim-indent-guides通过识别制表符来绘制缩进连接线。在.vimrc文件中添加如下配置:
" set indent guides
let g:indent_guides_enable_on_vim_startup=1 " 打开VIM时跟随启动
let g:indent_guides_start_level=2 " 从第二层开始可视化缩进
let g:indent_guides_guide_sizw=1 " 色块宽度
本人配置完成后使用,发现色块宽度占了4个空格,原因未查。
另外一个插件indentLine 是同胞写的,在显示可视化缩进时,只有一根细线,甚和我意。推荐一哈,后面还有一款他写的
插件LeaderF,提供文件搜索功能,后面在介绍。indentLine基本上可以不用配置,但提供几个可选用配置项。
" set indentLine
"let g:indentLine_enable = 1 " 默认就是开启的
"let g:indentLine_char = '┆' '│' '⎸' '▏' '¦' " 配置可视化缩进时的显示符号,选其一
"let g:indentLine_color_term = 239 " 参看作者的解释
"map <C-i> :IndentLineToggle<CR> " 映射快捷键用来开启/关闭可是话缩进
Plugin 'derekwyatt/vim-fswitch'
vim-fswitch 用来实现在源文件和头文件中快速切换,但需要保证文件名相同,比如main.c和main.h。需要在.vimrc文件
中添加:
" *.c** & *.h, fast switch
nmap <M-t> :FSHere<CR> " 切换文件 *.c/cpp/.. & *.h
我在这里使用了Alt+t组合键,M代表Alt键。个人觉得这个键,使用很方便。插播一下Alt键说明:
这个键
代码中的变量、宏、结构、枚举、类、函数、对象等等这些统称为标识符,每个标识符的定义、所在文件的行位置、所在文件
的路径等信息就是标签(tag)。此段摘抄 所需及所获:像使用IDE一样使用vim 4.6节。
Exuberant Ctags就是一款经典的用于生成代码标签信息的工具,支持数十种语言。请在终端中执行命令安装。
安装完成后,在代码目录中执行:
ctags -R
将会在当前目录下生成tag文件,包含了当前目录下所有文件的标识符集合。
标签除了可以很直观展示当前文件中的各种信息,还能提供强大的导航和补全功能,接下来将会一一介绍。
在生成tag文件后,可以通过插件 tagbar 把从当前代码文件中提取出的所有标识符放在一个侧边子窗口中,并且能够按语法
规则将标识符进行归类。tagbar安装完成后在.vimrc文件中添加如下配置:
" set tagbar
map <F8> :TagbarToggle<CR> " 通过快捷键F8实现tagbar打开/关闭
let tagbar_left=1 " 设置tagbar子窗口的位置出现在主编辑的左边
let tagbar_width=32 " 设置窗口宽度
let g:tagbar_compact=1 " 子窗口不显示冗余帮助信息
let g:tagbar_sort=0 " 设置默认排序方式为在文中出现的位置
let g:tagbar_type_cpp = { " 设置对哪些代码标识符生成标签
\'kinds' : [
\ 'c:classes:0:0',
\ 'd:macros:0:0',
\ 'e:enumerators:0:0',
\ 'f:functions:0:0',
\ 'g:enumeration:0:0',
\ 'l:local:0:0',
\ 'm:members:0:0',
\ 'n:namespaces:0:0',
\ 'p:functions_prototypes:0:0',
\ 's:structs:0:0',
\ 't:typedefs:0:0',
\ 'u:unions:0:0',
\ 'v:global:0:0',
\ 'x:wxternal:0:0'
\ ],
\ 'sro' : '::',
\ 'kind2scope' : {
\ 'g' : 'enum',
\ 'n' : 'namespaces',
\ 'c' : 'class',
\ 's' : 'struct',
\ 'u' : 'union'
\ },
\ 'scope2kind' : {
\ 'enum' : 'g',
\ 'namespace' : 'n',
\ 'class' : 'c',
\ 'struct' : 's',
\ 'union' : 'u'
\ }
\ }
进入之前生成tag文件的目录下,打开某一源文件后,通过快捷键F8 打开tagbar子窗口,可以通过快捷键ctrl+w+w快
速切换子窗口,类似alt+tab的功能,或者使用前面定义的ctrl+h/i/j/k在normal模式下进行窗口切换,进入到tagbar
窗口中。
在标识符列表中选中对应标识符后即可跳转至源码中对应位置;在源码中停顿几秒,tagbar将高亮对应标识符。tagbar有两
种排序方式,一是按标签字母先后顺序;一是按标签在源码中出现的先后顺序。此段摘抄 所需及所获:像使用IDE一样使用vim
4.7节。
注释掉let g:tagbar_sort=0,将会使用字母顺序排序。
开发时代码不停在变更,如果每次都需要手动执行命令生成新的标签文件,太麻烦。通过引入插件 indexer 实现自动生成标签。
并引入。indexer 依赖 DfrankUtil、vimprj 两个插件,请一并安装。 此段摘抄所需及所获:像使用IDE一样使用vim 4.7节。
Plugin 'vim-scripts/indexer.tar.gz'
Plugin 'vim-scripts/DfrankUtil'
Plugin 'vim-scripts/vimprj'
并在.vimrc文件中添加:
" 设置插件 indexer 调用 ctags 的参数
" 默认 --c++-kinds=+p+l,重新设置为 --c++-kinds=+p+l+x+c+d+e+f+g+m+n+s+t+u+v
" 默认 --fields=+iaS 不满足 YCM 要求,需改为 --fields=+iaSl
let g:indexer_ctagsCommandLineOptions="--c++-kinds=+p+l+x+c+d+e+f+g+m+n+s+t+u+v --fields=+iaSl --extra=+q"
另外,indexer 还有个自己的配置文件,用于设定各个工程的根目录路径,配置文件位于~/.indexer_files,内容格式为:
[project_name]
/project/code
方括号内为自动生成的标签文件名字,一般更工程一样。路径为工程的代码目录,不要包含构建目录,文档目录等,以免产生
非代码文件的标签信息。当打开以上目录任何代码文件时,插件indexer便对整个目录创建标签文件,当代码有更新,文件
保存时,indexer将自动调用ctags更新标签文件。indexer生成的标签文件以方括号内的名字命名,位于目录
~/.indexer_files_tags/ 下,并自动引入Vim中。此处3段摘抄 所需及所获:像使用IDE一样使用vim 4.7节。
主要两类导航: 基于标签的跳转和基于语义的跳转。
既然Vim可以引入标签,说明Vim能识别标签。虽然标签文件中并无行号,但已经有标签所在文件以及标签所在行的完整内
容,Vim只需切换至对应文件,再在文件内做内容查找即可找到对应行。换言之,只要有对应的标签文件,Vim就能根据标
签跳转至标签定义处。
在前述已生成标签文件的项目目录中打开任意文件,将光标定位到某一函数名或变量上,键入快捷键g],Vim将罗列处该
函数或变量名所有的标签候选列表,按需要键入编号后按Enter键即可跳转进入。
基于语义的跳转是在后面介绍补全时的一款插件YCM的功能。此处直接给出快捷键设置,在.vimrc文件中添加配置:
"nnoremap <M-=> :YcmCompleter GoToDefinition<CR> " jump to define
"nnoremap <M-=> :YcmCompleter GoToDeclaration<CR> " jump to declaration
nnoremap <M-=> :YcmCompleter GoToDefinitionElseDeclaration<CR> " jump to define or declaration
YCM提供这三个快捷键定义,意思很明了,可以根据自己情况进行配置,当然需要配置不同的快捷键。
但是个人感觉,这两个插件的跳转功能都不够好用。
写到这儿,有点不想写了。很多东西在我参考的文章中都很详细,很多地方都是摘抄过来的,所以后续我回直接贴出我所介绍
的插件在原文章中的章节位置,然后主要介绍我所遇到的一些小问题和解决办法,以及我的快捷键配置,提供十分有限的参考
价值,谢谢。
####### 快速移动
vim-easymotion 更多请参考 所需及所获:像使用IDE一样使用vim 8.3节。
.vimrc文件配置如下:
Plugin 'easymotion/vim-easymotion'
" set easymotion
let g:EasyMotion_leader_key='f'
设置启用easymotion的前缀键<Leader>为f,在normal模式下,双击f键后输入需要跳转到的位置的字母,然后根
据快速跳转的字符,快速定位到目标位置。
####### 内容查找
更多请参考 所需及所获:像使用IDE一样使用vim 4.8节。
ctrlsf.vim 后端调用ack一定记得安装。
.vimrc文件中添加配置如下:
Plugin 'dyng/ctrlsf.vim'
" set ctrlsf
let g:ctrlsf_ackprg='ack' " set default
nnoremap <M-f> :CtrlSF<CR> " 键入快捷键alt+f,搜索光标当前字符串的匹配项
ctrlsf通过p键可以定位到匹配项的完整代码,类似跳转功能,键入q退出插件。
更多请参考 所需及所获:像使用IDE一样使用vim 4.9节。
vim-multiple-cursors 配合ctrlsf插件,实现多个不同位置的字符串替换。
.vimrc文件中添加如下配置:
Plugin 'terryma/vim-multiple-cursors'
" set multiple-sursors
let g:multi_cursor_use_default_mapping=0
let g:multi_cursor_next_key='<S-n>'
let g:multi_cursor_prev_key='<S-p>'
let g:multi_cursor_skip_key='<S-s>'
let g:multi_cursor_quit_key='<ESC>'
S表示Shift键。在通过ctrlsf插件列举处匹配项后,则可以通过快捷键S-n选中当前匹配项并跳到下一个匹配项,键
入S-s则可以跳过当前项而选中下一个,可以通过S-p回退到前一个匹配项。键入Esc推出插件。
Vim自带很强大的替换功能,这里就不介绍了。建议了解一哈,一般会看这篇文档的,都有可能在面试的时候被提问。
Plugin 'Yggdroot/LeaderF'
ctrlP 和LeaderF 插件都能实现文件搜索功能,ctrlP在网上搜索就能找到配置方法,这里不介绍。这里使用的LeaderF在网
上资料不多,看作者的介绍操作,暂时还不够熟悉,后续补充。
更多请参考 所需及所获:像使用IDE一样使用vim 5.1节。
NERD Commenter 能够快速注释/取消注释,并且提供不同的注释方式。
在.vimrc文件中添加配置:
Plugin 'scrooloose/nerdcommenter'
" set nerdcommenter
map <M-c> <Leader>cc " add comment
map <M-u> <Leader>cu " cancel comment
map <M-a> <Leader>ca " switch /* */ & //
let g:NERDSpaceDelims=1 " 强制在注释符旁边增加一个空格
在Vim normal模式下,键入v或者V进入可视化模式,通过h/j/k/l选中需要注释的部分,键入快捷键alt+c则注释
当前选中代码。反之,选中需要取消注释的部分,键入快捷键alt+u取消注释。alt+a可以切换注释方式:/* */或者//,
但这个快捷键定义跟某些有冲突,将就可用,也可以自定义其他。
这个插件是我在知乎的一个回答中了解到的,有实用性,提供参考。贴上这个知乎的帖子:
https://www.zhihu.com/question/19989337
写程序时,虽然行尾的空格都看不见,遇上了的话,有点强迫症的肯定受不了。为了能够显示行尾的空格,需要
ShowTrailingWhiteSpace这个插件。在.vimrc中添加如下内容:
Plugin 'vim-scripts/ShowTrailingWhiteSpace'
" set ShowTrailingWhitespace
let g:ShoeTrailingWhitespace=1 " default ON; 1 on, 0 off
highlight ShowTrailingWhitespace ctermbg=Red guibg=Red " 可以理解为高亮行尾空格
帖子中的回答者,还提供了一个快捷键,自动清理文件中所有行尾的空格:
"strip all trailing whitespace in the current file
nnoremap <leader>w :%s/\s\+$//<cr>:let @/=''<CR>
我自己改变了一哈,每次保存文件的时候,自动清除当前文件中所有行尾的空格:
"autocmd BufWritePre *.c,*.cpp,*.h,*.sh, :%s/\s\+$//e
autocmd BufWritePre * :%s/\s\+$//e
注释掉的配置,表示只在这几个类型的文件执行保存文件命令时自动清除行尾空格,文件类型自己根据需要添加。
主要介绍三种补全:模板补全,基于标签的补全,基于语义的补全。
模板补全: 更多请参考 所需及所获:像使用IDE一样使用vim 5.2节。
ultisnips 提供相同代码段的快速输入,比如if-else、switch-case语句。
在.vimrc文件中添加如下配置:
Plugin 'SirVer/ultisnips'
"Plugin 'honza/vim-snippets'
ultisnips补全时用于选中的键为tab,与后面将要提到的插件YCM的快捷键有冲突,所以提供改建的配置方式。
个人选择改YCM的快捷键。
" set ultisnips
"let g:UltiSnipsExpandTrigger="<Leader><tab>"
"let g:UltiSnipsJumpForwardTrigger="<M-n>"
"let g:UltiSnipsJumpBackwardTrigger="<M-m>"
另外需要说明的一点是,下载ultisnips插件后,默认是没有提供模板补全用的文件的。需要自己下载。
一种方式时安装插件vim-snippets,复制~/.vim/bundle/vim-snippets/UltiSnips整个文件夹到~/.vim/bundle/ultisnips
目录下面即可。另一种是自己到github上去下载, https://github.com/honza/vim-snippets ,其实内容都是一样的。我认为这
个插件最好的点是支持自己定义,很强大。
基于标签的补全: 详情请参考 所需及所获:像使用IDE一样使用vim 5.3节部分。
基于语义的补全: 更多请参考 所需及所获:像使用IDE一样使用vim 5.3节部分。
YouCompleteMe 插件在安装过程中,参看文章的作者以及很多其他介绍YCM插件使用的作者都有说到,YCM原作者建议下
载LLVM官网提供的预编译二进制文件,以避免各种问题。但我按照教程介绍,最后编译生成始终只有一个ycm_core.so
文件,也没有查找到原因,待优化。然后后面我是按照YCM原作者Git项目中README.md文件中Ubuntu Linux x64部分实
现安装的,不需要手动下载库,按作者的顺序执行即可,需要比较长的时间。需要确认已安装Cmake、python-dev、
python3-dev,没有的话请自行安装。更多请自行阅读 README.md 。
YCM插件需要在.vimrc文件中添加配置:
Plugin 'Valloric/YouCompleteMe'
" set YouComplete
set runtimepath+=~/.vim/bundle/YouCompleteMe
let g:ycm_collect_identifiers_from_tags_files=1 " 开启YCM标签补全
let g:ycm_complete_in_comments=1 " 补全功能在注释中同样有效
let g:ycm_seed_identfiers_with_syntax=1 " 语法关键字补全
let g:ycm_confirm_extra_conf=0 " 允许VIM加载.ycm_extra_conf.py 文件,不再提示
let g:ycm_key_list_select_completion=['<M-n>', "<Down>"] " 补全列表中 向下选中
let g:ycm_key_list_previous_completion=['<M-m>', "<Up>"] " 补全列表中 向上选中
let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项
let g:ycm_cache_comnifunc=0 " 禁止缓存匹配项,每次都重新生成匹配项
" 加载.ycm_extra_conf.py 文件的路径,可以不用每个工程目录下都去添加这个文件
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_part/ycmd/cpp/ycm/.ycm_extra_conf.py'
"nnoremap <M-=> :YcmCompleter GoToDefinition<CR> " 跳转到声明/定义的位置,在前面跳转部分有介绍
"nnoremap <c-j> :YcmCompleter GoToDefinitionElseDeclaration<CR>
nnoremap <M-=> :YcmCompleter GoToDefinitionElseDeclaration<CR>
另外还需要配置.ycm_extra_conf.py文件以及引入标签补全,这里就不做详述,请自行参考介绍。
NERDtree可以查看文件列表,要打开哪个文件,光标选中后回车即可在新buffer中打开。在.vimrc文件中添加如下配置:
Plugin 'scrooloose/nerdtree'
" set NERDTree
nmap <F9> :NERDTreeToggle<CR>
let NERDTreeShowBookmarks=1 " set NERDTree book marks default on
let NERDTreeIgnore=['\.py[cd]$', '\~$', '\.swo$', '\.swp$', '^\.git$', '^\hg$', '^\.svn$', '\.bzr$']
let NERDTreeWinSize=32 " set width
let NERDTreeWinPos="right" " set position
let NERDTreeShoeHidden=1 " show the hidden files
let NERDTreeMinimalUI=1 " the window tags not show help info
let NERDTreeAutoDeleteBuffer=1 " Automatically deletes files when deletes files buffer
更多请参考 所需及所获:像使用IDE一样使用vim 6.1节部分。
Vim中每打开一个文件Vim就对应创建一个buffer,多个文件就有多个buffer,但默认你只看得到最后buffer对应的
Window,通过插件MiniBufExplorer可以切换到不同的buffer及达到编辑多个文件的功能。在.vimrc文件中添加配置:
Plugin 'fholgado/minibufexpl.vim'
" set minibuffexploer
map <M-q> :bn<CR> " 切换多个buffer时的快捷键
map <M-w> :bp<CR>
" 这个设置,网上我查到两种说法,一个是在gvim下时防止出现多窗口,一种是自动打开。实际情况看,无论是0/1,在只有一个文件时都会显示nimib
let g:let g:miniBufExplorerMoreThanOne=1
buffer快捷切换时,只需要在当前编辑文件中normal下按快捷键切换(需要存在多个buffer),但是删除buffer时,需要将光标定位到buffer标签上。键
如d删除光标所在buffer。
更多请参考 所需及所获:像使用IDE一样使用vim 6.2节部分。
Plugin 'godlygeek/tabular' " 自动对齐
后续补充。可自行搜索。
Markdown就不多解释了,在Vim编辑过程中最大的需求就是实时预览,在这里介绍插件markdown-preview,能够实现在
浏览器中实时预览,默认是谷歌浏览器Chorme,自行下载。需要说明的是,这款插件在Github上比较多,比如
markdown-preview,不需要浏览器支持即可实时预览,供君选择。vim-markdown 是一个语法高亮插件,根据实际情况使用。
在.vimrc文件中添加配置:
Plugin 'plasticboy/vim-markdown'
Plugin 'iamcco/markdown-preview.vim'
" set markdown
let g:mkdp_auto_start=0 " set 1, the vim will auto open preview window once enter markdown buffer
let g:mkdp_auto_open=0 " set 1, the vim will auto open preciew window when you edit the markdown file
let g:mkdp_auto_close=1 " set 1, the vim will auto close current preview window when change from markdown buffer to another buf
let g:mkdp_refresh_slow=0 " set 1, the vim will just refresh markdown when save the buffer or leave frim insert mode,default 0 is
let g:mkdp_command_for_global=0 " set 1, the markdown preview command can be use for all files, by default it just can be use in markdo
let g:mkdp_path_to_chrome="google-chrome"
map <F6> <Plug>MarkdownPreview
map <F7> <Plug>StopMarkdownPreview
基本上都是默认配置,除了打开/关闭的快捷键映射。更多的话,可以自己到Github看作者介绍。
新建源文件时,一般都会添加一些文件信息在文件开始的位置处。常见比如文件名、作者、创建时间、文件简介等等,如果每
次都手动添加,就会很麻烦。所以可以通过添加脚本函数的方式,实现文件新建时自动添加。在这里贴上一个.vimrc文件的
配置,可以参考他的实现方式: https://github.com/taizilongxu/dotfiles/blob/master/vimrc 。文件中其他也可以参考。
注意一点,如果需要判断是否为*.h文件,请使用if expand("%:e")=='h'进行判断,当然不是只有*.h文件需要这样哈。
需要的话也是通过脚本函数实现。.vimrc文件中添加配置:
autocmd BufWritePre,FileWritePre *.c,*.h,*.sh,*.py ks|call LastChanged()|'s
func! LastChanged() " auto add last changed date
if line ("$") > 15
let l = 15
else
let l = line("$")
endif
exe "1,".l."g/Last Changed : /s/Last Changed : .*/Last Changed : ".strftime("%c")
endfunc
关于这一段的解释和详细介绍请参考: http://www.cnblogs.com/soli/archive/2009/10/21/885044.html 。
第一次的环境配置就先这样了,后续有其他好用插件,会再推荐。文中还有没写完整的,会尽快补充。
没有特别认真的写,比较水,希望不要介意,能够提供一丁点的帮助,我觉得也是好的。谢谢。
1、所需及所获:像使用IDE一样使用vim
2、.vimrc
3、.vimrc
4、.vimrc
5、vim配置技巧——在vim中使用autocmd命令在保存文件时自动插入最后修改日期和时间
6、Vim与Markdown共舞
7、NERD_commenter安装和使用

