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
- options
encoding
: vim的内部(如:菜单、buffer、消息)使用的编码,最好该选项放在vimrc开头!fileencoding
: 当前编辑文件所使用的字符编码方式,写入文件时使用该编码保存fileencodings
:vim自动探测文编编码的列表,启动时会依次据此解析加载的文件.如果探测到了就将fileencoding更新.termencoding
: 只对console模式下的vim有效,指定vim所工作的终端的字符编码方式 - autocmd
VimEnter
: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 - variable
v
: 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-QFixWindowZQ
: 不保存而退出(当前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,backwardc-d
: 下半页down(cmdmode是激活自动补全,输入开头的字符+tab可自动补全);c-u
:上半页upc-]
: 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,
:Forthgi
: 快速定位到上次插入模式离开的地方,并进入插入模式!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’ –> helloysiw]
: 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
#!
class
def
..
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