Best of Vim Tips 中文版

来源:互联网 发布:通用顶级域名共有多少 编辑:程序博客网 时间:2024/04/28 04:37
这是篇每个 Vim 用户都应该阅读的文章,原文在这里 
http://www.rayninfo.co.uk/vimtips.html 

这篇文章很早被翻译过,好像是一个清华的哥们翻译的。我再原来的基础上又整理 
和新增了些内容--这是两年前做的,后来没有再更新。有兴趣的人可以继续更新。 

__BEGIN__ 
--------------------------------------------------------------------------- --- 
# searching 查找 
/joe/e                      : cursor set to End of match 
                              把光标定位在匹配单词最后一个字母处 
/joe/e+1                    : cursor set to End of match plus 1 
                              把光标定位在匹配单词最后一个字母的下一个字母处 
/joe/s-2                    : cursor set to Start of match minus 2 
                              把光标定位在匹配单词第一个字母往前数两个字母的位置 
/^joe.*fred.*bill/          : normal 
                              标准的正则表达式 
/^[A-J]\+/                  : search for lines beginning with one or more A-J 
                              查找以一个或多个 A-J 中的字母开头的行 
/begin\_.*end               : search over possible multiple lines 
                              查找在 begin 和 end 两个单词之间尽可能多的行 
/fred\_s*joe/i              : any whitespace including newline 
                              查找在 fred 和 joe 两个单词之间任意多的空格,包括新行 
/fred\|joe                  : Search for FRED OR JOE 
                              查找 fred 或 joe 
/\([^0-9]\|^\)%.*%          : Search for absence of a digit or beginning of line 
                              查找 
/.*fred\&.*joe              : Search for FRED AND JOE in any ORDER! 
                              查找同时包含 FRED 和 JOE 的行,不分前后顺序 
/\<fred\>/i              : search for fred but not alfred or frederick 
                              查找 fred, 而不是 alfred 或者 frederick,也就是全字匹配 
/\<\d\d\d\d\>            : Search for exactly 4 digit numbers 
                              查找4个数字的全字匹配 
/\D\d\d\d\d\D               : Search for exactly 4 digit numbers 
                              查找4个数字的全字匹配 
/\<\d\{4}\>              : same thing 
                              同上 

# finding empty lines 查找空行 
/^\n\{3}                    : find 3 empty lines 
                              查找 3 行空行 
# Specify what you are NOT searching for (vowels) 
# 指定不要查找什么 
/\c\v([^aeiou]&\a){4}       : search for 4 consecutive consanants 

# using rexexp memory in a search 
# 在查找中使用正则表达式存储 
/\(fred\).*\(joe\).*\2.*\1 

# Repeating the Regexp (rather than what the Regexp finds) 
# 重复正则表达式 
/^\([^,]*,\)\{8} 

# visual searching 
# 可视模式下的查找 
:vmap // y/<C-R>"<CR>       : search for visually highlighted text 
                                     查找被高亮显示的文本 
:vmap <silent> //    y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> : with spec chars 

# searching over multiple lines \_ means including newline 
# 查找多行。\_ 表示包括新行 
/<!--\_p\{-}-->                : search for multiple line comments 
                                     查找多行注释 
/fred\_s*joe/i                    : any whitespace including newline 
                                     查找在 fred 和 joe 两个单词之间任意多的空 
格,包括新行 
/bugs\(\_.\)*bunny                : bugs followed by bunny anywhere in file 
                                     bugs 后任意位置含有 bunny 单词的多个行 
:h \_                             : help 
                                     帮助 

# search for declaration of subroutine/function under cursor 
# 查找光标下子程序/函数的声明 
:nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR> 

# multiple file search 
# 在多个文件中查找 
:bufdo /searchstr 
:argdo /searchstr 

# How to search for a URL without backslashing 
# 如何不使用反斜线查找 URL 
?http://www.vim.org/        : search BACKWARDS!!! clever huh! 
---------------------------------------- 
# substitution 
# 替换 
:%s/fred/joe/igc            : general substitute command 
                               普通替换命令 
:%s/\r//g                   : Delete DOS returns ^M 
                               删除 DOS 回车符 ^M 

# Is your Text File jumbled onto one line? use following 
# 你的文本文件是否乱七八糟的排成一行?使用如下命令 
:%s/\r/\r/g                 : Turn DOS returns ^M into real returns 
                               转换 DOS 回车符 ^M 为真正的回车符 
:%s=  *$==                  : delete end of line blanks 
                               删除行尾空格 
:%s= \+$==                  : Same thing 
                               同上 
:%s#\s*\r\?$##              : Clean both trailing spaces AND DOS returns 
                               删除行尾空格和 DOS 回车符 
:%s#\s*\r*$##               : same thing 
                               删除行尾空格和 DOS 回车符 

# deleting empty lines 
# 删除空行 
:%s/^\n\{3}//               : delete blocks of 3 empty lines 
                               删除三行空行 
:%s/^\n\+/\r/               : compressing empty lines 
                              压缩多行空行为一行 

# IF YOU ONLY WANT TO KNOW ONE THING 
# 如果你只想明白一件事情 
:'a,'bg/fred/s/dick/joe/igc : VERY USEFUL 
                               非常有用 

# duplicating columns 
# 复制列 
:%s= [^ ]\+$=&&=            : duplicate end column 
                               复制最后一列 
:%s= \f\+$=&&=              : same thing 
                               同上 
:%s= \S\+$=&&               : usually the same 
                               同上 
# memory 
# 记忆,或叫引用 
:s/\(.*\):\(.*\)/\2 : \1/   : reverse fields separated by : 
                               反转以 : 分隔的字段 
:%s/^\(.*\)\n\1/\1$/        : delete duplicate lines 
                               删除重复的行 

# non-greedy matching \{-} 
# 非贪婪匹配 \{-} 
:%s/^.\{-}pdf/new.pdf/      : delete to 1st pdf only 
                               只删除到第一个 pdf 

# use of optional atom \? 
:%s#\<[zy]\?tbl_[a-z_]\+\>#\L&#gc : lowercase with optional leading characters 
                                        不懂 

# over possibly many lines 
# 匹配尽可能多的行 
:%s/<!--\_.\{-}-->//        : delete possibly multi-line comments 
                                  删除尽可能多的注释 
:help /\{-}                 : help non-greedy 
                               非贪婪匹配的帮助 

# substitute using a register 
# 使用寄存器替换 
:s/fred/<c-r>a/g         : sub "fred" with contents of register "a" 
                               用"a"寄存器里的内容替换"fred" 
:s/fred/\=@a/g              : better alternative as register not displayed 
                               更好的方法,不用显示寄存器内容 

# multiple commands on one line 
# 写在一行里的复杂命令 
:%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d | %s/gif/jpg/ 

# ORing 
:%s/suck\|buck/loopy/gc     : ORing (must break pipe) 
                               不懂 
# Calling a VIM function 
# 调用 Vim 函数 
:s/__date__/\=strftime("%c")/ : insert datestring 
                                插入日期 

# Working with Columns sub any str1 in col3 
# 处理列,替换所有在第三列中的 str1 
:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2: 

# Swapping first & last column (4 columns) 
# 交换第一列和最后一列 (共4列) 
:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1: 

# filter all form elements into paste register 
# 把所有的form元素(就是html里面的form啦)放到register里 
:redir @*|sil exec 'g#<\(input\|select\|textarea\|/\=form\)\>#p'|redir END 
:nmap ,z :redir @*<Bar>sil exec 
'g@<\(input\<Bar>select\<Bar>textarea\<Bar>/\=form\)\>@p'<Bar>redir END<CR> 

# increment numbers by 6 on certain lines only 
# 不懂 
:g/loc\|function/s/\d/\=submatch(0)+6/ 

# better 
# 更好的方法 
:%s#txtdev\zs\d#\=submatch(0)+1#g 
:h /\zs 

# increment only numbers gg\d\d  by 6 (another way) 
# 不懂 
:%s/\(gg\)\@<=\d\+/\=submatch(0)+6/ 
:h zero-width 

# find replacement text, put in memory, then use \zs to simplify substitute 
# 查找需替换的文本,保存,然后使用 \zs 命令简单替换 
:%s/"\([^.]\+\).*\zsxx/\1/ 

# Pull word under cursor into LHS of a substitute 
# 不懂 
:nmap <leader>z :%s#\<<c-r>=expand("<cword>")<cr>\># 

# Pull Visually Highlighted text into LHS of a substitute 
# 不懂 
:vmap <leader>z :<C-U>%s/\<<c-r>*\>/ 

---------------------------------------- 

# all following performing similar task, substitute within substitution 
# Multiple single character substitution in a portion of line only 

:%s,\(all/.*\)\@<=/,_,g     : replace all / with _ AFTER "all/" 

# Same thing 
:s#all/\zs.*#\=substitute(submatch(0), '/', '_', 'g')# 

# Substitute by splitting line, then re-joining 
:s#all/#&^M#|s#/#_#g|-j! 

# Substitute inside substitute 
:%s/.*/\='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/ 
---------------------------------------- 
# global command display (see tip 227) 
# 全局命令显示(参见 tip 227) 
:g/fred.*joe.*dick/         : display all lines fred,joe & dick 
                              显示所有包含fred,joe 和 dick 的行 
:g/\<fred\>/             : display all lines fred but not freddy 
                               显示所有全字匹配 fred 的行 
:g/<pattern>/z#.5        : display with context 
                               显示上下文 
:g/<pattern>/z#.5|echo "=========="  : display beautifully 
                                           显示得很漂亮 
:g/^\s*$/d                  : delete all blank lines 
                               删除所有的空行 
:g!/^dd/d                   : delete lines not containing string 
                               删除所有行首不是 dd 的行 
:v/^dd/d                    : delete lines not containing string 
                              同上 
:g/fred/,/joe/d             : not line based (very powerfull) 
                               并不基于行(非常强大) 
:g/{/ ,/}/- s/\n\+/\r/g     : Delete empty lines but only between {...} 
                               删除在 {...} 只见的空行 
:v/./.,/./-1join            : compress empty lines 
                               压缩空行 
:g/^$/,/./-j                : compress empty lines 
                               压缩空行 
:g/<input\|<form/p    : ORing 
                               不懂 
:g/^/pu _                   : double space file (pu = put) 
                               把文件中空行增加一倍 
:g/^/m0                     : Reverse file (m = move) 
                               翻转文件 
:g/fred/t$                  : copy lines matching fred to EOF 
                               把匹配 fred 的行拷贝到文件最后 
:g/stage/t'a                : copy lines matching stage to marker a 
                               把匹配 stage 的行做标记a 
:%norm jdd                  : delete every other line 
                               隔一行删除一行 

# incrementing numbers (type <c-a> as 5 characters) 
:.,$g/^\d/exe "norm! \<c-a>": increment numbers 
                                  增加每行行首的数字 
:'a,'bg/\d\+/norm! ^A          : increment numbers 
                                  增加标记 a 到标记 b 只见每行行首的数字 

# storing glob results (note must use APPEND) 
# 保存全局命令的结果 (注意必须使用添加模式) 
:g/fred/y A                 : append all lines fred to register a 
                               添加所有为fred所匹配的行到register a 
:'a,'b g/^Error/ . w >> errors.txt 

# duplicate every line in a file wrap a print '' around each duplicate 
# 复制每一行,然后在复制出来的每一行两侧加上一个 print '复制出来的内容' 
:g/./yank|put|-1s/'/"/g|s/.*/Print '&'/ 

# replace string with contents of a file, -d deletes the "mark" 
# 用文件中的内容替换字符串,-d 表示删除“标记” 
:g/^MARK$/r tmp.ex | -d 

---------------------------------------- 

# Global combined with substitute (power editing) 
# 全局命令和替换命令联姻 (强大的编辑能力) 
:'a,'bg/fred/s/joe/susan/gic :  can use memory to extend matching 
                                 可以使用反向引用来匹配 
:g/fred/,/joe/s/fred/joe/gic :  non-line based (ultra) 

---------------------------------------- 

# Find fred before beginning search for joe 
# 先找fred,然后找joe 
:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC 

---------------------------------------- 

# Absolutely essential 
# 基础 

---------------------------------------- 
* # g* g#           : find word under cursor (<cword>) (forwards/backwards) 
                       寻找光标处的狭义单词(<cword>) (前向/后向) 
%                   : match brackets {}[]() 
                       括号配对寻找 {}[]() 
.                   : repeat last modification 

matchit.vim         : % now matches tags <tr><td><script> <?php etc 
                       使得 % 能够配对标记 <tr><td><script> <?php 等等 
<C-N><C-P>          : word completion in insert mode 
                             插入模式下的单词自动完成 
<C-X><C-L>          : Line complete SUPER USEFUL 
                             行自动完成(超级有用) 
/<C-R><C-W>         : Pull <cword> onto search/command line 
                             把狭义单词 <cword> 写到 搜索命令行 
/<C-R><C-A>         : Pull <CWORD> onto search/command line 
                             把广义单词 <cWORD> 写到 搜索命令行 
:set ignorecase     : you nearly always want this 
                       搜索时忽略大小写 
:syntax on          : colour syntax in Perl,HTML,PHP etc 
                       在 Perl,HTML,PHP 等中进行语法着色 
:h regexp<C-D>      : type control-D and get a list all help topics containing 
                          按下 control-D 键即可得到包含有 regexp 的帮助主题的列表 
                       regexp (plus use TAB to Step thru list) 
                       (使用TAB可以实现帮助的自动补齐) 
---------------------------------------- 
# MAKE IT EASY TO UPDATE/RELOAD _vimrc 
# 使更新 _vimrc 更容易 
:nmap ,s :source $VIM/_vimrc 
          # 译释:nmap 是绑定一个在normal模式下的快捷键 
:nmap ,v :e $VIM/_vimrc 
          # 译释:在normal模式下,先后按下 ,s 两个键执行_vimrc,而 ,v 则是编辑_vimrc 

---------------------------------------- 

#VISUAL MODE (easy to add other HTML Tags) 
# visual 模式 (例子是:轻松添加其他的 HTML Tags) 
:vmap sb "zdi<b><C-R>z</b><ESC>  : wrap <b></b> around VISUALLY selected Text 
                                                在visual模式下选中的文字前后分别 
加上<b>和</b> 
:vmap st "zdi<?= <C-R>z ?><ESC>  : wrap <?=   ?> around VISUALLY selected Text 
                                             在visual模式下选中的文字前后分别加 
上<?= 和 ?> 

---------------------------------------- 

# Exploring 
# 文件浏览 
:Exp(lore)                      : file explorer note capital Ex 
                                   开启目录浏览器,注意首字母E是大写的 
:Sex(plore)                     : file explorer in split window 
                                   在一个分割的窗口中开启目录浏览器 
:ls                             : list of buffers 
                                   显示当前buffer的情况 
:cd ..                          : move to parent directory 
                                   进入父目录 
:args                           : list of files 
                                   显示目前打开的文件 
:lcd %:p:h                      : change to directory of current file 
                                   更改到当前文件所在的目录 
:autocmd BufEnter * lcd %:p:h   : change to directory of current file 
automatically (put in _vimrc) 
                                   自动更改到当前文件所在的目录 (放到 _vimrc) 

---------------------------------------- 

# Buffer Explorer (Top Ten Vim Script) 
# 缓冲区(buffer)浏览器 (第三方的一个最流行的脚本) 
# needs bufexplorer.vim  http://www.vim.org/script.php?script_id=42 
# 需要下载 bufexplorer.vim 
\be                             : buffer explorer list of buffers 
                                   在缓冲区浏览器中打开缓冲区列表 
\bs                             : buffer explorer (split window) 
                                   以分割窗口的形式打开缓冲区浏览器 

---------------------------------------- 

# Changing Case 
guu                             : lowercase line 
                                   行小写 
gUU                             : uppercase line 
                                   行大写 
Vu                              : lowercase line 
                                   行小写 
VU                              : uppercase line 
                                   行大写 
g~~                             : flip case line 
                                   行翻转 
vEU                             : Upper Case Word 
                                   字大写(狭义字) 
vE~                             : Flip Case Word 
                                   字翻转(狭义字) 
ggguG                           : lowercase entire file 
                                   把整个文章全部小写 

# Titlise Visually Selected Text (map for .vimrc) 
vmap ,c :s/\<\(.\)\(\k*\)\>/\u\1\L\2/g<CR> 
# Uppercase first letter of sentences 
# 大写所有句子的第一个字母 
:%s/[.!?]\_s\+\a/\U&\E/g 

---------------------------------------- 

gf                              : open file name under cursor (SUPER) 
                                   取当前光标处的广义字作为文件名,然后试图打开它! 
ga                              : display hex,ascii value of char under cursor 
                                   显示光标处字符的ascii,hex,oct,... 
ggVGg?                          : rot13 whole file 
                                   用rot13编码整个文件 
ggg?G                           : rot13 whole file (quicker for large file) 
                                   用rot13编码整个文件(对大文件更快一些) 
:8 | normal VGg?                : rot13 from line 8 
                                   从第8行开始,用rot13编码后面的文本 
:normal 10GVGg?                 : rot13 from line 8 
                                   从第8行开始,用rot13编码后面的文本 

# 【关于rot13——谁让英文是偶数个字母啊】 
# ROT13 是一种简单的编码,它把字母分成前后两组,每组13个,编码和解码 
# 的算法相同,仅仅交换字母的这两个部分,即:[a..m] --> [n..z] 和 [n..z] 
# --> [a..m] 。 ROT13 用简易的手段使得信件不能直接被识别和阅 
# 读,也不会被搜索匹配程序用通常的方法直接找到。经常用于 USENET 中发表一 
# 些攻击性或令人不快的言论或有简单保密需要的文章。 
# 由于 ROT13 是自逆算法,所以,解码和编码是同一个过程。 

<C-A>,<C-X>               : increment,decrement number under cursor 
                                   增加,减少 光标处的狭义字所表示的数字 
                                   win32 users must remap CNTRL-A 
                                   Win32的用户可能需要重新定义一下Ctrl-A 
<C-R>=5*5                    : insert 25 into text (mini-calculator) 
                                   插入25 (一个迷你计算器) 

---------------------------------------- 

# Makes all other tips superfluous 
:h 42            : also http://www.google.com/search?q=42 
:h holy-grail 
:h! 

---------------------------------------- 

# Markers & moving about 
# 标记和移动 
'.               : jump to last modification line (SUPER) 
                    跳到最后修改的那一行 (超级有用) 
`.               : jump to exact spot in last modification line 
                    不仅跳到最后修改的那一行,还要定位到修改点 
g;               : cycle thru recent changes (oldest first) (new in vim6.3) 
                    循环跳转修改点(从最老的修改点开始) (vim6.3中新增) 
g,               : reverse direction (new in vim6.3) 
                    反向循环跳转修改点 (vim6.3中新增) 

:changes 
:h changelist    : help for above 
<C-O>            : retrace your movements in file (starting from most recent) 
                       依次沿着你的跳转记录向回跳 (从最近的一次开始) 
<C-I>            : retrace your movements in file (reverse direction) 
                       依次沿着你的跳转记录向前跳 
:ju(mps)         : list of your movements 
                    列出你跳转的足迹 
:help jump-motions 
:history         : list of all your commands 
                    列出历史命令记录 
:his c           : commandline history 
                    命令行命令历史 
:his s           : search history 
                    搜索命令历史 
q/               : Search history Window 
                    搜索命令历史的窗口 
q:               : commandline history Window 
                    命令行命令历史的窗口 
:<C-F>        : history Window 
                    历史命令记录的窗口 
---------------------------------------- 
# Abbreviations & maps 
# # 缩写和键盘映射 
:map   <f7>   :'a,'bw! c:/aaa/x 
                  # 译释:map是映射一个normal模式下的键 
                  # 这里是把F7键映射成把标记a到标记b中间的内容另存为一个文件/aaa/x 
                  # 标记(mark)的方法:把光标移动到需要标记的地方,输入m,然后输 
入标记名,例如a 
                  # 引用标记的方法:'a ,即:单引号加标记名 
:map   <f8>   :r c:/aaa/x 
                  # 译释:把F8键映射成在当前位置插入文件/aaa/x的内容 
:map   <f11>  :.w! c:/aaa/xr<CR> 
                  # 译释:.(点号)表示当前行 
                  # 所以F11就是把当前行存为/aaa/xr 
                  # 最后的<CR>表示一个回车 
:map   <f12>  :r c:/aaa/xr<CR> 
:ab php          : list of abbreviations beginning php 
                    列出php表示的缩写 
                  # 译释:定义一个缩写使用::iab hm hmisty 
                  # 一个有趣的现象是,它列出的会是php和它的前子串开头的缩写 
                  # 例如,有这么几个缩写: 
                  # h => hmisty1 , hm => hmisty2 , hmi => hmisty3, m => hmisty4 
                  # 那么使用 :ab hm会显示这么几个缩写:hm 和 h 
                  # 而不是你想象中的 hm 和 hmi 

:map ,           : list of maps beginning , 
                    列出以逗号开始的键盘映射 

# allow use of F10 for mapping (win32) 
# 允许 F10 的映射用法 (win32) 
set wak=no       : :h winaltkeys 
                    参见 :h winaltkeys 

# For use in Maps 
# 在键盘映射中常用的表示 
<CR>             : carriage Return for maps 
                       回车 
<ESC>            : Escape 
                       ESC 
<LEADER>         : normally \ 
                       转义符号 \ 
<BAR>            : | pipe 
                       管道符号 
<BACKSPACE>      : backspace 
                       退格符号 

# display RGB colour under the cursor eg #445588 
# 显示光标下数值的 RGB 颜色 
:nmap <leader>c :hi Normal guibg=#<c-r>=expand("<cword>")<cr><cr> 

---------------------------------------- 

# Using a register as a map (preload registers in .vimrc) 
:let @m=":'a,'bs/" 
:let @s=":%!sort -u" 

---------------------------------------- 
# List your Registers 
# 列出寄存器(Registers) 
:reg             : display contents of all registers 
                   显示所有寄存器的内容 
:reg a           : display content of individual registers 
                    显示 a 寄存器的内容 
"1p....          : retrieve numeric registers one by one 
:let @y='yy@"'   : pre-loading registers (put in .vimrc) 

---------------------------------------- 

# Useful tricks 
# 有用的窍门 
"ayy@a           : execute "Vim command" in a text file 
                    把当前行作为一个Vim命令来执行 
yy@"             : same thing using unnamed register 
                    同上,不过是用匿名寄存器 
u@.              : execute command JUST typed in 
                    只执行键入的命令 

---------------------------------------- 

# Get output from other commands (requires external programs) 
# 从其他程序获取输出 (需要外部程序) 
:r!ls.exe        : reads in output of ls 
                    读取ls的输出到当前位置 
!!date           : same thing (but replaces/filters current line) 
                    读取date的输出 (但是会替换当前行的内容) 
                  # 译释:其实你输入了!!后,vim就自动转换到 :.! 等待你继续输入 
# Sorting with external sort 
# 使用外部程序sort进行排序(sort是Unix标准命令,ls,date也是) 
:%!sort -u       : use an external program to filter content 
                    使用sort程序排序整个文件(用结果重写文件) 
                  # 译释:%表示整个文件的所有行 
                  # !sort表示执行外部命令sort 
                  # -u是sort的参数,man sort看看,这个参数的意义是合并相同的行 
                  # u就是unique,如果两行内容相同,则结果中只保留一行的说 
:'a,'b!sort -u   : use an external program to filter content 
                    对mark a 到mark b中间的内容进行排序 
!1} sort -u      : sorts paragraph (note normal mode!!) 
                    排序当前段落 (只能在normal模式下使用!!) 
                  # 译释:!表示使用filter,1}表示filter的对象是从当前行开始向后 
数一段 
                  # 段落指到空行处结束,不包括空行 
                  # 其实你一旦输入 !1},vim就自动计算当前段落应该到那一行(eg.+ 
5),然后生成 
                  # :.,.+5! 等待之后输入sort -u,回车,完成操作 
                  # .表示当前行,.+5当然就是当前行向后数5行 

---------------------------------------- 

# Multiple Files Management (Essential) 
# 多文档操作 (基础) 
:bn              : goto next buffer 
                    跳转到下一个buffer 
:bp              : goto previous buffer 
                    跳转到上一个buffer 
:wn              : save file and move to next (super) 
                    存盘当前文件并跳转到下一个 
:wp              : save file and move to previous 
                    存盘当前文件并跳转到上一个 
:bd              : remove file from buffer list (super) 
                    把这个文件从buffer列表中做掉 
:bun             : Buffer unload (remove window but not from list) 
                    卸掉buffer (关闭这个buffer的窗口但是不把它从列表中做掉) 
:badd file.c     : file from buffer list 
                    把文件file.c添加到buffer列表 
:b 3             : go to buffer 3 
                    跳到第3个buffer 
:b main          : go to buffer with main in name eg main.c (ultra) 
                    跳到一个名字中包含main的buffer,例如main.c 
:sav php.html    : Save current file as php.html and "move" to php.html 
                    把当前文件存为php.html并打开php.html 
:sav! %<.bak  : Save Current file to alternative extension 
                    换一个后缀保存 
:sav! %:r.cfm    : Save Current file to alternative extension 

:e!              : return to unmodified file 
                    返回到修改之前的文件(修改之后没有存盘) 
:w c:/aaa/%      : save file elsewhere 
                    把文件存到一个地儿 
:e #             : edit alternative file 
                    编辑标记为#的buffer(这个buffer必须含有一个可编辑的文件) 
                 # 用ls命令就能看到哪一个buffer有# 
                  # %a表示当前正在编辑的buffer 
                  # u 表示不能编辑或者已经被做掉的buffer 
:rew             : return to beginning of editted files list (:args) 
                    回到第一个可编辑的文件 
:brew            : buffer rewind 
                    回到第一个buffer 
:sp fred.txt     : open fred.txt into a split 
                    在一个水平分割的窗口中打开文件fred.txt # 译注:vs fred.txt可 
以实现垂直分割 
:sball,:sb       : Split all buffers (super) 
                    把当前所有含有可编辑文件的buffer显示到一个分割窗口中 
:scrollbind      : in each split window 
:map   <F5> :ls<CR>:e # : Pressing F5 lists all buffer, just type number 
                                 在normal模式下按F5键,则会显示所有含有一个 
                                 可编辑文件的buffer,然后提示你输入buffer的序号, 
                                 输入后回车,则编辑这个buffer 
:set hidden      : Allows to change buffer w/o saving current buffer 
                    允许不保存buffer而切换buffer (w/o=without) 
---------------------------------------- 
# Quick jumping between splits 
# 在分割窗口中快速切换 
:map <C-J> <C-W>j<C-W>_ 
# 这是一个键盘绑定,把Ctrl-J定义成切换到下一个窗口并最大化 
:map <C-K> <C-W>k<C-W>_ 
# 这是一个键盘绑定,把Ctrl-K定义成切换到上一个窗口并最大化 

---------------------------------------- 
# Recording (BEST TIP of ALL) 
# 命令录制 (最佳技巧) 
qq  # record to q 
       录制到q 
your complex series of commands  # 输入一系列复杂的指令 
q   # end recording 
       再次按q停止录制 
@q  # to execute 
       执行q中存储的指令 
@@  # to Repeat 
       重复执行 
5@@ # to Repeat 5 times 
       重复执行5遍 

# editing a register/recording 
# 编辑寄存器/录制 
"qp            :display contents of register q (normal mode) 
                 显示寄存器 q 的内容 (普通模式) 
<ctrl-R>q   :display contents of register q (insert mode) 
                显示寄存器 q 的内容 (插入模式) 

# you can now see recording contents, edit as required 
# 你现在可以看到记录内容,随便编辑 
"qdd           :put changed contacts back into q 
@q             :execute recording/register q 
                 执行记录/寄存器 q 

# Operating a Recording on a Visual BLOCK 
# 在可视块中运行记录 
1) define recording/register 
1) 定义记录/寄存器 
qq:s/ to/ from/g^Mq 
2) Define Visual BLOCK 
2) 定义可视块 
V} 
3) hit : and the following appears 
3) 键入 : 将显示下面信息 
:'<,'> 
4)Complete as follows 
4) 完成如下操作 
:'<,'>norm @q 
---------------------------------------- 
# Visual is the newest and usually the BEST editting mode 
# 可视模式是最新也通常是最好的编辑模式 
# Visual basics 
# 可视模式基础 
v              : enter visual mode 
                  进入可视模式 
V              : visual mode whole line 
                  整行的可视模式 
<C-V>       : enter VISUAL BLOCK mode 
                  进入可视块模式 
gv             : reselect last visual area 
                  重新选取最新的可视区域 
o              : navigate visual area 
                  浏览可视区域 
"*y            : yank visual area into paste buffer 
                  复制可视区域到剪贴板 
V%             : visualise what you match 
                  ??? 
V}J            : Join Visual block (great) 
                  连接可视块 

---------------------------------------- 

# Delete first 2 characters of 10 successive lines 
# 删除连续10行中每行的头2个字符 
0<c-v>10j2ld 

---------------------------------------- 

# how to copy a set of columns using VISUAL BLOCK 
# 如何用可视块拷贝几列 
# visual block (AKA columnwise selection) (NOT BY ordinary v command) 
# 可视块(并非通常的 v 命令) 
<C-V> then select "column(s)" with motion commands (win32 <C-Q>) 
<C-V>,然后通过移动命令选择列 (win32 <C-Q>) 
then c,d,y,r etc 
然后执行 c,d,y,r 等命令 

---------------------------------------- 
# _vimrc essentials 
# _vimrc基础 
:set incsearch : jumps to search word as you type (annoying but excellent) 
                  实时匹配你输入的内容 
:set wildignore=*.o,*.obj,*.bak,*.exe : tab complete now ignores these 
                                         tab键的自动完成现在会忽略这些 
:set shiftwidth=3                     : for shift/tabbing 
                                         自动缩进设为4个字符 
                                       # 译注:一个tab位通常是8个字符 
                                       # 所以,我们还要设定 :set tabstop=4,这 
样,所有的缩进都是4字符了 
:set vb t_vb=".                       : set silent (no beep) 
                                         沉默方式(不要叫beep!) 
:set browsedir=buffer                 : Maki GUI File Open use current directory 
                                         设置 GUI 版本文件打开时,使用当前路径 
---------------------------------------- 
# launching Win IE 
# 加载 IE 浏览器 
:nmap ,f :update<CR>:silent !start c:\progra~1\intern~1\iexplore.exe file://%:p<CR> 
:nmap ,i :update<CR>: !start c:\progra~1\intern~1\iexplore.exe <cWORD><CR> 
# 译释:nmap是做一个normal模式下的键盘绑定 
# 这里绑定了一个逗号命令 ,f 
# :update是写这个文件,与:w不同,它只有当文件被修改了的时候才写 
# :silent别让弹出窗口报告执行结果 
# !...后面就是执行windows命令了。呵呵,去问bill gates什么意思吧。 

---------------------------------------- 

# FTPing from VIM 
# 用 VIM 通过 ftp 编辑文件 
:cmap ,r  :Nread ftp://209.51.134.122/public_html/index.html 
:cmap ,w  :Nwrite ftp://209.51.134.122/public_html/index.html 
gvim ftp://209.51.134.122/public_html/index.html 
# 译注:cmap是命令(command)模式绑定 

---------------------------------------- 

# appending to registers (use CAPITAL) 
# 附加到一个register (用大写的register名字) 
"a5yy   #复制5行到a中 
10j     #下移10行 
"A5yy   #再添加5行到a中 

---------------------------------------- 

[I     : show lines matching word under cursor <cword> (super) 
          显示光标处的狭义字可以匹配的行(高级指令) 
        # 译注:# 可以全文查找与光标处的狭义字相匹配的字, 
        # 这在查找函数原型和实现,或者变量使用的时候很有用 

---------------------------------------- 

# Conventional Shifting/Indenting 
# 常规缩进 
:'a,'b>>   # 把mark a到mark b之间的内容缩进两次 

# visual shifting (builtin-repeat) 
# 在visual模式下缩进 (无限可重复) 
:vnoremap < <gv 
# 译释::vnoremap 重定义了visual模式下 < 符号的含义 
# 把它定义成 <gv 
# 即:先<向外缩进,然后gv重新选择上一次选择了的区域 
# 这样在visual模式下就可以实现连续按<而连续缩进了 
:vnoremap > >gv 
# 同里,内缩 

# Block shifting (magic) 
# 块缩进 
 >i{ 
 >a{ 
# also 
 >% and <% 
---------------------------------------- 
# Redirection & Paste register * 
# 重定向到剪贴板和从剪贴板粘贴 
:redir @*                    : redirect commands to paste buffer 
                                重定向命令的输出结果(最下方命令行上的结果) 
:redir END                   : end redirect 
                                结束重定向 
:redir >> out.txt            : redirect to a file 
                                重定向到一个文件 
# Working with Paste buffer 
# 操作剪贴板 
"*yy                         : yank to paste 
                                复制到剪贴板中 
"*p                          : insert from paste buffer 
                                从剪贴板中粘贴 
# yank to paste buffer (ex mode) 
# 拷贝到剪贴板 (ex 模式) 
:'a,'by*                     : Yank range into paste 
                                把标记a到标记b见的内容拷贝到剪贴板 
:%y*                         : Yank whole buffer into paste 
                                把整个文件拷贝到剪贴板 
# filter non-printable characters from the paste buffer 
# 从剪贴板上过滤非可打印字符 
# useful when pasting from some gui application 
# 当从一些 GUI 程序粘贴时会有用处 
:nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*p 
---------------------------------------- 
# Re-Formatting text 
# 重新格式化文本 
gq}                          : Format a paragraph 
                                格式化一个段落 
ggVGgq                       : Reformat entire file 
                                重新格式化整个文件 
Vgq                          : current line 
                                格式化当前行 
# break lines at 70 chars, if possible after a ; 
# 在70列的时候换行 
:s/.\{,69\};\s*\|.\{,69\}\s\+/&\r/g 
---------------------------------------- 
# Operate command over multiple files 
# 对多个文档实施命令 
:argdo %s/foo/bar/e          : operate on all files in :args 
                                对所有:args列表中的文档执行命令 
:bufdo %s/foo/bar/e 
:windo %s/foo/bar/e 
:argdo exe '%!sort'|w!       : include an external command 
                                使用外部命令 
:bufdo /foo/ 
---------------------------------------- 
# Command line tricks 
# 命令行上的技巧 
gvim -h                    : help 
                              启动帮助 
ls | gvim -                : edit a stream!! 
                              编辑一个数据流 
cat xx | gvim - -c "v/^\d\d\|^[3-9]/d " : filter a stream 
gvim -o file1 file2        : open into a split 
                              以分割窗口打开两个文件 

# execute one command after opening file 
# 指出打开之后执行的命令 
gvim.exe -c "/main" joe.c  : Open joe.c & jump to "main" 

# execute multiple command on a single file 
# 对一个文件执行多个命令 
vim -c "%s/ABC/DEF/ge | update" file1.c 

# execute multiple command on a group of files 
# 对一组文件执行多个命令 
vim -c "argdo %s/ABC/DEF/ge | update" *.c 

# remove blocks of text from a series of files 
# 从一组文件中删除文本块 
vim -c "argdo /begin/+1,/end/-1g/^/d | update" *.c 

# Automate editting of a file (Ex commands in convert.vim) 
# 自动编辑文件 (编辑命令序列Ex commands已经包含在convert.vim中了) 
vim -s "convert.vim" file.c 

#load VIM without .vimrc and plugins (clean VIM) 
# 不要加载.vimrc和任何plugins (启动一个干净的VIM) 
gvim -u NONE -U NONE -N 

# Access paste buffer contents (put in a script/batch file) 
# 读取剪贴板内容 (放到脚本或批处理文件中) 
gvim -c 'normal ggdG"*p' c:/aaa/xp 

# print paste contents to default printer 
# 把剪贴板内容打印到默认打印机 
gvim -c 's/^/\=@*/|hardcopy!|q!' 
---------------------------------------- 
# GVIM Difference Function (Brilliant) 
gvim -d file1 file2        : vimdiff (compare differences) 
                              vimdiff (比较不同) 
dp                         : "put" difference under cursor to other file 
                              把光标处的不同放到另一个文件 
do                         : "get" difference under cursor from other file 
                              在光标处从另一个文件取得不同 
---------------------------------------- 
# Vim traps 
# Vim陷阱 
In regular expressions you must backslash + (match 1 or more) 
In regular expressions you must backslash | (or) 
In regular expressions you must backslash ( (group) 
In regular expressions you must backslash { (count) 
# 在vim的正则表达式中, + | ( { 前都必须加转义符 \ 
/fred\+/                   : matches fred/freddy but not free 
                              匹配fred或freddy但是不匹配free 
/\(fred\)\{2,3}/           : note what you have to break 
                              ??? 
---------------------------------------- 
# \v or very magic (usually) reduces backslashing 
# \v ,或叫做very magic (通常都是这么叫)可以取消转义符 
/codes\(\n\|\s\)*where  : normal regexp 
                           普通的正则表达式 
/\vcodes(\n|\s)*where   : very magic 
---------------------------------------- 
# pulling objects onto command/search line (SUPER) 
# 把东西送到命令行/搜索行 (SUPER) 
<C-R><C-W> : pull word under the cursor into a command line or search 
                    送一个狭义词 
<C-R><C-A> : pull WORD under the cursor into a command line or search 
                    送一个广义词 
<C-R>-                  : pull small register (also insert mode) 
                             送一个小型寄存器 (插入模式下也有效) 
<C-R>[0-9a-z]           : pull named registers (also insert mode) 
                              送一个命名寄存器 (插入模式下也有效) 
<C-R>%                  : pull file name (also #) (also insert mode) 
                              送文件名过去 (#也行) (插入模式下也有效) 
---------------------------------------- 
# manipulating registers 
# 操作寄存器 
:let @a=@_              : clear register a 
                           清空寄存器a 
:let @a=""              : clear register a 
                           同上 
:let @*=@a              : copy register a to paste buffer 
                           拷贝寄存器 a 的内容到剪贴板 
map   <f11> "qyy:let @q=@q."zzz" 

---------------------------------------- 

# help for help 
# 关于帮助的帮助 
:h quickref             : VIM Quick Reference Sheet (ultra) 
                           VIM 快速参考手册 (ultra) 
:h tips                 : Vim's own Tips Help 
                           Vim自己的tips 
:h visual<C-D><tab>     : obtain  list of all visual help topics 
                                得到一个关于visual关键字的帮助列表 
                         : Then use tab to step thru them 
                        : 然后用tab键去选择 
:h ctrl<C-D>         : list help of all control keys 
                           显示所有关于Ctrl的帮助 
:helpg uganda           : Help grep 
                           显示 grep 帮助 
:h :r                   : help for :ex command 
                           :ex冒号命令 
:h CTRL-R               : normal mode 
                           普通模式命令 
:h /\r                  : what's \r in a regexp (matches a <CR>) 
                           \r在正则表达式中是什么意思呢? 
:h \\zs                 : double up backslash to find \zs in help 
:h i_CTRL-R             : help for say <C-R> in insert mode 
                           insert模式下的Ctrl-R 
:h c_CTRL-R             : help for say <C-R> in command mode 
                           命令行(command-line)模式下的Ctrl-R 
:h v_CTRL-V             : visual mode 
                           visual模式下的Ctrl-V 
:h tutor                : VIM Tutor 
                           VIM 指南 
<C-[>, <C-T>      : Move back & Forth in HELP History 
                           在帮助历史中,向前/后移动 
gvim -h                 : VIM Command Line Help 
                           关于 VIM 命令的帮助 
---------------------------------------- 
# where was an option set 
# 选项设置在哪里? 
:scriptnames            : list all plugins, _vimrcs loaded (super) 
                           列出所有加载的 plugins, _vimrcs 
:verbose set history?   : reveals value of history and where set 
                           显示history的值并指出设置文件的位置 
:function               : list functions 
                           列出所有函数 
:func SearchCompl       : List particular function 
                          列出指定的函数 

---------------------------------------- 

# making your own VIM help 
# 制作你自己的VIM帮助 
:helptags /vim/vim63/doc  : rebuild all *.txt help files in /doc 
                             重建 /doc 中所有的 *.txt 帮助文件 
:help add-local-help 

---------------------------------------- 
# running file thru an external program (eg php) 
# 用外部程序来运行程序 (例如 php) 
map   <f9>   :w<CR>:!c:/php/php.exe %<CR> 
map   <f2>   :w<CR>:!perl -c %<CR> 
---------------------------------------- 
# capturing output of current script in a separate buffer 
# 在另一个buffer中,捕捉当前脚本的输出 
:new | r!perl #                   : opens new buffer,read other buffer 
                                     新建一个buffer,从另一个buffer中读入结果 
:new! x.out | r!perl #            : same with named file 
                                    同上,并指定一个新文件名 

---------------------------------------- 

# Inserting DOS Carriage Returns 
# 插入DOS换行符 
:%s/nubian/<C-V><C-M>&/g          :  that's what you type 
:%s/nubian/<C-Q><C-M>&/g          :  for Win32 
                                            对于Win32应该这样 
dn_t...@yahoo.ca 
:%s/nubian/^M&/g                  :  what you'll see where ^M is ONE character 
                                      你看到的^M是一个字符 
:%s/nubian/\r&/g                  :  better 
                                      更好的形式 

---------------------------------------- 

# automatically delete trailing Dos-returns,whitespace 
# 自动删除行尾 Dos回车符和空格 
autocmd BufRead * silent! %s/[\r \t]\+$// 
autocmd BufEnter *.php :%s/[ \t\r]\+$//e 
---------------------------------------- 
# perform an action on a particular file or file type 
# 对指定文件或文件类型执行某个动作 
autocmd VimEnter c:/intranet/note011.txt normal! ggVGg? 
autocmd FileType *.pl exec('set fileformats=unix') 
---------------------------------------- 
# Retrieving last command line command for copy & pasting into text 
# 把最后一个命令贴到当前位置 
i<c-r>: 
# Retrieving last Search Command for copy & pasting into text 
# 把最后一个搜索指令贴到当前位置 
i<c-r>/ 
# 译释:i是进入insert模式, 
# Ctrl-r是开启插入模式下register的引用 
# :和/分别引用了两个register的内容 
---------------------------------------- 
# more completions 
# 更多的完成功能 
<C-X><C-F>     :insert name of a file in current directory 
                      插入当前目录下的一个文件名到当前位置 
# 在insert模式下使用 
# 然后用 Ctrl-P/Ctrl-N 翻页 

---------------------------------------- 

# Substituting a Visual area 
# 替换一个visual区域 
# select visual area as usual (:h visual) then type :s/Emacs/Vim/ etc 
# 选择一个区域,然后输入 :s/Emacs/Vim/ 等等,vim会自动进入:模式 
:'<,'>s/Emacs/Vim/g               : REMEMBER you dont type the '<.'> 
                                        前面的'<,'>是vim自动添加的 
gv                                : Re-select the previous visual area (ULTRA) 
                                     重新选择前一个可视区域 (ULTRA) 
---------------------------------------- 
# inserting line number into file 
# 在文件中插入行号 
:g/^/exec "s/^/".strpart(line(".")."    ", 0, 4) 
:%s/^/\=strpart(line(".")."     ", 0, 5) 
:%s/^/\=line('.'). ' ' 
---------------------------------------- 
#numbering lines VIM way 
# 用VIM的方式来编号行 
:set number                       : show line numbers 
                                     显示行号 
:map <F12> :set number!<CR>       : Show linenumbers flip-flop 
:%s/^/\=strpart(line('.')."        ",0,&ts) 

#numbering lines (need Perl on PC) starting from arbitrary number 
#从任意行开始编号(需要perl) 
:'a,'b!perl -pne 'BEGIN{$a=223} substr($_,2,0)=$a++' 

# Produce a list of numbers 
# 产生数字列表 
#Type in number on line say 223 in an empty file 
qqmnYP`n^Aq                       : in recording q repeat with @q 
# increment existing numbers to end of file (type <c-a> as 5 characters) 
# 递增已存在数字到文件末 
:.,$g/^\d/exe "normal! \<c-a>" 
# advanced incrementing 
# 高级递增,参见: 
http://vim.sourceforge.net/tip_view.php?tip_id=150 
---------------------------------------- 
# advanced incrementing (really useful) 
# 高级递增 (真的很有用) 
" put following in _vimrc 
" 把下面几句放到 _vimrc #vimrc脚本用 " 做行注释符 
let g:I=0 
function! INC(increment) 
let g:I =g:I + a:increment 
return g:I 
endfunction 
" eg create list starting from 223 incrementing by 5 between markers a,b 
" 例如从mark a 到mark b 递增,从223开始,步长为5 
:let I=223 
:'a,'bs/^/\=INC(5)/ 
" create a map for INC 
cab viminc :let I=223 \| 'a,'bs/$/\=INC(5)/ 
---------------------------------------- 
# editing/moving within current insert (Really useful) 
# 在当前插入模式下编辑/移动 (真得很有用) 
<C-U>                             : delete all entered 
                                        删除全部 
<C-W>                             : delete last word 
                                        删除最后一个单词 
<HOME><END>                       : beginning/end of line 
                                           移动到行首/行尾 
<C-LEFTARROW><C-RIGHTARROW>       : jump one word backwards/forwards 
                                           向前/后移动一个单词 
<C-X><C-E>,<C-X><C-Y>             : scroll while staying put in insert 
---------------------------------------- 
#encryption (use with care: DON'T FORGET your KEY) 
# 加密(小心使用,不要忘了密码) 
:X                                : you will be prompted for a key 
                                     vim会提示你输入密码 
:h :X 
---------------------------------------- 
# modeline (make a file readonly etc) must be in first/last 5 lines 
# 模式行 (使文件只读等),必须在前/后 5行内 
// vim:noai:ts=2:sw=4:readonly: 
# vim:ft=html:                    : says use HTML Syntax highlighting 
                                     使用 HTML 语法高亮 
:h modeline 
---------------------------------------- 
# Creating your own GUI Toolbar entry 
# 建立你自己的菜单项 
amenu  Modeline.Insert\ a\ VIM\ modeline <Esc><Esc>ggOvim:ff=unix ts=4 
ss=4<CR>vim60:fdm=marker<esc>gg 

---------------------------------------- 

# A function to save word under cursor to a file 
# 一个保存当前光标下的狭义字到一个文件的函数 
function! SaveWord() 
    normal yiw 
    exe ':!echo '.@0.' >> word.txt' 
endfunction 
map ,p :call SaveWord() 

---------------------------------------- 

# function to delete duplicate lines 
# 删除重复行的函数 
function! Del() 
  if getline(".") == getline(line(".") - 1) 
    norm dd 
  endif 
endfunction 

:g/^/ call Del()  #使用该函数的一个例子 

---------------------------------------- 

# Digraphs (non alpha-numerics) 
# 双字节编码 (non alpha-numerics) 
:digraphs                         : display table 
                                     显示编码表 
:h dig                            : help 
                                     帮助 
i<C-K>e'                          : enters 
                                        输入 é 
i<C-V>233                         : enters (Unix) 
                                       输入 é (Unix) 
i<C-Q>233                         : enters (Win32) 
                                        输入 é (Win32) 
ga                                : View hex value of any character 
                                     查看字符的hex值 

# Deleting non-ascii characters (some invisible) 
# 删除非 ascii 字符 
:%s/[<C-V>128-<C-V>255]//gi       : where you have to type the Control-V 
:%s/[€- ]//gi                     : Should see a black square & a dotted y 
:%s/[<C-V>128-<C-V>255<C-V>01-<C-V>31]//gi : All pesky non-asciis 
:exec "norm /[\x00-\x1f\x80-\xff]/"        : same thing 
#Pull a non-ascii character onto search bar 
yl/<C-R>"                         : 
---------------------------------------- 
# All file completions grouped (for example main_c.c) 
# 文件名自动完成 (例如 main_c.c) 
:e main_<tab>                     : tab completes 
                                        tab 键完成 
gf                                : open file under cursor  (normal) 
                                     打开光标处广义字命名的文件 (normal模式) 
main_<C-X><C-F>                   : include NAME of file in text (insert mode) 
                                           文件名自动完成(insert模式) 
---------------------------------------- 
# Complex Vim 
# Vim复杂使用 
# swap two words 
# 交换两个单词 
:%s/\<\(on\|off\)\>/\=strpart("offon", 3 * ("off" == submatch(0)), 3)/g 
# swap two words 
# 交换两个单词 
:vnoremap <C-X> <Esc>`.``gvP``P 
---------------------------------------- 
# Convert Text File to HTML 
# 把text文件转换成html文件(oh,ft) 
:runtime! syntax/2html.vim        : convert txt to html 
                                    转换 txt 成 html 
:h 2html 
---------------------------------------- 
# VIM has internal grep 
# VIM 有一个内部自带的 grep 命令 
:grep some_keyword *.c            : get list of all c-files containing keyword 
                                     得到一个包含some_keyword的c文件名列表 
:cn                               : go to next occurrence 
                                     去下一个出现的位置 
---------------------------------------- 
# Force Syntax coloring for a file that has no extension .pl 
# 强制无扩展名的文件的语法着色方式 
:set syntax=perl 
# Remove syntax coloring (useful for all sorts of reasons) 
# 取消语法着色 (很有用) 
:set syntax off 
# change coloring scheme (any file in ~vim/vim??/colors) 
# 改变色彩主题 (在~vim/vim??/colors中的任何文件) 
:colorscheme blue 
# Force HTML Syntax highlighting by using a modeline 
# 通过使用模式行强迫使用 HTML 语法高亮 
# vim:ft=html: 
---------------------------------------- 
:set noma (non modifiable)        : Prevents modifications 
                                     防止修改 
:set ro (Read Only)               : Protect a file from unintentional writes 
                                     只读保护 
---------------------------------------- 
# Sessions (Open a set of files) 
# 对话 (打开一堆文件) 
gvim file1.c file2.c lib/lib.h lib/lib2.h : load files for "session" 
                                            在"对话"中加载这些文件 
:mksession                        : Make a Session file (default Session.vim) 
                                     生成一个Session文件 (默认是Session.vim) 
:q 
gvim -S Session.vim               : Reload all files 
                                     重新加载所有文件 
---------------------------------------- 
# tags (jumping to subroutines/functions) 
# 标记(tags) (跳转到子程序/函数) 
taglist.vim                       : popular plugin 
                                     很流行的插件 
:Tlist                            : display Tags (list of functions) 
                                     显示标记 (函数列表) 
<C-]>                             : jump to function under cursor 
                                        跳转到光标处的函数 
---------------------------------------- 
# columnise a csv file for display only as may crop wide columns 
:let width = 20 
:let fill=' ' | while strlen(fill) < width | let fill=fill.fill | endwhile 
:%s/\([^;]*\);\=/\=strpart(submatch(1).fill, 0, width)/ge 
:%s/\s\+$//ge 
# Highlight a particular csv column (put in .vimrc) 
function! CSVH(x) 
     execute 'match Keyword /^\([^,]*,\)\{'.a:x.'}\zs[^,]*/' 
     execute 'normal ^'.a:x.'f,' 
endfunction 
command! -nargs=1 Csv :call CSVH(<args>) 
# call with 
:Csv 5                             : highlight fith column 
---------------------------------------- 
# folding : hide sections to allow easier comparisons 
# 折叠:隐藏某些片断,是查看更容易 
zf}                               : fold paragraph using motion 
                                     使用动作命令折叠一个段落 
v}zf                              : fold paragraph using visual 
                                     使用可视模式折叠一个段落 
zf'a                              : fold to mark 
                                     折叠到一个标记上 
zo                                : open fold 
                                     打开折叠 
zc                                : re-close fold 
                                     重新关闭折叠 
---------------------------------------- 
# displaying "invisible characters" 
# 显示"不可见字符" 
:set list 
:h listchars 
---------------------------------------- 
# How to paste "normal commands" w/o entering insert mode 
# 如何在不进入插入模式的情况下粘贴"普通模式的命令" 
:norm qqy$jq 
---------------------------------------- 
# manipulating file names 
# 处理文件名 
:h filename-modifiers             : help 
                                     帮助 
:w %                              : write to current file name 
                                     写入当前文件 
:w %:r.cfm                        : change file extention to .cfm 
                                     改变文件扩展名为 .cfm 
:!echo %:p                        : full path & file name 
                                     显示完整路径和文件名 
:!echo %:p:h                      : full path only 
                                     只显示完整路径 
<C-R>%                            : insert filename (insert mode) 
                                        插入文件名 (插入模式) 
"%p                               : insert filename (normal mode) 
                                    插入文件名 (普通模式) 
/<C-R>%                           : Search for file name in text 
                                        在文本中查找文件名 
---------------------------------------- 
# delete without destroying default buffer contents 
# 删除,但不破坏 buffer 内容 
"_d                               : what you've ALWAYS wanted 
                                     你一直想要的东西 
"_dw                              : eg delete word (use blackhole) 
                                     例如:删除一个单词 (使用黑洞???) 
---------------------------------------- 
# pull full path name into paste buffer for attachment to email etc 
# 送完整的路径名到剪贴板,用于邮件附件等 
nnoremap <F2> :let @*=expand("%:p")<cr> :unix 
nnoremap <F2> :let @*=substitute(expand("%:p"), "/", "\\", "g")<cr> :win32 
---------------------------------------- 
# Simple Shell script to rename files w/o leaving vim 
# 不用离开 Vim 就能修改文件名的简单 shell 脚本 
$ vim 
:r! ls *.c 
:%s/\(.*\).c/mv & \1.bla 
:w !sh 
:q! 
---------------------------------------- 
# count words in a text file 
# 在一个文本里计算单词数 
g<C-G> 
---------------------------------------- 
# example of setting your own highlighting 
# 你自己设置高亮显示的例子 
:syn match DoubleSpace "  " 
:hi def DoubleSpace guibg=#e0e0e0 
---------------------------------------- 
# Programming keys depending on file type 
# 根据文件类型映射快捷键 
:autocmd bufenter *.tex map <F1> :!latex %<CR> 
:autocmd bufenter *.tex map <F2> :!xdvi -hush %<.dvi&<CR> 
---------------------------------------- 
# reading Ms-Word documents, requires antiword 
# 读取 MS-Word 文档,需要 antiword 
:autocmd BufReadPre *.doc set ro 
:autocmd BufReadPre *.doc set hlsearch! 
:autocmd BufReadPost *.doc %!antiword "%" 
---------------------------------------- 
# Just Another Vim Hacker JAVH 
vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?" 
# 译释:呵呵,谁来解释一下吧! 
# 其实不过是在启动vim的时候执行了一个命令 
# 先写入了 Just Another Vim Hacker 的rot13编码 
# 然后再解码 
---------------------------------------- 
__END__ 

原创粉丝点击