from: http://shaoguangleo.blog.163.com/
l 在vim编辑文件时,可以使用:split来水平地打开本文件的另一个副本,或者使用:vsplit来垂直地打开;
l 打开另外一个文件,可以使用:split anothername或者:vsplit anothername;
l 在各个窗口中的导航方式为: CTRL+W {导航键j、k、h、l},比如输入CTRL+W j就可以跳转到该窗口的下一个窗口。
l 调整分割窗口的大小:CTRL+W (+/-),分别为增大或减小窗口的大小
l 打开文件时就设置好打开的大小,例如:25 vsplit filename将打开一个垂直为25列的新的窗口。
可以使用下述命令来修改终端窗口的标题为My Terminal
:set title titlestring=My\ Terminal
使用命令:help titlestring可以了解到:
:set title titlestring=%<%F%=%l/%L-%P titlelen=70
其中:
? %F – 当前窗口中文件的名字
? %l – 光标所在的行数
? %L – 文件的总行数
? %p - 光标所在处于文件中的百分比。
可以使用下述命令来查看vim编辑器支持的配色方案:
:!ls $VIMRUNTIME/colors
然后可以试用其中的配色方案,比如想使用desert.vim
:colorscheme desert
即可更改配色方案为desert。更多详细的配色方案,参考:
http://vimcolorschemetest.googlecode.com/svn/html/index-c.html
比如使用vim –p file1 file2 file3可以打开三个选项卡用于显示3个文件。
关于选项卡中的操作,如下示:
:tabedit FILENAME :tabe FILENAME |
在当前vim会话中在另一个选项卡中打开文件 |
:tabs |
显示所有打开的选项卡 |
:tabn N |
到第N个选项卡 |
:tabclose :tabc |
关闭当前选项卡 |
:tabdo CMD |
对所有的选项卡执行命令CMD |
:tabn |
跳转到下一个选项卡 |
:tabp |
跳转到前一个选项卡 |
对于我们前面介绍的一些操作,我们可以单纯地加上一个数字,来重复操作N次,比如j表示下移一行,那么10j就是下移10行。
还有一些重复执行的命令:
重复命令 |
描述 |
@@ |
重复前一个执行的宏 |
n |
向同样的方向执行搜索 |
N |
向相反的方向执行搜索 |
. |
重复上一次的编辑命令 |
@: |
重复上一次的命令行操作 |
单次撤销,直接使用字母u即可,如果想撤销N次操作,可以使用Nu;
撤销全部操作,使用大写字母U即可。
如果使用了u撤销操作,并且发现错误了,可以使用:red或者CTRL+R来撤销刚才做的编辑动作。
这个特性对于下述所示的情况相当有用。
l 测试配置文件中所给的文件名是有效的;
l 编辑一个文件的时候,想查看编辑文件中所包含的文件;
l 在编辑源代码的时候,参考include或者import的文件;
1. 直接打开: gf
2. 打开一个新的窗口: CTRL+W f
3. 打开一个新的选项卡: CTRL+W gf
如果文件中所包含的文件并没有给出绝对路径,那么vim将在当前目录中搜索。
在下述情况下,即使没有指出绝对路径,vim也能定位到文件的准确位置:
1. C程序中的头文件;
2. Perl程序中的Perl模块
使用此种方法,可以在那一个vim会话中编译多个文件。
打开方法为:vim file1 file2 file3
如果已经处在vim编辑会话中,需要再打开一个文件,可以使用下述命令:
:e anotherfile
我们可以使用:ls来列出目前vim会话中的所有文件,比如:
:ls
1 %a "apue.h" line 1
2 # "passwd" line 1
3 "lscpu" line 1
那么我们可以使用:e #N来打开第N个文件;
在两个文件中切换的方法为: CTRL+^;
在多个文件中移动的方法:
使用命令:next和:previous分别可以移动到下一个文件或者上一个文件。
如果在没有保存文件的时候,想切换到另一个编辑文件,会出现警告信息,提示先保存信息,可以设置自动保存选项:set autowrite,这样就可以直接切换各个文件或缓存。
也可以使用:wall单个命令来写入所有的文件。
使用:X来加密文件,下次编辑时就需要输入加密密码;
解密方法为:set key=然后保存文件就可以了。
加 密 的 局 限 性
Vim 采用的加密算法有弱点的。它对于防止那种偷窥者是绰绰有余了,但不足以防止一个手上有大量时间的密码专家。而且, 你应该知道交换文件是不加密的;所以当你在编辑文件时,拥有超级用户权限的人能够读取未经加密的文件文本。不让人们读到你的交换文件的一个方法就是不使用交换文件。
:setlocal noswapfile
由于没了交换文件,文件复原就不可能了。为了避免失去编辑的成果,要比平时更勤快地存盘你的文件。
在我们编辑N个文件的时候,如果需要先做别的事情,在返回来编辑该会话,那么我们可以保存该会话,然后还原它,在这个过程中,诸如缓冲区、窗口大小、自定义选项、文件夹和当前目录等都会保存。
会话命令 |
描述 |
:mksession |
在当前目录中创建一个默认的Session.vim |
:mksession filename |
保存会话为指定的文件名filename |
$vim –S |
打开当前目录中默认的会话 |
$vim –S filename |
打开当前目录中指定的会话filename |
:source Session.vim |
导入会话中的所有设置 |
在vim中执行Unix命令cmd,使用:!cmd即可。比如显示:!date日期信息。
也可以将当前文件名作为一个参数传入到Unix命令中:
:!echo % |
%代表当前文件名 |
:!echo %:p |
%:p代表当前文件名的绝对路径 |
:!echo %:e |
%:e代表当前文件的扩展名 |
在Unix中可以使用diff file1 file2来查看两个文件的异同(完全命令终端显示),但是vimdiff更加的直观、友好(不同颜色来友好地显示出文件异同)。
vimdiff命令 |
描述 |
vimdiff file1 file2或 vim -d file1 file2 |
在一个垂直分割窗口中显示不同 |
vimdiff –o file1 file2或 vim –d -o file1 file2 |
在一个水平分割窗口中显示不同 |
vim file1 :diffsplit file2 |
已经打开了一个文件,在打开另一个文件来比较异同-水平分割 |
vim file1 :vert diffsplit file2 |
已经打开了一个文件,在打开另一个文件来比较异同-垂直分割 |
[c |
跳转到下一个修改处 |
]c |
跳转到上一个修改处 |
如果需要重复地执行一个命令,可以使用vim的映射命令来实现。
比如:map :write :!cc % && ./a.out该映射命令在执行:write的时候就会编译当前文件并执行。
前面我们提到过:w 和:up的区别,可以使用map :w :up;还有:map :q :confirm q。
使用:map可以显示所有定义的映射。
set -o vi 表示编辑命令行用 vi 模式,默认状态是 vi 的 编辑状态,可以输入、修改,用 ESC 退出编辑状态后,可以用 h,l 来前进后退, j,k 来翻看历史命令,^光标到行首,$光标至行尾,dd 删除该行...等等,和 vi 的用法是一样的。习惯用vi 的人可以用 set -o vi 这种模式加快命令行编辑。
此外,还有 set -o emacs,表示编辑命令行用 emacs 模式,不分编辑状态和控制状态。 可以直接输入,也可以用 [CTRL]-a 至行首,[CTRL]-e 至行尾,[CTRL]-k 删除光标处到末尾...等等,这和 emacs 的编辑方式是一样的。这是默认模式,也是最常见和大多数人习惯的方式。
选项 |
描述 |
:set nu |
显示行号 |
:set ic |
搜索时忽略大小写 |
:set ro |
以只读模式打开 |
:set wm=n |
最右端回卷最大值 |
:set ai |
开启自动缩排功能 |
:set all |
显示vim会话中的所有设置 |
:set list |
显示所有不可视字符,比如^|表示tab,$表示行尾 |
:set hlsearch |
高亮显示匹配模式 |
:set incsearch |
开启增量搜索模式,实时搜索 |
如果想关闭上述设置,可以使用:set no<OPTION>,例如不显示行号为:set nonu。
寄存器名称 |
描述 |
% |
当前文件的名称 |
# |
替换文件的名称 |
: |
最近一次执行的命令 |
/ |
上一次的搜索模式 |
“ |
上一次使用的寄存器 |
从寄存器中粘贴内容,执行下述命令
“<寄存器名称>p
比如如果“%p就会把当前文件名给粘贴到光标位置。
关于寄存器,有以下几点需要注意:
1. 数字表示的只有从0到9的10个寄存器;
2. 最近拷贝的存储在寄存器0;
3. 最近删除的存储在寄存器1;
我们可以使用vim作为一个文件管理器在文件系统中导航,并且可以进行一些操作。
比如使用vim /可以看到:
在vim文件浏览器中,可以执行下述操作:
键 |
描述 |
<Enter> |
打开光标对应的文件或文件夹 |
D |
删除光标对应的文件 |
R |
重命名光标对应的文件 |
X |
执行光标对应的文件 |
o |
打开一个水平分割窗口 |
也可以在vim编辑器件中打开vim文件浏览器:
键值 |
描述 |
:Ex |
在vim文件浏览器打开当前目录 |
:Ex /etc |
在vim文件浏览器打开指定目录 |
:Sex |
在vim文件浏览器使用水平分割窗口打开当前目录 |
:Vex |
在vim文件浏览器使用垂直分割窗口打开当前目录 |
:Tex |
在vim文件浏览器在一个新的选项卡中打开当前目录 |
导航键 |
描述 |
/ |
向前搜索,前向 |
? |
向后搜索,反向 |
|
|
n |
跳转到下一个搜索词所在位置 |
N |
跳转到前一个搜索词所在位置 |
//或?? |
重复前面的搜索或反向搜索 |
使用该技巧可以不用使用/pattern可以直接跳转到光标所在的字符。
导航键 |
描述 |
* |
跳转到光标所在字符的下一个匹配处 |
# |
跳转到光标所在字符的上一个匹配处 |
上面的搜索方式是精确匹配的,比如光标在字符hell上,就不会搜索到hello上,但是我们可以使用下面描述的可以使得光标在hell上时,也能搜索到hello或者shell等包含hell的单次。
导航键 |
描述 |
g* |
跳转到下一个局部匹配的单词处 |
g# |
跳转到上一个局部匹配的单词处 |
PS:可以使用[I来列出所有符号光标处单次的行。
导航键 |
描述 |
fX |
在一行中向前搜索字符X并跳转 |
FX |
在一行中向后搜索字符X并跳转 |
tX |
在一行中向前搜索字符X并跳转到X前面一个字符 |
TX |
*****没有测试出来 |
; |
向前重复上述操作 |
, |
向后重复上述操作 |
Vim编辑器中文本替换命令的语法为:
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
其中有3个可能的flags,分别为:
? [c]每次替换都确定一下
? [g]替换当前行中所有符合的
? [i] 忽略模式匹配的大小写
:%s/old-text/new-text/g
其中%s指定了所有的行,而其中%的含义为替换整个文件;
其中g的含义为指定行中所有的匹配项,如果没有g将只是替换行中发现的第一个。
:s/old-text/new-text/gi
上述命令中没有指定range范围,将默认为当前行。
:1,10s/I/We/g
上述命令将把从第1行到第10行的I替换为We。
在使用CTRL+V时,可以替换选定的文本,在输入:时,就会自动变为:’<,’>,这是就可以输入命令了:
:'<,'>s/helo/hello/g
该命令将把指定块中的helo替换为hello。
:s/helo/hello/g N
该命令将替换从当前行开始的共N行。
标准替换:
原始文本: This is his idea
:s/his/her/g
替换文本:Ther is her idea
完整单词替换:
原始文本: This is his idea
:s/\<his\>/her/
替换文本: This is her idea
所以,如果需要完整替换,需要在关键词前后添加<>,对于一些新手而言,可能会希望使用空格来代替,殊不知,这样可能会导致开始和结束的字符不符合条件。
原始文本: Linux is good. Life is nice.
:%s/\(good\|nice\)/awesome/g
替换文本: Linux is awesome. Life is awesome.
可以在命令行中使用c-flag来交互式地查找替换,比如
:%s/awesome/wonderful/gc
将会提示如下信息:
replace with wonderful (y/n/a/q/l/^E/^Y)?
? y:替换当前高亮显示的单词,并高亮显示下一个匹配的词;
? n:不替换当前高亮显示的单词,然后高亮显示下一个匹配的词;
? a:将不再出现提示而替换掉所有剩下匹配的词;
? l:替换当前高亮显示的词,并且中断操作。
:%s/^/\=line(".") . ". "/g
该命令将会把显示的行号写到文件中去。这个与:set number不同,set number只是显示行数而不会对文件内容有所影响。
原始文本: Current file path is ~/test/
:%s!\~!\= expand($HOME)!g
替换文本: Current file path is /home/leo/test/
比如我们有下面的图书列表:
Article 1: Vi and Vim Editor: 3 Steps To Enable Thesaurus Option
Article 2: Vim Autocommand: 3 Steps to Add Custom Header To Your File
Article 3: 5 Awesome Examples For Automatic Word Completion Using CTRL-X
Article 4: Vi and Vim Macro Tutorial: How To Record and Play
Article 5: Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
Article 6: How To Add Bookmarks Inside Vim Editor
Article 7: Make Vim as Your Bash-IDE Using bash-support Plugin
Article 8: 3 Powerful Musketeers Of Vim Editor ? Macro, Mark and Map
Article 9: 8 Essential Vim Editor Navigation Fundamentals
Article 10: Vim Editor: How to Correct Spelling Mistakes Automatically
Article 11: Transfer the Power of Vim Editor to Thunderbird for Email
Article 12: Convert Vim Editor to Beautiful Source Code Browser
忘记了3rd Article “Make Vim as Your Perl IDE Using perl-support.vim Plugin” ,现在我们要做的就是插入3rd Article “Make Vim as Your Perl IDE Using perl-support.vim Plugin”并且需要把后面的数目需要逐次增加1。
那么我们可以使用命令:
:4,$s/\d\+/\=submatch(0) + 1/
其中:
范围:4,$为从第4行到最后;
\d\表示一个数字的字符串;
\=submatch(0) + 1 取到数字并且加1;
由于这里没有flag,所以默认只会替换第一个吻合的单词。
更换后变为:
Article 1: Vi and Vim Editor: 3 Steps To Enable Thesaurus Option
Article 2: Vim Autocommand: 3 Steps to Add Custom Header To Your File
Article 3: Make Vim as Your Perl IDE Using perl-support.vim Plugin
Article 4: 5 Awesome Examples For Automatic Word Completion Using CTRL-X
Article 5: Vi and Vim Macro Tutorial: How To Record and Play
Article 6: Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
Article 7: How To Add Bookmarks Inside Vim Editor
Article 8: Make Vim as Your Bash-IDE Using bash-support Plugin
Article 9: 3 Powerful Musketeers Of Vim Editor ? Macro, Mark and Map
Article 10: 8 Essential Vim Editor Navigation Fundamentals
Article 11: Vim Editor: How to Correct Spelling Mistakes Automatically
Article 12: Transfer the Power of Vim Editor to Thunderbird for Email
Article 13: Convert Vim Editor to Beautiful Source Code Browser
:%s/\.\s*\w/\=toupper(submatch(0))/g
该命令将把每个句子的首字母大写。
\.\s*\w --搜索模式,在句点后跟零个或多个空格,然后一个单词;
toupper – 将给定的文本改为大写字母;
submatch(0) –返回匹配的模式
:vimgrep leo *.txt --可以使用该命令在当前所有txt文件中搜索leo,如果有多个匹配项,可以使用:cn来跳转到下一个。
命令 |
描述 |
:vimgrep pattern * |
在多个文件中搜索pattern |
:cn |
跳转到下一个vimgrep搜索到的项 |
:cN |
跳转到上一个vimgrep搜索到的项 |
:clist |
列出所有vimgrep搜索到的项 |
:cc number |
直接跳转到number对应的项 |
:set hlsearch 该选项将高亮显示搜索的结果
:set nohlsearch 该选项将不高亮显示搜索的结果
:nohlsearch 清除高亮显示的结果
:set incsearch该增量搜索模式将在你输入字符的时候就立即定位符合你输入的pattern,同样禁用该选项为:set noincsearch
:match ErrorMsg /Error/
将文件中所有的Error用ErrorMsg配色方案来显示;
比如::match ErrorMsg /printf/将显示如下:
其中,配色方案主要有:
? ErrorMsg
? WarningMsg
? ModeMsg
? MoreMsg
关于配色方案,我们也可以自己设定。
比如,原文为:
The Geek Stuff article categories:
Vi / Vim Tips and Tricks
Linux Tutorials
SSH Tips and Tricks
Productivity Tips
HowTo & FAQ
Hardware Articles
Nagios Tutorials
MySQL and PostgreSQL Tips
操作后变为:
The Geek Stuff article categories:
*Vi / Vim Tips and Tricks
*Linux Tutorials
*SSH Tips and Tricks
*Productivity Tips
*HowTo & FAQ
*Hardware Articles
*Nagios Tutorials
*MySQL and PostgreSQL Tips
操作方法为:
1. 使用CTRL+V选定第一列;
2. 按下I(即i的大写字母);
3. 按下TAB可以移动全部选择行;
4. 然后插入*号即可,所有的操作都会影响所有的行;
5. ESC退出编辑;
在Debian操作系统中,可以设置vim为通用默认编辑器,命令为:
update-alternatives --set editor <PATH OF VIM>
对于普通用户,可以在bashrc中,设置默认编辑器为vim,只需要在bashrc中添加export EDITOR=vi即可。
使用gqap来格式化段落。
对于我们使用的宏,如果不小心录制错误了,可以有两种方法来修改:
1. 重新录制宏;
2. 修改宏
a) “ap 用于粘贴宏;
b) 修改宏中错误的地方;
c) “ayy 重新录制该宏;
原文为:
int main()
{
printf("Hello World!\n");
printf(“Done.”);
}
缩进后为:
int main()
{
printf("Hello World!\n");
printf(“Done.”);
}
有两种方法,分别为:
1. 移动光到{或者},然后输入>i{即可右移,左移为<;
2. 使用块模式
a) 将光标移动到需要移动的行;
b) 使用v键来选择移动区域;
c) 使用方向键选定行;
d) 使用>或者<来右移或者左移;
前面讲了很多技巧,如果我们将导航命令和编辑命令组合,将会得到更强大的功能。
键 |
描述 |
d<导航键h、j、k、l> |
向导航方向删除 |
dw |
删除一个单词 |
d$ |
一直删除到行尾 |
d0 |
一直删除到行首 |
dG |
删除到文件末尾 |
dgg |
删除到文件开始 |
dk |
删除当前和上一行 |
Dj |
删除当前和下一行 |
dM |
删除到屏幕中间 |
dH |
删除到屏幕开始 |
dL |
删除到屏幕底部 |
y <导航键h、j、k、l> |
根据导航键来拷贝 |
c<导航键h、j、k、l> |
根据导航键来修改 |
:changes即可
当屏幕由于一些原因而导致失真时,可以使用CTRL+L来重绘屏幕。
使用:digraphs可以查看一些非键盘字符;
我们可以在插入状态中使用CTRL+K At来输入@,其中的At就是使用digraphs中查看的对应字符。这里可以输入日文、阿拉伯符号等。
更多信息,参考:help diagraphs
输入Q就可以进入ex模式,然后输入visual或者:vi就可以回到正常模式。
在我们需要连续不断地执行命令的时候,可以进入该模式。
一般在使用/pattern搜索的时候,光标会位于匹配的开始出,我们可以使用/pattern\zs来使得光标位于该行的结尾。
在光标位于字符n上的时候,输入ga就会在底端显示:
<n> 110, Hex 6e, Octal 156
使用命令行参数b,即 vim –b filename
这个特性对于有很多子函数的代码很有用;
:set foldmethod=indent即可折叠所有具有成对{}的代码。
折叠键 |
描述 |
za |
展开光标下的内容 |
zR |
展开所有折叠的内容 |
zM |
折叠全部 |
:set foldmethod=manual
折叠键 |
描述 |
zf <导航键j、k> |
根据导航符来折叠 |
zf/pattern |
通过搜索到的pattern来折叠代码 |
我们也可以将所有的折叠信息保存起来,用的时候再加载,然后会还原原来设置的。方法为:mkview 和 :loadview。
自动补全需要前面有定义或者有词典导入。
键 |
描述 |
CTRL-X CTRL-N |
单词自动补全-下一个 -需要下一个的时候,直接CTRL-N即可。 |
CTRL-X CTRL-P |
单词自动补全-上一个 -需要下一个的时候,直接CTRL-P即可。 |
CTRL-X CTRL-L -需要下一个的时候,直接CTRL-L即可。
CTRL-X CTRL-F -需要下一个的时候,直接CTRL-F即可。
首先在~/.vimrc中设置: set dictionary+=/usr/share/dict/words
然后使用CTRL-X CTRL-K 就可以搜索到符合词典中单次的项。
这个功能可以使得使用vim会变得更高效。使能一个同义词的方法:
1. 定义一个同义词文件,比如:在文件/home/leo/mythesaurus.txt中输入important,valuable,substantial,significant;
2. 然后在~/.vimrc中添加该文件路径,即:set thesaurus+=/home/leo/mythesaurus.txt;
3. 使用方法为:CTRL-X CTRL-T,在我们输入important的时候就会出现valuable等剩下的三个单词;
相比较与自己定义一个同义词文件,我们可以下载自定义好的巨大(moby)单词量的thesaurus,方法为:
wget http://www.gutenberg.org/dirs/etext02/mthes10.zip
$ unzip mthes10.zip
Archive: mthes10.zip
inflating: aaREADME.txt
inflating: roget13a.txt
inflating: mthesaur.txt
然后把mtheaur.txt添加到vimrc中,
set thesaurus+=/home/jsmith/mthesaur.txt
比如PHP程序需要,就可以创建一个php-function.txt文件并添加到vimrc文件中,比如文件内容为:
math abs acos acosh asin asinh atan atan2 atanh
base_convert bindec ceil cos
errors debug_backtrace debug_print_backtrace
error_get_last error_log error_reporting
restore_error_handler
首先要下载autocomplpop.vim
l mkdir –p ~/.vim/plugin
l cd ~/.vim/plugin
l wget –O autocomplpop.zip http://www.vim.org/scripts/download_script.php?src_id=11894
l 开启filetype plugin on
默认情况下,安装了该插件以后,弹出菜单会在我们输入单词的时候自动显示,而不再需要我们输入命令,这种情况同样适用于文件名的自动补全,还可以提供对omni tags标记的支持,比如在输入HTML、XHTML、CSS、Ruby和Python代码的时候,例如输入<body>后在输入</就会自动弹出body>。
首先需要安装word_complete.vim插件。
两种开启自动补全插件的方法:
1. 在使用vim打开文件后,输入:call DoWordComplete()即可;
2. 在vimrc中文件中,添加:autocmd BufEnter * call DoWordComplete()即可。
如果想禁用该特性,使用:call EndWordComplete()即可。
在输入的过程中,如果弹出的单词所示我们需要的,直接输入TAB即可,如果不是,那么我们只需要继续输入即可匹配。
关于回车与换行
很久以前,老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,ASCII码为0D),另一个字符把纸上移一行 (称为换行, ASCII码为0A)。当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。UNIX 开发者决定他们可以用一个字符来表示行尾,linux沿袭Unix,也是。Apple 开发者规定了用.开发 MS-DOS以及Windows 的那些家伙则决定沿用老式的.
三种行尾格式如下:
unix : \n
dos: \r\n
mac : \r
这意味着,如果你试图把一个文件从一种系统移到另一种系统,那么你就有换行符方面的麻烦。
因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下写的代码,行尾后“^M”符号。
在Vim中解决这个问题,很简单,在Vim中利用替换功能就可以将“^M”都删掉,键入如下替换命令行:
:%s/^M//g
注意:
上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”键生成的,或者Ctrl+v,再按回车。
或者使用这个命令:
:% s/\r//g
安装下载cvim.zip解压到~/.vim即可。
安装完后,可在~/.vimrc 添加快捷键映射(如我上面的配置文件中示,下面这两个快
捷键是用于快速定位错误的):
" csupport plugin
map <silent> <F9> <Esc>:cprevious<CR>
map <silent> <F10> <Esc>:cnext<CR>
然后我们更新一下帮助文档:
:helptags $VIMRUNTIME/doc
:helptags ~/.vim/doc
全部hotkey可用 evince ~/.vim/c-support/doc/c-hotkeys.pdf 打开查看。
insert mode, (n) normal mode, (v) visual mode
l \cl 添加 end-of-line 注释 (n,v,i)
l \cj 调整end-of-line 注释 (n,v,i)
l \cs 设置end-of-line 注释的列数 (n)
l \c* 用/* */注释掉一个代码块code ? comment /* */ (n,v)
l \cc 用//注释掉一个代码块code ? comment // (n,v)
l \co 取消注释 comment ? code (n,v)
l \cfr frame comment (n,i)
l \cfu function comment (n,i)
l \cfdh file description (header) (n,i)
l \chs H–file sections (tab compl.) (n,i)
l \ckc keyword comment (tab compl.) (n,i)
l \csc special comment (tab compl.) (n,i)
l \cd Date (n,v,i)
l \ct date & time (n,v,i)
l \ps choose a Std. Lib. Include (n,i)
l \pc choose a C99 include (n,i)
l \p< #include<...> (n,i)
l \p" #include"..." (n,i)
l \pd #define (n,i)
l \pu #undef (n,i)
l \pie #if #else #endif (n,v,i)
l \pid #ifdef #else #endif (n,v,i)
l \pin #ifndef #else #endif (n,v,i)
l \pind #ifndef #def #endif (n,v,i)
l \pe #error (n,i)
l \pl #line (n,i)
l \if Function (n,v,i)
l \isf static function (n,v,i)
l \im Main() (n,v,i)
l \ie enum + typedef (n,v,i)
l \is struct + typedef (n,v,i)
l \iu union + typedef (n,v,i)
l \ip Printf() (n,i)
l \isc Scanf() (n,i)
l \rc save and compile (n,i)
l \rl Link (n,i)
l \rr Run (n,i)
l \ra set comand line arguments (n,i)
l \rm run make (n,i)
l \rma cmd. line arg. for make (n,i)
l \rp run splint1 1 (n,i)
l \rpa cmd. line arg. for splint (n,i)
l \rd run indent (n,i)