Vim使用有一段时间了,现整理和总结一下其中的一些使用心得,本文中使用的vim配制文件来源于https://github.com/easwy/share/tree/master/vim/vimrc/其中做了一些修改如下: |
|
增加了c.vim插件 |
安装c.vim插件后,发现用Ctrl+j键进行窗口跳转出现问题,问题出现在.vim\ftplugin\c.vim中最后几行 将下面的语名 if !exists("g:C_Ctrl_j") || ( exists("g:C_Ctrl_j") && g:C_Ctrl_j != 'off' ) nmap <buffer> <silent> <C-j> i<C-R>=C_JumpCtrlJ()<CR> imap <buffer> <silent> <C-j> <C-R>=C_JumpCtrlJ()<CR> endif 修改下如下: if !exists("g:C_Ctrl_j") || ( exists("g:C_Ctrl_j") && g:C_Ctrl_j != 'off' ) nmap <buffer> <silent> <C-o> i<C-R>=C_JumpCtrlJ()<CR> imap <buffer> <silent> <C-o> <C-R>=C_JumpCtrlJ()<CR> endif " |
增加了辅助vim使用global的gtags.vim插件(global是用来产生tags文件)global的使用说明参见http://www.gnu.org/software/global/globaldoc_toc.html |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Cheney modifyed V0.1 " Gtags configuration nmap <C-\>j :Gtags <C-R>=expand("<cword>")<CR><CR> nmap <C-\>k :Gtags -r <C-R>=expand("<cword>")<CR><CR> nmap <C-\>l :Gtags -s <C-R>=expand("<cword>")<CR><CR> """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |
设置标签,按键映射如下: |
"""""""""""""""""""""""""""""" " mark setting """""""""""""""""""""""""""""" nmap <silent> <leader>hl <Plug>MarkSet vmap <silent> <leader>hl <Plug>MarkSet nmap <silent> <leader>hh <Plug>MarkClear vmap <silent> <leader>hh <Plug>MarkClear nmap <silent> <leader>hr <Plug>MarkRegex vmap <silent> <leader>hr <Plug>MarkRegex |
|
改了NERD_commenter.vim 代码注释的插件与Quickfix按键映射重复的问题,具体见Quickfix |
if g:NERDCreateDefaultMappings call s:CreateMaps('<plug>NERDCommenterComment', '<leader>cc')(代码注释) call s:CreateMaps('<plug>NERDCommenterToggle', '<leader>c<space>') call s:CreateMaps('<plug>NERDCommenterMinimal', '<leader>cm') call s:CreateMaps('<plug>NERDCommenter***y', '<leader>cs')(代码注释) call s:CreateMaps('<plug>NERDCommenterInvert', '<leader>ci') call s:CreateMaps('<plug>NERDCommenterYank', '<leader>cy') call s:CreateMaps('<plug>NERDCommenterAlignLeft', '<leader>cl') call s:CreateMaps('<plug>NERDCommenterAlignBoth', '<leader>cb') call s:CreateMaps('<plug>NERDCommenterNest', '<leader>cn')(代码注释) call s:CreateMaps('<plug>NERDCommenterUncomment', '<leader>cu')(取消注释) call s:CreateMaps('<plug>NERDCommenterToEOL', '<leader>c$') call s:CreateMaps('<plug>NERDCommenterAppend', '<leader>cA')
if !hasmapto('<plug>NERDCommenterAltDelims', 'n') nmap <leader>ca <plug>NERDCommenterAltDelims endif endif |
"Quickfix "Cheney modifyed V0.1 nmap <leader>fn :cn<cr> nmap <leader>fp :cp<cr> nmap <leader>fw :cw 10<cr> "nmap <leader>cc :botright lw 10<cr> "map <c-u> <c-l><c-j>:q<cr>:botright cw 10<cr> |
|
在当前文件中快速查找光标下的单词,按键映射如下: |
" Fast grep nmap <silent> <leader>lv :lv /<c-r>=expand("<cword>")<cr>/ %<cr>:lw<cr> vmap <silent> <leader>lv :lv /<c-r>=<sid>GetVisualSelection()<cr>/ %<cr>:lw<cr> |
常用功能如下: |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Version: 0.1 " Cheney created V0.1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" cscope -Rbq
ctags -R genfiletags_lookupfile
Ctrl+^ 可以在文件缓冲区中切换文件
输入 u 撤销最后一次输入的命令 在输入一个大写的 U ,恢复到该行的原始状态 输入 CTRL-R (先按下 CTRL 键不放开,接着输入 R 键) ,这样就可以执行恢复命令,
" 删除命令 d 的格式如下∶ [number] d object 或者 d [number] object 其意如下∶ number - 代表执行命令的次数(可选项,缺省设置为 1 )。 d - 代表删除。 object - 代表命令所要操作的对象(下面有相关介绍)。
一个简短的对象列表∶ w - 从当前光标当前位置直到单字/单词末尾,包括空格。 e - 从当前光标当前位置直到单字/单词末尾,但是 *不* 包括空格。 $ - 从当前光标当前位置直到当前行末。
x 键来删除光标所在位置的字符 dd 删除一行 dw 删除一个单词 d$ 从当前光标删除到行末
输入 p 将最后一次删除的内容置入光标之后 输入 r 和一个字符替换光标所在位置的字符 输入大写的 R 将进入替换模式
要改变一个单字/单词的部分或者全部,请输入 cw ** 更改类指令的工作方式跟删除类命令是一致的。操作格式是∶ [number] c object 或者 c [number] object
行号+ SHIFT-G 则直接跳转到文件中的某一指定行 SHIFT-G 则直接跳转到最后一行 gg 则直接跳转到文件第一行 CTRL-g 显示当前编辑文件中当前光标所在行位置以及文件状态信息
输入 / 以及尾随的字符串可以用以在当前文件中查找该字符串,如果您想逆向查找字符串,请使用 ? 代替 / 进行 要查找同上一次的字符串,只需要按 n 键。要向相反方向查找同上一次的字符串,请输入 Shift-N 即可 设置 ic 选项(ic就是英文忽略大小写Ignore Case的首字母缩写词),即输入∶ :set ic
按 % 可以查找配对的括号
输入 :s/old/new/g 可以将全行中old替换为new 输入 :s/thee/the <回车> 。请注意该命令只改变光标所在行的第一个匹配串。 输入 :%s/old/new/g 则是替换整个文件中的每个匹配串。 要替换两行之间出现的每个匹配串,请输入 :#,#s/old/new/g (#,#代表的是两行的行号)。 进行全文替换时询问用户确认每个替换需添加 c 选项,请输入 :%s/old/new/gc
输入 :! 然后紧随著输入一个外部命令可以执行该外部命令。
要将对文件的改动保存到文件中,请输入 :w FILENAME
输入 o 将在光标的下方打开新的一行并进入插入模式。 为了在光标上方打开新的一行,只需要输入大写的 O
在shell命令行下输入vimtutor可以打开30分钟的基础教程 输入 a 将可在光标之后插入文本 输入大写的 A 可以在光标所在行的行末之后插入文本。 输入 i 将可在光标之前插入文本 输入大写的 I 可以在光标所在行的行首插入文本。 请在正常模式下通过输入 $ 将光标移动到行的末尾。
vim有12个粘贴板,分别是0、1、2、…、9、a、“、+;用 :reg 命令可以查看各个粘贴板里的内容。在vim中用 y只是将内容复制到” (双引号)粘贴板里, 同样用 p 粘贴的也是这个粘贴板里的内容;要将vim的内容复制到某个粘贴板,需要退出编辑模式, 进入正常模式后,选择要复制的内容,然后按“Ny(注意带引号)完成复制,其中 N为粘贴板号(注意是按一下双引号然后按粘贴板号最后按 y), 例如要把内容复制到粘贴板 a,选中内容后按“ay就可以了,有两点需要说明一下: “号粘贴板(临时粘贴板)比较特殊,直接按 y 就复制到这个粘贴板中了,直接按p就粘贴这个粘贴板中的内容; + 号粘贴板是系统粘贴板,用“+y (依次按“ + y这三个键)将内容复制到该粘贴板后可以使用Ctrl+V将其粘贴到其他文档(如firefox、gedit)中, 同理,要把在其他地方用 Ctrl+C 或右键复制的内容复制到vim中,需要在正常模式下按“+p; 让复制粘贴支持CTRL-C和CTRL-V(由于windows系统里使用mswin.vim所以不需要下面的映射语句) " CTRL-C vnoremap <C-C> "+y
" Use CTRL-Q to do what CTRL-V used to do noremap <C-Q> <C-V>
" CTRL-V map <C-V> "+gP
现在你已经通过 CTRL-] 或双击鼠标跳转到这里了,CTRL-T、CTRL-O、g<RightMouse>、 或 <C-RightMouse> 可以用来跳回到你原来的地方。
注意标签包含在两个 | 字符之间,但打开高亮时这些字符被隐藏,这样更易于命令的阅 读。
不过,你可以在任何单词上按 CTRL-],即使该单词不出现在 | 之间也无妨。Vim 会试图 寻找该单词的相关帮助,尤其是单引号之间的选项名,如 'compatible'。
输入 :help <回车>帮助系统 输入 :help u<回车>查看指定主题的帮助 help user-manual <回车> 输入 :q <回车> 可以关闭帮助窗口。
分隔窗口: 1) 新建一个窗口(split 或者split 文件名) 2) 命令模式ctrl+w 切换窗口 3) 关闭一个窗口(close) 4) 只显示一个窗口(only) 5) 新建一个窗口 (new 或者 new 文件名) 6) 垂直新建或分隔(vsplit 或者vsplit 文件名或者用vnew命令,也可用vertical new) 7) 对所有窗品的操作 退出(qall) 写(wall) 写并退出(wqall) 强制退出(qall!) 8) 对已经打开的多个文件,可以用all命令为每个文件各开一个水平的窗口,用vertical all开垂直的窗口
" 回到正常模式 imap <F1> <ESC> imap <F2> <ESC> imap <F3> <ESC> imap <F4> <ESC>
"快速保存 nmap <silent> <leader>ww :w<cr> nmap <silent> <leader>wf :w!<cr>
"快速离开 nmap <silent> <leader>qw :wq<cr> nmap <silent> <leader>qf :q!<cr> nmap <silent> <leader>qq :q<cr> nmap <silent> <leader>qa :qa<cr>
"颜色设置 nmap <silent> <leader>cev :colorscheme evening<cr> nmap <silent> <leader>cdb :colorscheme darkblue_my<cr> nmap <silent> <leader>cdt :colorscheme desert_my<cr>
"窗口切换 "上下左右切换 nmap <C-j> <C-W>j nmap <C-k> <C-W>k nmap <C-h> <C-W>h nmap <C-l> <C-W>l "Cheney modifyed V0.1 "来回切换窗口 nmap <C-u> <C-W>w
"窗口新建 map <leader>vn :vnew map <leader>vs :vsplit<cr> map <leader>ne :new map <leader>st :split<cr> map <leader>ed :edit
vimrc设置成(用",lk"打开lookupfile with tags) (用",ll",就会在当前已打开发缓冲区中去查找文件名) (用",lw",就会在指定的目录下去查找文件名) (用",lk",就会在tag文件中查找指定的文件名)
用法 :cs find {querytype} {name} {querytype} 对应 cscope 控制台接口编号和 nvi 的缺省命令:
nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR> nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR> nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR> nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR> nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR> nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR> nmap <C-\>i :cs find i <C-R>=expand("<cfile>")<CR><CR> nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>
0 或 s: 查找本 C 符号 1 或 g: 查找本定义 2 或 d: 查找本函数调用的函数 3 或 c: 查找调用本函数的函数 4 或 t: 查找对其的赋值 6 或 e: 查找本 egrep 模式 7 或 f: 查找本文件 8 或 i: 查找包含本文件的文件
c: Find functions calling this function d: Find functions called by this function e: Find this egrep pattern f: Find this file g: Find this definition i: Find files #including this file s: Find this C symbol t: Find assignments to
nmap <silent> <leader>tl :Tlist<cr> 用",tl"打开taglist
用",bv"可以打开文件缓冲区
"页设置 map <leader>tne :tabnew map <leader>tn :tabnext<cr> map <leader>te :tabedit map <leader>tc :tabclose<cr> map <leader>tm :tabmove
nmap <silent> <leader>tl :Tlist<cr> nmap <silent> <leader>wm :WMToggle<cr> nmap <silent> <leader>fe :***plore!<cr> nmap <silent> <leader>ft :NERDTree<cr>
winmanager插件可以控制各插件在vim窗口中的布局显示,我的vimrc中这样设置成 左边有两个窗口,上面的是BufExplorer窗口,下面是taglist窗口。FileExplorer窗口和BufExplorer共用一个窗口, 在BufExplorer窗口中使用”CTRL-N“可以切换到FileExplorer窗口,再使用一次则又切换回BufExplorer窗口。 也就是说,在变量g:winManagerWindowLayout中,使用”,”分隔的插件,在同一个窗口中显示, 使用”CTRL-N“在不同插件间切换;使用”|”分隔的插件,则在另外一个窗口中显示。 |
Vim中文帮助文档: 1. http://www.vim.org/docs.php 2. http://sourceforge.net/projects/vimcdoc/
|