作为一个工具控,平日里就喜欢配置一些好用的工具。俗话说,工欲善其事,必先利其器,而vim可以说就是这里面的尚方宝剑了。
话说我身边使用vim的人大致分为两种:第一类是由于特殊原因(比如在服务器)无法使用图形界面,所以被迫使用了这样的可以在命令汗工作的编辑工具;第二类是主动去学习这样一款“世界上最好的编辑器”,并真心觉得它很cool的人。我的这篇博客也是面对这样的人。
至于对vim的安利,我就不说了,网上搜索下来可以搜到一大把。我用我个人感受来描述它,就是:学会它,你会自愿抛弃所有其他的编辑器,你会变得更有效率,更cool!然而vim的使用效率是和你对它的配置能力成正比的,网上有很多分享vim配置的博客,但是对于大部分萌新来说,直接使用别人的配置文件确实上手很快,但是每个人的需求不同,不学会有效的自定义,怎么可能用好这一“神器”呢?这也成为我写这一片博客的目的了,不仅仅分享vim的配置,同时也会对配置进行一定的解析。当然,由于个人接触vim时间也不太长,所以对于高手来说,可能会觉得我写得比较菜,还望指正,共同学习
这篇博客主要是分享一些有用的vim插件,分享一些好的自定义配置。它适合的读者是已经对vim的一些基本操作比较熟悉,并渴望进一步玩转vim的人。
主要配置参考aixvim.
本文中的配置环境主要需要:
- vim8
- python支持
为什么需要vim8?因为快!vim8可以支持并发,有很多好用的并发的插件不能用岂不是很可惜。至于python支持,主要是为了一些需要python的插件,尤其是youcompleteme,有了它,可以告别IDE了!
终端运行
vim --version
观察是否有
VIM - Vi IMproved 8.0
在feature是否有
+python # 加号表示支持这种特性
对于mac,可以使用homebrew直接安装即可。
brew install vim
对于linux来说,使用apt-get安装时,默认情况下不会安装8.0,这里给出一个从源码编译的安装方式,可以方便定制。
安装依赖
sudo apt-get install libncurses5-dev libgnome2-dev libgnomeui-dev \
libgtk2.0-dev libatk1.0-dev libbonoboui2-dev \
libcairo2-dev libx11-dev libxpm-dev libxt-dev python-dev \
python3-dev ruby-dev lua5.1 lua5.1-dev libperl-dev git
安装编译vim
cd ~
git clone https://github.com/vim/vim.git
cd vim
./configure --with-features=huge \
--enable-multibyte \
--enable-rubyinterp=yes \
--enable-pythoninterp=yes \
--with-python-config-dir=/usr/lib/python2.7/config \
--enable-perlinterp=yes \
--enable-luainterp=yes \
--enable-gui=gtk2 \
--enable-cscope \
--prefix=/usr/local
注意到上面开启了很多特性,包括ruby,python,lua等,如果不需要,可以去掉上面的选项。另外对于—with-python-config-dir的选项,需要将后面的路径选择成为自己电脑对应的选项,比如/usr/lib64/python2.7/config-2.7m-x86_64-linux-gnu
.
另外,如果要使用python3,需要将上面的有关python的选项替换为
--enable-python3interp=yes \
--with-python3-config-dir=/usr/lib/python3.5/config \
编译
make && make install
按照这个流程,会将vim的命令安装在/usr/local/bin
的路径下,确认该路径在PATH环境变量下。
有时,我们会碰到没有sudo权限的情况,比如在服务器上,我们只需要将上面configure命令下的选项替换成
--prefix=$HOME
然后再编译,这时的vim命令会被安装到$HOME/bin
中,将其加入PATH路径即可。(如果使用zsh,可以将.bashrc替换成.zshrc)
echo 'export PATH="$HOME/bin:$PATH"' >> $HOME/.bashrc
source $HOME/.bashrc
- 终端中输入
curl -o install_vim.sh https://raw.githubusercontent.com/chendagui16/ConfigFile/master/install_vim.sh
sh install_vim.sh
- 进入vim,输入
:PlugInstall
该配置文件使用于linux, mac操作系统,并针对这两个系统做了相对应的键位映射,为了简便,所有的配置均在$HOME/.vimrc
的文件中.
以下是一些有用的通用设置,无关任何插件,自定义了一些快捷键,也打开了一些方便的功能。同时自定了一些有用的功能。
这里主要介绍一些比较特殊的功能,一些比较常见的设置见vimrc的注释。
set clipboard=unnamed
我们经常会需要将vim中的内容复制到系统剪贴板,或者将系统剪贴板中的文字粘贴到vim中,这个时候我们就需要在复制,粘贴或者剪切时使用一个特殊的前缀"*
或者"+
, 比如:
"*yy "*p "*dd
"+yy "+p "+dd
加入这个前缀就会使用系统的剪贴板。另外如果clipboard的选项中包含"unamed"的字符串,则就会默认使用系统的剪贴板,因此可以不用输入"*
或"+
。
let mapleader="\<Space>"
let g:mapleader="\<Space>"
默认的leader键为backslash
, 为了方便,我们把leader键改成了Space
。
对于vim的命令是可以按tab
键进行补全的,但是默认的补全确实不太方便。我们通过一些设置可以进行修改
set wildmenu
set wildmode=longest,full
set completeopt=menu,menuone,longest
set completeopt+=preview
可以获得补全效果如下,可以按<Tab>和<Shift>+<Tab>选择
我们经常会碰到这样的情况,我们需要编辑完文件后退出,然后发现改错了,需要回退。然而使用vim中的u
键回退,不能回退到过去的历史,因此我们设置如下配置
set undofile
set undodir=~/.vim/undo/
将所有的历史存储到了~/.vim/undo
的文件夹。并可以支持无限回溯。
有时候,我们会对tab
和空格进行区分,(比如在python里面,混合使用tab
和空格作为缩进是会导致运行报错的)。因此我们这里提供了一些特殊的方法区分,并转换。
高亮Tab
为了区分tab
和空格的显示,我们做了如下的设置
set list listchars=tab:-\ ,extends:>,precedes:<
显示的效果如下,tab
会以一个短横线显示:
Space2Tab, Tab2Space
同时为了也定义了一系列的函数可以转换Tab和Space:Space2Tab, Tab2Space。这两个函数可以支持命令补全,一键运行,可以将Space转换成Tab,也可以将Tab转换成Space。这两个命令不仅仅支持在normal模式下运行,同时也支持在visual模式下指定特殊的范围运行。
vim在不同窗口下切换的默认键位是Ctrl-w
+h(jkl)
,这里做了一些修改
nnoremap <leader>hh <C-w>h
nnoremap <leader>jj <C-w>j
nnoremap <leader>kk <C-w>k
nnoremap <leader>ll <C-w>l
inoremap <C-e> <End>
inoremap <C-f> <Home>
inoremap <C-d> <Esc>VypA
inoremap <C-w> <C-o>w
inoremap <C-b> <C-o>b
这里Ctrl+d
可以快速复制当前行,并粘贴到下一行,类似于很多其他编辑器一样。
" <leader>ss: Spell checking shortcuts
" fold enable settings
nnoremap <leader>ss :setlocal spell!<CR>
nnoremap <leader>sj ]szz
nnoremap <leader>sk [szz
nnoremap <leader>sa zg]szz
nnoremap <leader>sd 1z=
nnoremap <leader>sf z=
在normal模式下使用leader+ss
,可以开启或关闭拼写检查,leader+sj(k)
,可以将光标定位到下一个(上一个)拼写错误的位置,使用leader+sd
,表示自动纠正该错误,leader+sf
可以提供可能的纠正列表,并可以选择纠正项。
对于所有插件来说,最重要的也是最根本的插件就是管理插件了。老牌的管理插件包括vundle,和pathogen。而我这里要强烈推荐的是vim-plug. 它包括以下几大优点:
-
简单,易于安装,相比其他管理插件启动速度快。
-
支持github管理,要安装其他的插件只需要将该插件对应的github名字加入到vimrc即可。例如,你在github中发现了一个支持git的插件vim-git,然后要将这个插件加入管理只需要将其仓库名加入vimrc即可。例如:
" vimrc中双引号后表示注释,tpope/vim-git表示其github的仓库名 Plug 'tpope/vim-git'
-
支持外部管理,可任意指定文件夹进行管理,如:
call plug#begin('~/.vim/bundle') "将.vim/bundle指定为插件管理文件
-
杀手锏,支持并发。这一点是传统的管理插件所不具备的,所有的插件均可以在并发的安装或更新,也就是说你只需要拥有一个配置文件,在网路好的情况下,可以在几分钟内在任何一台机器上安装完你的所有插件。节约下的时间就是金钱啊!
在vim的命令行输入:PlugInstall (可用tab
补全),即可出现以下画面(以下gif来自官方github):
除了PlugInstall外,常用的命令还包括PlugUpdate和PlugClean,可以直接一键更新,clean掉vimrc中已经删除的插件条目。
主题的插件包括两个部分,第一个部分是颜色主题,由于我在linux,mac的终端上使用的色彩主题都是solarized的主题,为了保持习惯,这里我也使用了solarized的主题(个人推荐,看着很舒服)。这个主题包含两个配色方案,分别是dark和light。使用的方法是在vimrc中加入
call plug#begin('~/.vim/bundle')
... " 其他插件
Plug 'altercation/vim-colors-solarized' "添加插件
...
call plug#end()
... " 其他配置
colorscheme solarized "使用主题
set background=dark "选择配色
另外需要注意的是,在tmux中使用vim的时候,可能会出现主题颜色失真的情况,这个时候需要设置终端为256色
set term=screen-256color
或
set t_Co=256
在终端中使用vim的时候,如果直接使用solarized的主题,有可能会碰到终端的颜色和vim的颜色叠加的情况,导致显示变得很怪。为了解决这个问题,可以先将终端改成solarized的配色。方法如下:
cd
git clone git://github.com/seebi/dircolors-solarized.git
cp ~/dircolors-solarized/dircolors.256dark ~/.dircolors
eval ‘dircolors .dircolors’
echo 'export TERM=xterm-256color' >> $HOME/.bashrc
source $HOME/.bashrc
git clone https://github.com/coolwanglu/gnome-terminal-colors-solarized
cd gnome-terminal-colors-solarized
./set_dark.sh
主题所包含的另一个部分是airline,这个主要是提供一个彩色的状态栏,除了好看之外,也能提供不少信息,其中能包括vim模式,文件名,git分支,是否修改,编码方式,结合一些语法插件,甚至可以显示语法错误等。功能比较丰富,推荐使用。使用效果如下:
在我的配置中,使用airline如下
call plug#begin('~/.vim/bundle')
... " 其他插件
Plug 'vim-airline/vim-airline' "添加插件
Plug 'vim-airline/vim-airline-themes'
...
call plug#end()
... " 其他配置
colorscheme solarized "使用主题
set background=dark "选择配色
" AirLine Setting
let g:airline_powerline_fonts = 1
let g:airline_theme='serene'
let g:airline_left_sep=''
let g:airline_right_sep=''
这里的设置主要是因为我不太喜欢airline的箭头,所以把它取消了,效果如下:
airline使用了powerline的字体,其中包含了很多形象的符号字体,在使用airline时,如果终端中为包含该字体则需要安装:
git clone https://github.com/powerline/fonts.git --depth=1
cd fonts
./install.sh
cd ..
rm -rf fonts
然后需要在对应终端中选择powerline字体
文件搜索,常用的vim插件是ctrlp,ctrlp的使用方法非常简单,按下ctrl+p
即可调出搜索框。支持模糊匹配,可以搜索文件,MRU(Most Recently Used), vim-buffer, tags等。
不过我们这里推荐使用的一个插件叫fzf,用Go语言实现,利用了vim8的并发机制,可以实现几万文件秒搜。效率感人。而且,它不仅仅支持vim中的使用,也可以支持shell中火tmux中的命令搜索等功能。
在我的配置文件中,对于文件搜索的配置为:
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'ctrlpvim/ctrlp.vim'
...
set rtp+=~/.fzf
nnoremap z, :FZF --no-mouse .<CR>
这里将搜索的快捷键改成了z,
,不用同时按下,在vim的normal模式下,依次键入即可调出搜索框,尝试一下,你会亲身感受其速度的。
另外,在终端下,使用ctrl+r
可以搜索命令历史
一般来说,我们搜索文件时只会搜索文件名。但是经常的,我们会搜索文件内容。这时可以使用ag.vim 可以批量搜索代码,搜索文件,支持模糊匹配,正则表达式,完爆各种IDE的搜索工具。需要安装the_silver_searcher
Plug 'rking/ag.vim'
...
" Ag.vim Settings 官方推荐配置
let g:ackprg = "ag --nocolor --nogroup --column"
set grepprg=ag\ --nogroup\ --nocolor
command -nargs=+ -complete=file -bar Ag silent! grep! <args>|cwindow|redraw!
nnoremap \ :Ag<SPACE> " 搜索快捷键改成了\
如下是我在一个工程目录下搜索show_info的结果
这个窗口是可交互的,可以Enter
进入相应的文件
这里使用了常用的nerdtree , nerdtree-git-plugin
Plug 'scrooloose/nerdtree'
Plug 'Xuyuanp/nerdtree-git-plugin'
let g:NERDTreeRespectWildIgnore=1
let g:NERDTreeDirArrows=0
nnoremap <F2> :NERDTreeToggle<CR>
" =============================== Ignore setting =========================
set wildignore=*.o,*.obj,*~ "stuff to ignore when tab completing
set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux
set wildignore+=*DS_Store*
set wildignore+=vendor/rails/**
set wildignore+=vendor/cache/**
set wildignore+=*.gem
set wildignore+=log/**
set wildignore+=tmp/**
set wildignore+=*.png,*.jpg,*.gif
set wildignore+=*.so,*.swp,*.zip,*/.Trash/**,*.pdf,*.dmg,*/Library/**,*/.rbenv/**
set wildignore+=*/.nx/**,*.app,*.git,.git
这里进行的主要的设置快捷键设置,F2
可以打开或关闭nerdtree,同时设置了忽略文件加入buffer的管理。同时配合nerdtree-git-plugin插件,可以实现如下gif图显示的git相关操作
Plug 'yegappan/mru'
Plug 'danro/rename.vim'
nnoremap <leader>uh :MRU<CR>
leader
键在我的配置中改成了Space
这两个插件的使用很简单,输入快捷键leader+uh
(used history的简称),或在vim命令行输入:MRU,可以调出最近使用的文件名buffer,相当于IDE中的打开最近文件。
rename插件的使用方式即在vim命令行中输入
:rename {newname}
Plug 'tpope/vim-git'
Plug 'tpope/vim-fugitive'
Plug 'gregsexton/gitv'
Plug 'airblade/vim-gitgutter'
Plug 'mhinz/vim-signify'
这里的vim-git 服务于vim-fugitive ,而vim-fugitive可以说是最好用的有关git的vim插件了,它不仅仅提供了有关git的语法高亮,同时也提供了各种有关git的操作接口. 这个插件所包含的功能实在是难以简单的说明,观看其github中的screenshot可以了解其强大的功能
常用的命令有:
:Gedit :Gsplit :Gvsplit :Gtabedit
:Gstatus (在弹出的窗口使用-, p, C进行交互)
:Gcommit
:Gblame (在弹出的窗口中使用o, :Gedit进行交互)
:Ggrep
:Glog
:Gread :Gwrite
:Gdiff
:Gbrowse
:Gmove :Gdelete
...
gitv 是一个基于vim-fugitive的拓展,提供了一个命令:Gitv,这个拓展可以打开一个可以交互的git文件窗口,可以查看各种提交历史,diff等
vim-gitgutter和vim-signfy这两个插件提供了几乎一样的功能,但是vim-signify不仅仅支持git,还支持svn等.
同时修改配置
let g:gitgutter_sign_column_always = 0
let g:gitgutter_max_signs = 99999
支持的效果图如下
另外,这两个插件提供了]c
, [c
的命令,这两个命令在使用fugitive的Gdiff时,可以快速跳转到下一个(上一个)有diff的chrunk.
传统的vim语法检查使用的是syntastic,这个插件由于不是异步的,所以运行速度很慢,会很大程度上拖慢vim的运行速度。异步的语法检查插件推荐ale, 该插件只支持vim8,由于其运行是异步的,所以基本不会卡。
Plug 'w0rp/ale'
" Set Ale Cheacker
let g:ale_sign_error = 'o'
let g:ale_sign_warning = '*'
let g:ale_linters = {
\'python': ['flake8']
\}
ale不仅仅支持语法检查,还支持自动修正。而且支持大部分的语言,如C,C++,python,R,CUDA,Latex,Lua,Markdown,MATLAB,Java,Swift等,详情见github .
Plug 'tpope/vim-commentary'
一个快速对代码进行注释的插件,可以针对不同的文件进行不同的注释,而且在已经注释的情况下,运行相同的命令,可以uncomment. 常用的命令是
gcc " normal模式下,注释当前行(或清除注释)
{Visual} gc "Visual模式下,注释当前选中的范围(或清除当前范围的注释)
代码对齐是一个常见的需求, 一个好用的代码对齐的插件是vim-easy-align . 这个插件的使用效果如下:
Plug 'junegunn/vim-easy-align'
" EasyAlign
nmap ga <Plug>(EasyAlign)
xmap ga <Plug>(EasyAlign)
按照官方的推荐设置,我们使用ga
作为对齐的键位映射。
这个插件有两种使用方式,一种为交互式,一种是live交互式。同时该插件也可以通过命令的方式调用。我个人喜欢在visual模式下,键入ga
来启动交互式对齐,然后在交互式对齐中输入命令。常见的命令如下(其他使用方式参见该插件的help文档):
visual模式后进入交互式 | 功能 | 等效的命令行 |
---|---|---|
= | 在第一个等号周围对齐 | :'<,'>EasyAlign= |
2= | 在第二个等号周围对齐 | :'<,'>EasyAlign2= |
-= | 在最后一个等号周围对齐 | :'<,'>EasyAlign-= |
*= | 在所有等号周围对齐 | :'<,'>EasyAlign*= |
**= | 等号周围的内容自动调节 | :'<,'>EasyAlign**= |
<Enter> + 其他命令 | <Enter>可以切换对齐模式,包括做左对齐(默认),右对齐,中心对齐,可重复按下切换 | 右对齐:'<,'>EasyAlign!=中心对齐::'<,'>EasyAlign!!= |
<Right>+其他命令 | 对齐的分隔符右方的文字align到分隔符上,<left>则为左边的文字 | :'<,'>EasyAlign=<l1 |
<Down>+其他命令 | 对齐的分隔符与对齐的文字之间无间隔 |
该插件的功能远不止于此,还可以自定义对齐的方式,详情可在vim中输入:h vim-easy-align查看
Plug 'kh3phr3n/python-syntax'
Plug 'elzr/vim-json'
Plug 'plasticboy/vim-markdown'
Plug 'vim-latex/vim-latex'
我的配置文件里面还包含了有关不同语法的插件,这些插件针对不同的文件类型提供了不同的功能,有些只是为了语法高亮,有些则是为了提供快捷编辑,用户可以根据需求来选择添加或删除。
emmet-vim 是一个用来在html格式下补全的插件,一个官方的演示如下:
配置如下
Plug 'mattn/emmet-vim'
...
" Emmet Config
" change <Tab> config , if use [YouCompleteMe]
let g:user_emmet_expandabbr_key ='<Tab>'
let g:user_emmet_settings = {
\ 'php' : {
\ 'extends' : 'html',
\ 'filters' : 'c',
\ },
\ 'xml' : {
\ 'extends' : 'html',
\ },
\ 'haml' : {
\ 'extends' : 'html',
\ },
\ 'phtml' : {
\ 'extends' : 'html',
\ }
\}
imap <expr> <tab> emmet#expandAbbrIntelligent("\<tab>")
这里将补全的快捷键设置成了tab
键,当输入“aa/bb/cc”后键入tab
可以自动拓展为如下:
<aa></aa>
<bb></bb>
<cc></cc>
由于这里使用了tab
进行补全拓展,所以在youcompleteme中禁用了tab
YouCompleteMe 是一款基于语义的补全插件,其补全功能丝毫不逊色任何IDE,不仅仅可以补全,还可以进行定义,声明的跳转。
YouCompleteMe是一款需要编译的插件,如果使用vim8,并添加了python支持后,可以使用如下命令进行编译
cd ~/.vim/bundle/YouCompleteMe
python install.py --clang-completer
YouCompleteMe的配置相对比较复杂,如果按照上述命令编译出现问题,可以参考官方build文档
Plug 'Valloric/YouCompleteMe'
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable'}
...
"------------------ YouCompleteMe -------------------
" Linux vim && NeoVim Using YouCompleteMe
if(has("mac"))
let g:ycm_python_binary_path='/usr/local/bin/python'
else
let g:ycm_server_python_interpreter='/usr/bin/python'
endif
let g:ycm_auto_trigger = 1
let g:ycm_global_ycm_extra_conf = "~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py"
let g:ycm_collect_identifiers_from_tags_files = 0
let g:ycm_add_preview_to_completeopt = 5
let g:ycm_use_ultisnips_completer = 1
let g:ycm_cache_omnifunc = 1
let g:ycm_max_diagnostics_to_display = 0
let g:ycm_key_list_select_completion = ['<C-n>', '<C-j>']
let g:ycm_key_list_previous_completion = ['<C-p>', '<C-k>']
let g:ycm_filetype_blacklist = {
\ 'tagbar' : 1,
\ 'qf' : 1,
\ 'notes' : 1,
\ 'unite' : 1,
\ 'text' : 1,
\ 'vimwiki' : 1,
\ 'pandoc' : 1,
\ 'infolog' : 1,
\ 'mail' : 1,
\ 'mundo': 1,
\ 'fzf': 1,
\ 'ctrlp' : 1
\}
let g:ycm_error_symbol = '>>'
let g:ycm_warning_symbol = '>*'
nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
配置说明:
- 对于C-family的工程,使用YCM-Generator来生成补全的tag
- 针对不同的配置,可能需要自己手动指定python的位置
- 使用
Ctrl+n(p)
或Ctrl+j(k)
来选择补全(由于emmet中使用了tab
,所以这里禁用了tab
) - 对于黑名单中的文件,不进行补全
- 开启了来自ultisnips插件的补全,可以自动拓展成代码片段
- 使用快捷键可以跳转到定义,声明
Plug 'sirver/ultisnips'
Plug 'honza/vim-snippets'
...
let g:UltiSnipsExpandTrigger="<S-tab>"
使用ultisnips 和vim-snippets 来进行代码拓展,其中vim-snippets是代码拓展的引擎,ultisnips是一些可拓展的代码。两者结合,可以产生如下的效果
在这份配置里面使用Shift+tab
可以拓展。
Plug 'terryma/vim-smooth-scroll'
...
" Smooth Scroll the terminal
nnoremap <silent> <C-u> :call smooth_scroll#up(&scroll, 0, 2)<CR>
nnoremap <silent> <C-d> :call smooth_scroll#down(&scroll, 0, 2)<CR>
使用这个插件,可以按下Ctrl-u
, Ctrl-d
来平滑的翻页,类似于滚动的效果。
Plug 'terryma/vim-multiple-cursors'
...
" Multip Cursor
" Default mapping
let g:multi_cursor_next_key='<C-n>'
let g:multi_cursor_prev_key='<C-p>'
let g:multi_cursor_skip_key='<C-x>'
let g:multi_cursor_quit_key='<Esc>'
可以同时编辑多个地方,如下
Plug 'terryma/vim-expand-region'
...
map KK <Plug>(expand_region_expand)
map JJ <Plug>(expand_region_shrink)
在visualize的模式下,按KK
或JJ
可以拓展或收缩选中的区域
这里使用了两个轻量的插件,实现了使得复制时,所选择内容闪烁。
Plug 'kana/vim-operator-user'
Plug 'haya14busa/vim-operator-flashy'
...
map y <Plug>(operator-flashy)
nmap Y <Plug>(operator-flashy)$
这个属于增强vim的默认搜索的插件,使用起来跟默认的搜索一样,但是在显示上会比较友好。
Plug 'haya14busa/incsearch.vim'
...
" Vim incsearch
let g:vim_search_pulse_disable_auto_mappings = 1
let g:incsearch#auto_nohlsearch = 1
map / <Plug>(incsearch-forward)
map ? <Plug>(incsearch-backward)
map g/ <Plug>(incsearch-stay)
map n <Plug>(incsearch-nohl-n)zzzv
map N <Plug>(incsearch-nohl-N)zzzv
map * <Plug>(incsearch-nohl-*)zzzv
map # <Plug>(incsearch-nohl-#)zzzv
map g* <Plug>(incsearch-nohl-g*)zzzv
map g# <Plug>(incsearch-nohl-g#)zzzv
这里的配置是将incsearch的搜索替换默认的搜索。
一个快速编辑surround的插件
Plug 'tpope/vim-surround'
使用方法非常简单,参见其github。常用的命令,比如针对hello,我们想给其加双引号,只需要按下ysiw"
,即可编程“hello",然后在其上按下cs“)
,即可其替换成(hello)。
Plug 'tpope/vim-repeat'
我们经常会使用.
来重复上次的命令,然而,使用这个操作是不能重复Plugin map的操作,使用这个插件,即可完成这样的功能。