https://github.com/vim/vim https://github.com/vim/vim-win32-installer/releases
https://github.com/akrawchyk/awesome-vim
https://github.com/SpaceVim/SpaceVim
https://github.com/mhinz/vim-galore
http://vimcolors.com/
colorscheme: http://vimdoc.sourceforge.net/htmldoc/syntax.html
cscope: https://sourceforge.net/projects/mslk/files/
install
- 默认安装路径/usr/local/bin/vim+vimtutor/usr/local/share/vim/
 注意:.vimrc必须放在家目录,放在/etc/vimrc不奏效(/etc/vimrc.local),或者放在/usr/local/share/vim/vimrc
- preconfigure
 http://vimdoc.sourceforge.net/htmldoc/usr_90.html#install
 python-devel(CentOS)/python-dev(Ubuntu) 依赖库
 ncurses-devel(CentOS)/ncurses-dev(Ubuntu) 依赖库
- configure-options
  --with-compiledby="zhanglei"
  --prefix=/usr/local  # 可执行文件安装的目录,还会创建bin子目录.
  --datarootdir=PREFIX/share  # 一些帮助及主目录文件;
  --with-features=huge
  --disable-gui --without-x --enable-multibyte
  --enable-pythoninterp=yes --enable-python3interp=yes
  --with-python3-config-dir=PATH  # python3必须指定该项.如:/usr/local/lib/python3.4/config-3.4m
  --enable-cscope --disable-tclinterp --disable-selinux --disable-xsmp --disable-netbeans --enable-xim=no
  --enable-fail-if-missing  # 如果某些选项打不开就出错提示.
  --with-local-dir=/stranger  # 编译时额外的在/stranger/下搜索inclued+lib目录
- winodws源码安装- https://github.com/vim/vim
- 配置文件在vim74/src/Make_ming.mak!
- 注意:Python2.7.10最后在链接libpython27.a时有bug,应换成Python2.7.9;DYNAMIC_PYTHON=yes,为no时链接libpython27.a可能不兼容!
- mingw32-make -f Make_ming.mak
 
start-options
# -p --remote-silent :在新标签中打开文件,注意:不要使用--remote-tab-silent!
# -b :以2进制模式编辑文件.  -c :在读入任何源文件前,执行命令.
# -R :以只读模式编辑文件.  -o [num] :启动vim时打开num个窗口.默认为每一个文件打开一个窗口.
# -r [file] :未指定file时,列出可恢复的文件(异常终止文件的编辑).
vim +9 filename  # 打开文件并定位到第9行,也可以使用搜索.
vimrc
http://vimdoc.sourceforge.net/htmldoc/options.html
http://vimdoc.sourceforge.net/htmldoc/options.html#%27runtimepath%27
https://www.ibm.com/developerworks/library/l-vim-script-1/index.html
注意: 使用set设置变量时,等号两边不要使用空格!
注意: 使用这些变量都要用这种形式: expand('$HOME/.vim'.var).
要么就不要单独使用引号:'$HOME'表转化为纯字符串!
- $HOME:- %userprofile%\
- $VIM:- d:\usr\Vim\
- $VIMRUNTIME:- d:\usr\Vim\vim80\
- $MYVIMRC:- d:\usr\Vim\.vimrc
- set option?:选项当前值- &:项设为默认值- !:转换选项- no:关闭选项- set all:列出所有选项
- set wrap:自动换行,- nowrap.
- set fenc:或- fileencoding,查看当前文件编码;
- set ff=unix:转换文件格式- DOS为- UNIX.- nobomb:去掉- BOM!
rgb.txt
这个文件是必须的,且必须放在$VIMRUNTIME中.color时会用到.
let do_syntax_sel_menu=1
必须在GUI模式才可用!默认是关闭的!开启后会严重拖慢启动速度!
会在[Syntax]菜单栏的第1个item显示所有支持的文件类型,以便手动识别某些未带扩展名的文件!
此选项需要 synmenu.vim + makemenu.vim 2个文件,只有gvim下有提供.
vim-bugs
- hilight-txt
 注意: 此句会导致’自动定位到上次打开的位置’失效!autocmd BufRead,BufNewFile * setfiletype txt
- encoding
 注意: 此句必须放在vimrc的接近开头位置,不然后面的某些映射(如’a-space’)很可能异常!set encoding=utf-8
vimscript
http://vimdoc.sourceforge.net/htmldoc/usr_41.html
http://vimdoc.sourceforge.net/htmldoc/autocmd.html
- optionsencoding: vim的内部(如:菜单、buffer、消息)使用的编码,最好该选项放在vimrc开头!fileencoding: 当前编辑文件所使用的字符编码方式,写入文件时使用该编码保存fileencodings:vim自动探测文编编码的列表,启动时会依次据此解析加载的文件.如果探测到了就将fileencoding更新.termencoding: 只对console模式下的vim有效,指定vim所工作的终端的字符编码方式
- autocmdVimEnter:after doing all the startup stuffVimLeave:before leaving vim, after(VimLeavePre:before) writing the viminfo fileGUIEnter:after starting the GUI successfullyCursorHold:the user doesn’t press a key for a while(CursorHoldI:in insert mode)CursorMoved:the cursor was moved in Normal mode(CursorMovedI)InsertEnter:starting insert mode;InsertLeave:when leaving insert modeColorScheme:after loading a color schemeBufNew:just after creating a new bufferBufEnter:after entering a bufferBufLeave:before leave to another bufferBufWinEnter:when a buffer is displayed in a windowBufWinLeave:before a buffer is removed from a windowBufNewFile:starting to edit a file that doesn’t existBufReadPre:starting to edit a new buffer, before reading the fileBufRead:starting to edit a new buffer, after reading the fileBufReadPost:starting to edit a new buffer, after reading the fileBufWrite:starting to write the whole buffer to a fileBufWritePre:starting to write the whole buffer to a fileBufWritePost:after writing the whole buffer to a fileFileWritePre:starting to write part of buffer to a fileFileWritePost:after writing part of buffer to a file
- variablev: vim-variableg: global-variablel: local-variables: script-variablet: tabpage-variablew: window-variableb: buffer-variablea: function-argument
function
没有作用域限制的函数,必须以大写字母开头!
function! ToggleComment()
  let pos=getpos(".")
  let win=winsaveview()
  # 正则匹配,忽略大小写.注意:必须使用单引号.双引号还得转移写2次\\
  if getline(".") =~? '\s*\/\/'
     normal! ^2x
     let pos[2]-=1
  else
     normal! ^i//
     let pos[2]+=3
  endif
  call winrestview(win)
  call setpos(".",pos)
  startinsert
endfunction
function! LeaveInsertMode()
  if col('.') > 1
     return "\<Right>"
  endif
  return ""
endfunction
inoremap <silent> ,, <c-r>=LeaveInsertMode()^M^[
map
http://vimdoc.sourceforge.net/htmldoc/map.html
http://vim.wikia.com/wiki/Mapping_keys_in_Vim_-_Tutorial_(Part_2)
ENTER ESC BACKSPACE DELETE 因为在ex中早有预定义,故要想将这些键作为命令的一部分,
应该配合C-V作为前缀符.在命令映射中,C-V被显示成 ^ 字符,这与普通的^字符不同!
^[ ESC:按住c-v 都松开后 + esc
^M 换行:按住c-v 都松开后 + enter
^H 退格:按住c-v 都松开后 + Backspace
:map: nmap + vmap; map a b; map c a; <==> map c b;
:noremap: 不递归
:nmap: 只在normal模式生效; nnoremap
:vmap: 在visual+select模式生效; vnoremap
:xmap: 只在visual-mode生效
:smap: 只在select-mode生效
:imap: insert模式有效; inoremap
:cmap: command模式有效; cnoremap
:omap: operater模式,即类似于d’‘这些组合命令.
:unmap: 删除指定映射; nunmap vunmap iunmap cunmap
:mapclean: 删除map的所有映射; nmapclear vmapclear imapclear cmapclear
CtrlKey
<k0>-<k9> 小键盘0到9;
<F5>: 键盘F5键,…
<S-...> Shift + 大小写无所谓,下同
<C-...> Control +
<A-...> Alt + 如 <a+>>:Alt + Shift + .
<M-...> Alt +
<C-A-a> Ctrl + Alt + a
options
<silent> 执行键绑定时不在命令行上回显
<unique> 如果该映射或者缩写已经存在则该命令会失败.
<leader> 自定义命令起始符,默认是 \
demos
let mapleader = ","
map [options] CtrlKey :silent! Fun^M
shortcut-multiwindow
水平或垂直平分窗口,可平分n等份. 前面加上一个v变为垂直平分
Terminal状态下alt键很难识别,需换成Ctrl.
:hid: 隐藏当前窗口,除非是他是当前唯一可见的
:on: 使当前窗口为唯一可见的窗口
:sp file: 等价于:new file; 增加一个水平窗口(下方)打开文件file; :vsp :vsplit
:vnew file: 增1个垂直平分窗口,打开文件file
:resize +n: 向下(正向环)增加当前窗口尺寸n行, -n
c-w-s: :sp上开一个新窗口(n:空的文件) 垂直:vsp
c-w-q: 关闭当前窗口,缓冲区仍在(:close/:quit),c-w-c(放弃改变) o:关闭所有其他窗口
c-w-j: 向下选择窗口,k,h,l.为配合tmux切换pane(c-l/h)就不做其他映射了
c-w-t: 最左上方的窗口 b:最右下角 p:最后一个访问(previous)
c-w-w: 所有的窗口间循环移动,W:反向;可添加A-k/j或<leader>k/j. C-j/k留给tmux.
c-w-r: 向下轮转窗口(rollup) R:上
c-w-x: 与下方向窗口交换位置,与下方的第三个窗口交换位置:3c-w-x
c-w--: 减少当前窗口(水平)尺寸1行,减少的尺寸分给它的下邻居; +:增加当前窗口尺寸1行,增加的尺寸取自它的下邻居.
c-w-<: 减少当前窗口(垂直)尺寸1列,减少的尺寸分给它的右下邻居; >:增加
c-w-=: 均分所有窗口
shortcut-insert-mode
数字一般表示重复次数如循环开启9行,输入内容:9o<input>ESC
图形界面下可以添加这些导航键: A-jkhl
为了方便可添加映射:
  ,,(quit insert-mode) ,s(保存+重载vimrc) ,c(ab命令,插入注释/**/) ,j(复制当前行)
  ,h(cut to begin) ,l(cut to end) ,u(undo,或添加映射:C+u) ,r(Return,R:上回车)
c-[: 退出到normal模式,光标定位到前面(最好加一个映射:’,,’),==esc.
c-c: 退出到normal模式,光标定位到前面,==esc.
c-o: 临时退出插入模式,光标定位到后面,操作完成后还会自动返回插入模式!!
c-a: Ahead e:End b:Left f:Right h:Backspace w:Backspace-a-word
c-p: previous cmd-line history n:next cmd-line history
c-y: 复制上一行同列的字符到本行来 e:复制下一行同列的字符到本行来
c-t: 当前行向右缩进 c-i:insert-TAB
c-k: 插入组合字符,如:除号’
register
reg: 显示所有寄存器的内容. :reg a显示寄存器a的内容.
a-z: 26个命名寄存器,可存放 y d x s c 大写字母表示追加到该寄存器.
1-9: 最后1个yank存放在寄存器0,以此类推..该寄存器独立,不与上面的冲突.
c-r: 准备粘贴寄存器内容..
- +: 系统寄存器.
- *: 系统寄存器,但缩进会出问题.
- ": 匿名寄存器,也是默认寄存器
- 0: 上次yank的内容,上上次是1,最多到9!
- %: 当前的文件名 . :上次插入的文本
- :: 上次的ex命令 / :上次搜索的pattern
- =: 表达式的结果 _ :类似于/dev/null.
- w: 如在搜索模式下:- 可以补全当前光标下单词! 
- "ayiw: 复制当前单词到寄存器a
- "2p: 粘贴寄存器2的内容,利用重复命令.可以自动增加序号.配合u撤销便可找到具体!
- "f4yy: 将当前行及后续3行文本复制到寄存器f中
macro
宏默认是顺序执行的,也就是遇到1个失败,后面全部失败,并退出.
想针对每行执行宏(出错时并不退出)应该使用 :'<,'>normal @a
- qb: 将vim命令(- q!,- ZZ等肯定记录不上)存到寄存器b中.再次输入- q以便退出.
- qB: 追加命令到宏B.
- @b: 执行寄存器b中的宏命,前面可以加次数.
- @@: 执行最近一次录制的宏,此处是- @b.
shortcut-common-mode
注意: 当映射 Alt+space 键为系统键的时候一定要把coding等设置放在前头!
注意: dd yy cc >>: 这些重复的命令一般表示作用于当前行.
- F2: toggle菜单- F4:- toggleNerdTree,- a-1.- F5:toggle-tagbar,- a-2.
- F8:- NextColorTheme,- shift+F8;- F11:maxmize window;- a-4:toggle-QFixWindow
- ZQ: 不保存而退出(当前buffer)- :q!
- ZZ: 保存改变而离开(当前buffer)- :x
- :e!: 放弃修改重新载入文件
- :wa: write所有改变的文件,或者- :wall.
- :xa: save所有改变的文件并exit.- :qa!:忽略所有改变并退出!
- .: 重复上一次操作对缓冲区的修改
- u: 撤销上一次编辑对缓冲区的修改- U:撤销对当前行的所有编辑动作
- c-r: 恢复上一次的操作,包括使用u被撤销的.- c-l:重绘屏幕
- c-g: 显示当前的文件与行编号
- c-f: PgDn,forward;- c-b:PgUp,backward
- c-d: 下半页down(cmdmode是激活自动补全,输入开头的字符+tab可自动补全);- c-u:上半页up
- c-]: tags进入定义(结果会少很多);- c-t:返回到声明(- c-o更常用!);- g]:- cstag进入定义,结果可能会很多
- c-o: Back(- hjkl这些不算,可跨文件,只针对当前活动的窗口);- c-i:Forth.
- c-y: 下翻,看上面的- . - c-e:上翻,注意:终端无法区别- shift+space与- space!
- c-s: suspend(vim)- c-q:quit-suspend(vim)
- i: 光标之前添加 I:行首添加 a:光标后添加 A:行尾添加 o:下一行添加 O:上一行添加 J:合并当前行与下1行
- r: 准备替换光标所在处的单个字符,自动退出; R:进入替换模式,需要自己退出. gr:视tab为实际的空格数.
- s: 删除当前字符,进入插入模式. S:删除整行,进入插入模式
- C: 删除光标所在处字符到行尾进入插入模式,或c$. cc:删除整行,进入插入模式 ct):删除光标所在处字符到下一个’)‘符之前
- D: 删除到行尾,或者d$ dd:删除当前行,ndd删除当前行到下方n行 dG:删除当前行后所有 :m,nd:删除第m-n行 ddp:交换当前行与下1行
- Y: 复制光标所在的行 :m,ny 复制第m-n行
- p: 粘贴到下1行或光标后 P:上1行或光标前 put:始终粘贴到下一行 gp:粘贴后光标位于新文本的开头!
- ~: 大小写转换 g~~(当前行全部大小写翻转)
- gu: 小写,如gue(到词尾) guu:当前行全部小写 gU:大写 g~:大小写
- <<: 减小缩进 »:增加缩进 =:自动缩进
- C-a: add递增1.如果以0开头默认为八进制.可以’set nrformats=‘来强制都为十进制!
- C-x: sub递减1,如果想指定大小请如下格式:‘10- ’,即在原来的数字上递减10! 光标无需在数字上,能自动寻找当前行的第1个数字.增强:https://github.com/tpope/vim-speeddating 
- /old/+m: 向后搜索old,转到old后的第m行.默认从当前位置的下一个位置开始搜索.
- /old/e: 向后搜索old,将光标定位到搜索到的目标的结尾,即old结尾.
- 0: 行首,$:行尾,^:当前行的第1个非空字符- :下移1行第1个非空字符,或+ -:上移1行,到第1个非空字符 
- *: 向后(- #向前)搜索光标所在处的词并定位下一个单词(不区分大小写)- g*:部分匹配 选区搜索: https://github.com/nelstrom/vim-visual-star-search
- '': 最近位置的行首(上下左右移动的不算)!- 'x:跳转到书签x所在行的第1个字符
- `- `: 最近位置(最好与’互换)- `.:最近改变位置的行首- `^:最近插入位置- `<:最后选择范围的起始- `x:书签x所在处(- mx:设置书签- a-zA-Z)
- g;: Back到最近改变的地方,可递归,等价于- `.- g,:Forth
- gi: 快速定位到上次插入模式离开的地方,并进入插入模式!
- gj: 在display-line间移动.默认不加g是real-line.加上g前缀的都表示display-line,其他组合类比.
- gg: 文首,- G:文尾- nG:移至第n行,或- :n; n|:移至第n列
- gd: 跳转到定义/高亮匹配所有光标下的单词
- gD: 跳转到局部变量的定义处,gVim可能不管用
- gJ: 不会在合并的行中间添加空格分隔符
- ga: 显示当前光标下字符的ASCII码以及8进制16进制数值
- %: 配对的圆括号+花括号+方括号;配合- matchit插件可以实现html-tag标签的跳转!
- (: (sentence)当前或上一个段落或空行的开头.
- }: (paragraph)下一个空行的开头.
- [[: (section)上一个- {的地方!
- w: 下一个词或标点之首,可含空格;- W:同w但不包括标点、括号等!
- b: begin,前一个或当前词的词首;- B:同上但不包括标点等
- e: end,当前词或标点之尾,已在尾部或其右边的,就定位到下个尾部,可含空格;- E:同e上但不包括标点;- ge:反方向
- fx: 移动光标到下一个出现字符x的地方,- ;分号继续向下,- ,逗号表反向查找.只在当前行!
- Fx: 移动光标到前一个出现字符x的地方, 分号- ;继续向前(只在当前行)
- tx: 移动光标到下一个出现字符x之前的地方
- ]s: jump to the next spelling error- [s- z=(SuggestCorrections)
- H: 屏幕左上角(High),- nH:屏幕最顶往下第n行;
- M: 光标移到屏幕中央,- nL:屏幕底端往上第n行(Low);
- zz: 将光标移动到屏幕中心(或- z.)- z<Enter>:定位光标所在的行到屏幕顶端;- z-:将光标移动的到屏幕最后一行;
- zR: 打开所有折叠.- za zj zk
- zM: 全部折叠.
列编辑,可使用jkhl…
- v: 以字符为单位选择!- V:行选择,终端下可能没有!- c-v:列块选择模式
- I: 列首插入,在选择块的前端插入;写完退出时生效;- A:列尾插入- J:连接所选行
- s: 删除+替换,或者- c.- r:每个被选择的字符都替换成输入的那个字符.- d:删除,或者- x.
- o: 交换始终位置!即固定活动端,使起始点变为活动端.
- gv: 再次选中上次选择的范围!
- 选择1个对象- a: 包含单词右侧的空格或括号本身或段落下方的空行!如果当前就处于空行则自动被纳入到下1个object! 如果右侧(或下方)没有了空行,则会纳入左侧(或上方)的空格(或空行)!
- i: 表示inner,表示- a的反面,若不想包含上面的情况请使用i!
- ciw: 删除光标下的单词,并进入插入模式!
- griw: 替换当前单词但不覆盖原有寄存器的值(常用!可配合.重复替换),注意:依赖于ReplaceWithRegister插件(go replace).
- vi(: 选中括号内的所有字符,不包括括号本身,也可以写作- vib,- B表大括号.类比: {} [] <> " ’ `
- vat: 选中一个tag(xml中),包括标签本身.
- vap: 选择1个paragraph(空行结尾),包含下方的空行(若下方无空行,则视图包含上方的);
- vas: 选择1个sentence,可类比- p,但除了光标本身就位于空行的情形外,该操作始终不包含空行!
- gUit: 将tag中的内容全部大写,注意这样写可完美配合dot-cmd,使用先进入viusal模式的手法会出现瑕疵!
 
- Surround- cs"<q>: “hello” –>- hello 
- cst':- <q>hello</q>–> ‘hello’
- ds': ‘hello’ –> hello
- ysiw]: hello –> [hello]
 左方括号是两边加空格; 有空格:’([{’ 无空格:’)]}’
- cs[{: [hello] –> { hello }
- yss): { hello } –> ({ hello })
 s:sentence表当前整行!
- ds{ds(: ({ hello }) –> hello
 
shortcut-buffer
%:h<TAB>: 当前文件路径
:jumps: 列出当前所有的jumps,
:changes: 列出当前buffer的所有改变行.使用g;(Back)或g,跳转!
:sav f: 把当前文件存为f并打开它
:badd f: 把file添加到buf列表
:bd: 删除当前文件所占用的buf(先unload).可自定义a-q或
:bun: 使当前buf所在窗口不展示或:bunload
:ls: 当前的buf列表.或:buffers 或:files.
:bn: 下一个buf/窗口.bnext.可增加定义a-l和
:bp: 上一个一个buf/窗口.可自定义a-h和
:bf: 跳转到第1个buf:bfirst. :bl:跳转到最后一个buf:blast
:sb3: 水平平分当前窗口,打开并跳转到第3个buf. sbnext sbn sbp sbf sbl..
:b3: 跳转到第3个buf,包括前两者,数字前面可以有空格
:b m: 跳到第一个以m开头的文件所在的buf
shortcut-tab
:tabnew f: 新建1个标签(c-w-t),编辑文件f,或 tabedit tabe
:tabclose: 关闭当前标签,或 tabc,可自定义c-c、,tc;
:tabonly: 关闭其他所有标签,或 tabo
:tabnext: 下一个标签,或c-PgDn、tabn、gt
:tabp: 上一个标签,或c-PgUp、tabprevious、tabNext、tabN、gT
:tabfirst: 第一个标签,或tabrewind tabr
:tablast: 最后一个标签,或tabl
:tabmove: 移动标签,或tabm [N]:移动到第N个标签之后,0:第一个.不写参数:最后一个
ex
大部分同sed程序,可参见’script/shell+regex’.
:%S/facilit{y,ies}/building{,s}/g
表将全部的facility替换为building,全部的facilities替换为buildings!
\m 除了 $^.* 之外,元字符都要转义如 '\(\) \{\} \<\>' (尖括号表\b).
\M 除了$^之外,元字符都要转义.相当于 set nomagic
\v 表正则表达式的元字符无需转义,这几个符号仍需转义: / \
\V 表所有符号都符号化,但这几个除外: / \ ?
- flags- c: 要求确认. q:quit l:替换最后1个匹配然后退出 a:替换余下的所有匹配
- g: 替换当前行中每个匹配
- e: 忽略错误(No match..),
- i: 忽略大小写. I:大小写敏感.
- n: 只打印行号,不执行替换,会遮掩c选项.
- #: 打印包含模式的行+行号. p:只打印包含模式的行.
 
- syntax- :\v[range]s/{pattern}/{string}/[flags]搜索行中pattern表示的字符!
- :\v[range]g|v/{pattern}/{cmd1|cmd2|..}range中搜索具有pattern的行,- g!等价于- v表不具有pattern的!在这些行上执行cmd.
 
- range- .: 当前行;- $:最后1行- %:当前文件,即每1行
- +: 相对于当前行(光标所在行)之后多少行,无数字表示1行;如- -,+表上下方各1行共3行
- ;: 分号前的数字会被当成当前行,如:- 100;+5表示100-105行
- '<,'>normal [cmd]: 表示在高亮选区执行命令.
 
- pattern- %&&: 等价于- g&,最后一个- &是上次的flag.表示全文执行上次的ex.
- \zs \ze: 用来截取搜索pattern.比如像要查找引号字符串但只想匹配引号内的:- "\zs[^"]+\ze"
- %(regex): 表示该子项不参与- \1,- \2…等的分配(默认是从左到右分配,而不是从里向外,有点不合理).
 
- string- ~: 上一次调用:- s时的string!
- \0: 整个匹配的结果或者- &.
- \1: 引用子正则表达式1,从左到右而不是从里向外;
- \u: 使后1个字符大写,小写- \l;
- \U: 使后面的所有字母大写,直到出现\e(或\E)为止,小写\L.
- \r: insert a carriage return; \t….
- \={Script}: 将返回的结果作为string.
 
demos
:@ 上次执行的Ex命令:!! 重复上个系统命令:= 文件总行数或打印行号:3p 显示第3行
:3,18d 删除3-18行:.,+4m6 当前行及其之后的4行移动到第6行之后:2;6t9 将2-8行copy-to第9行之后
:shell 开启一个shell-session,使用exit退出shell会话!
:normal {cmd} 执行normal-mode的命令.在对每行执行命令前,vim会把光标定位到行首.
:[range]!{cmd} 指定的范围作为输入传递给cmd执行+将输出替换到那个范围!排序去重文件: :%!sort -u
:[range]write !{cmd} 将指定的范围作为输入传递给cmd执行!如追加到: :w >>./doc/file
:[where]read !{cmd} 将命令执行的结果读到指定位置的下1行(不指定表当前光标).若直接r1个文件表读取文件.
Plugins
https://github.com/VundleVim/Vundle.vim
https://github.com/morhetz/gruvbox
https://github.com/scrooloose/nerdtree
https://github.com/scrooloose/nerdcommenter
https://github.com/vim-airline/vim-airline
https://github.com/vim-airline/vim-airline-themes
https://github.com/romainl/vim-qf
https://github.com/majutsushi/tagbar
https://github.com/mhinz/vim-startify
https://github.com/qpkorr/vim-bufkill
https://github.com/godlygeek/tabular
https://github.com/Stormherz/tablify
https://github.com/ervandew/supertab
https://github.com/SirVer/ultisnips 注意,必须依赖下面的vim-snippets!
https://github.com/honza/vim-snippets
https://github.com/plasticboy/vim-markdown
https://github.com/travisjeffery/vim-auto-mkdir
https://github.com/ntpeters/vim-better-whitespace
,tw :trim-whitespace 删除代码中多余的空格
https://github.com/octol/vim-cpp-enhanced-highlight
https://github.com/tpope/vim-surround
https://github.com/tpope/vim-repeat
https://github.com/tpope/vim-speeddating
https://github.com/tpope/vim-fugitive
https://github.com/airblade/vim-gitgutter
https://github.com/Xuyuanp/nerdtree-git-plugin
https://github.com/vim-scripts/a.vim
https://github.com/vim-scripts/txt.vim
https://github.com/vim-scripts/nginx.vim
https://github.com/vim-scripts/VisIncr
https://github.com/vim-scripts/AutoComplPop
https://github.com/vim-scripts/OmniCppComplete
https://github.com/vim-scripts/DoxygenToolkit.vim
https://github.com/jiangmiao/auto-pairs
https://github.com/AndrewRadev/linediff.vim
https://github.com/mbbill/undotree
https://github.com/kien/ctrlp.vim
https://github.com/mattn/emmet-vim
https://github.com/gko/vim-coloresque
https://github.com/ryanoasis/vim-devicons
https://github.com/xolox/vim-misc
https://github.com/garbas/vim-snipmate
https://github.com/tomtom/tlib_vim
https://github.com/MarcWeber/vim-addon-mw-utils
airline不显示分支
let g:airline#extensions#branch#enabled=1
NERDTree
syntax\nerdtree.vim 中 hi def link NERDTreeExecFile Title –> List
nerdtree与tagbar都可以配合/搜索定位.
,nt: ToggleNERDTree,或自定义为: a-1
cd: pwd设为当前标签路径
D: 删除当前书签!
B: 显示或隐藏书签栏!
:Bookmark: 添加书签
定位
u: 使当前根节点向上一层,cd..;
C: 使当前目录或当前文件所在的目录为根目录!
p: 定位到当前节点的父节点. P:定位到当前节点的根节点
K: 定位到当前节点的第一个兄弟节点. c-K:当前节点的上一个兄弟节点!
J: 定位到当前节点的最后一个兄弟节点. c-J:当前节点的下一个兄弟节点!
打开或关闭(x)文件夹或在新的标签中打开文件
o/enter
O:递归打开文件夹!
go :在当前标签且后台打开文件!
i:上开窗口打开当前文件== :sp gi
s:左开窗口打开当前文件. gs
其他
q: quit
A: maxmize
r: 递归refresh当前节点
I: 是否显示隐藏文件
f: 是否应用过滤
F: 是否显示文件
tagbar
需要ctags产生的tags文件
,tb: ToggleTagbar
,dt: 需添加该映射,DoTags!
Spa: 显示函数原型,或鼠标悬停
Ent: 进入定义处,或双击
p: 定位到定义处,光标还是停留在tagbar
c-p: 上一个顶层tag,c-n
+-: 或 zc/zo 或鼠标点击 +-:Unfold/Fold o 或 za:toggle =*:关闭或打开所有的tag;
s: 改变排序的方式
x: toggle maxmize
q: quit
UltiSnips
该插件比较恼人(严重依赖Python),可使用vim-snipmate代替:
Plugin 'MarcWeber/vim-addon-mw-utils'
Plugin 'tomtom/tlib_vim'
Plugin 'garbas/vim-snipmate'
Plugin 'vim-snippets'  
ctags/UltiSnips.cnf: 该文件是用来支持TagBar的,不能删!
ii: active自动补全
激活自动补全的关键字
- C/C++main for fori wh do if el eli ife..printf fprintf fun td(typedef)..cl(class) map(std::map) vector tp(template)
- python#!classdef..
DoxgenTookit & NERD_Comment
,cf: 添加函数注释,需自定义
,ca: 添加文件注释,需自定义.author
,cc ,cs ,c<SPACE>
ctrlp
tab: autocomplete; s-tab:toggle focus between match/prompt window
F5: refresh the math window
F7: wipe the MRU list. del marked entries
c-p: 进入速查窗口,一下命令均指示在该窗口
c-f: forward. c-b :backward
c-n: next string in the prompt’s history
c-p: prev string in the prompt’s history
<CR: open in current window.
c-t: open in new tab
c-c: exit. ESC
c-j: down c-h:left c-k :up. c-l:right
c-u: clear the input field. c-w c-a c-e
c-r: toggle regex/string mode
c-d: toggle fullpath/filename
Tabular
:Tabularize /<要对齐的符号>
,a=: align according to =
,a:: …
Tablify
首先得选中.默认的分隔符是 | ,可以自己指定.
元素中的\n用于给当前元素换行,该行会加宽!
,tl: 或者,tt;转变为table,左对齐
,tr: 右对齐
,tc: 中间对齐
,tu: unformat table
,ta: select all table
,tS: sort format table
当光标在表格中时
,tK: move current row up
,tJ: move current row down
,tL: move current column right
,tH: move current column left
Visincr
首先得选中某一列,默认使用第一行的数组作为starter.
I: 表示靠左对齐,右补空格(padding). II:则相反.
zfill: 表示用什么填充(padding)默认是空格,zfill通常指定0.
:I[I] [# [zfill]]: #表递增的step,默认值1,可以是负值以便递减.
:IYMD [# [zfill]]: year/month/day,类比IMDY,IDMY
:IA(字母) :IM(月份) :ID(星期:Sunday..) :IPOW(指数,默认2)
:IB(二进制) :IO(八进制) :IX(16进制) :IR(ROME)
colorscheme-switcher
xolox的colorscheme-swither貌似有问题
默认切换后恐有bug,修改如下;但切换时丢失问题依旧:
inoremap <silent> <F8> <C-O>:PrevColorScheme<CR><C-O>:syntax on
nnoremap <silent> <F8> :PrevColorScheme<CR> <bar> :syntax on
,nc: NextColorScheme



