2012年(6)
分类:
2012-10-27 00:31:53
Vim使用技巧
Vim使用有一段时间了,现整理和总结一下其中的一些使用心得,本文中使用的vim配制文件来源于其中做了一些修改如下: |
|
增加了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 imap endif 修改下如下: if !exists("g:C_Ctrl_j") || ( exists("g:C_Ctrl_j") && g:C_Ctrl_j != 'off' ) nmap imap endif " |
增加了辅助vim使用global的gtags.vim插件(global是用来产生tags文件)global的使用说明参见 |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "Cheney modifyed V0.1 " Gtags configuration nmap nmap nmap """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |
设置标签,按键映射如下: |
"""""""""""""""""""""""""""""" " mark setting """""""""""""""""""""""""""""" nmap vmap nmap vmap nmap vmap |
|
改了NERD_commenter.vim 代码注释的插件与按键映射重复的问题,具体见Quickfix |
if g:NERDCreateDefaultMappings call s:CreateMaps(' call s:CreateMaps(' call s:CreateMaps(' call s:CreateMaps(' call s:CreateMaps(' call s:CreateMaps(' call s:CreateMaps(' call s:CreateMaps(' call s:CreateMaps(' call s:CreateMaps(' call s:CreateMaps(' call s:CreateMaps('
if !hasmapto(' nmap endif endif |
" "Cheney modifyed V0.1 nmap nmap nmap "nmap "map |
|
在当前文件中快速查找光标下的单词,按键映射如下: |
" Fast grep nmap vmap |
常用功能如下: |
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " 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
" Use CTRL-Q to do what CTRL-V used to do noremap
" CTRL-V map
现在你已经通过 CTRL-] 或双击鼠标跳转到这里了,CTRL-T、CTRL-O、g 或
注意 标签包含在两个 | 字符之间,但打开高亮时这些字符被隐藏,这样更易于命令的阅 读。
不过,你可以在任何单词上按 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 imap imap imap
"快速保存 nmap nmap
"快速离开 nmap nmap nmap nmap
"颜色设置 nmap nmap nmap
"窗口切换 "上下左右切换 nmap nmap nmap nmap "Cheney modifyed V0.1 "来回切换窗口 nmap
"窗口新建 map map map map map
vimrc设置成(用",lk"打开lookupfile with tags) (用",ll",就会在当前已打开发缓冲区中去查找文件名) (用",lw",就会在指定的目录下去查找文件名) (用",lk",就会在tag文件中查找指定的文件名)
用法 :cs find {querytype} {name} {querytype} 对应 cscope 控制台接口编号和 nvi 的缺省命令:
nmap nmap nmap nmap nmap nmap nmap nmap
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 用",tl"打开taglist
用",bv"可以打开文件缓冲区
"页设置 map map map map map
nmap nmap nmap nmap
winmanager插件可以控制各插件在vim窗口中的布局显示,我的vimrc中这样设置成 左边有两个窗口,上面的是BufExplorer窗口,下面是taglist窗口。FileExplorer窗口和BufExplorer共用一个窗口, 在BufExplorer窗口中使用”CTRL-N“可以切换到FileExplorer窗口,再使用一次则又切换回BufExplorer窗口。 也就是说,在变量g:winManagerWindowLayout中,使用”,”分隔的插件,在同一个窗口中显示, 使用”CTRL-N“在不同插件间切换;使用”|”分隔的插件,则在另外一个窗口中显示。 |
Vim中文帮助文档: 1. 2.
|