vim使用技巧

来源:互联网 发布:淘宝小二介入买家失败 编辑:程序博客网 时间:2024/05/17 07:06

  1 ;:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2 ;:文档来源: http://www.rayninfo.co.uk/vimtips.html                              
  3 ;:翻译参考: 没有记,请原作者见谅                                                
  4 ;:文档日期: 2006-10-13 11:19:04                                                 
  5 ;:更新记录:                                                                     
  6 ;:作  者: li3                                                                 
  7 ;:生成工具: 2Html.vim                                                           
  8 ;:blog.asp?name=li3                                         
  9 ;:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 10 
 11 ;:--------------------------------------------------------------------------------
 12 ;:如果你使用的是MS-Windows,可能有的键已经被定义为Windows中的一些默认功能键。如果不
 13 ;:想这样,请编辑$VIM/mswin.vim
 14 ;:--------------------------------------------------------------------------------
 15 /joe/e                              ;: 设置光标到匹配"joe"的末尾
 16 /joe/e+1                            ;: 设置光标到匹配"joe"的末尾再后移一位
 17 /joe/s-2                            ;: 设置光标到匹配"joe“的开头再前移两位
 18 /joe/+3                             ;: 搜索“joe” 找到后将光标下移3行
 19 /^joe.*fred.*bill/                  ;: 匹配以'j'开头且"joe"到"fred"到"bill"之间至少有一个字符
 20 /^[A-J]/+/                          ;: 搜索行首非'A'到’J‘重复一次以上的行
 21 /begin/_.*end                       ;: 多行匹配
 22 /fred/_s*joe/i                      ;: 多行搜索可以是任何空白字符包括/n,/t等等
 23 /fred/|joe                          ;: 搜索fred或者joe
 24 /.*fred/&.*joe                      ;: 搜索同时包括fred跟joe的行
 25 //<fred/>/i                         ;: 搜索独立的单词fred
 26 //</d/d/d/d/>                       ;: 搜索独立的4位数字
 27 //D/d/d/d/d/D                       ;: 搜索恰好4位的数字
 28 //</d/{4}/>                         ;: 同//</d/d/d/d/>
 29 //([^0-9]/|^/)%.*%                  ;: 查找以非0~9数字或在行首的%%所包括的内容 
 30 ;:" 查找空行
 31 /^/n/{3}                            ;: 匹配三连续的空行
 32 ;:" 使用正则表达式组查找
 33 //(fred/).*/(joe/).*/2.*/1
 34 ;:" 正则表达式重复
 35 /^/([^,]*,/)/{8}
 36 ;:" visual 下搜索 
 37 :vmap // y/<C-R>"<CR>               ;: visually模式下的键盘映射,把//映射成匹配当前选中的文本
 38 :vmap <silent> // y/<C-R>=escape(@",'///.*$^~[]')<CR><CR>          ;: 包括空白字符
 39 ;:" /zs 和 /ze 匹配原 :h //zs
 40 /</zs[^>]*/ze>                      ;: 匹配<与>所包含的内容
 41 ;:" 零宽度匹配 :h //@=
 42 /</@<=[^>]*>/@=                     ;: 查找<与>所包含的内容
 43 /</@<=/_[^>]*>/@=                   ;: 多行匹配<与>所包含的内容
 44 ;:" 多行查找 /_ 的意思是包括换行符
 45 /<!--/_p/{-}-->                     ;: 匹配<与>所包含的所有内容
 46 /fred/_s*joe/i                      ;: 匹配fred开始到joe,之间一定得是空白字符
 47 /bugs/(/_./)*bunny                  ;: 匹配所有bugs到bunny的字符串
 48 :h /_                               ;: help
 49 ;:" 查找函数声明,nmap为normal模式下的键盘映射
 50 :nmap gx yiw/^/(sub/<bar>function/)/s/+<C-R>"<CR>
 51 ;:" 查找多个文件
 52 :bufdo /searchstr/                  ;: 在多个文件缓冲区里执行查找
 53 ;:" 更好的多文件查找定位方法
 54 :bufdo %s/searchstr/&/gic           ;: 在多个文件缓冲区里查找,按下n停止
 55 ;:" 怎样不使用 /来查找网址
 56 ?http://www.vim.org/                ;: 向后查找
 57 ;:" 查找指定字符以外的字符串
 58 //c/v([^aeiou]&/a){4}               ;: 查找4个辅音字母
 59 ;:-----------------------------------------------------------------------------
 60 ;:#替换
 61 :%s/fred/joe/igc                    ;: 普通替换命令
 62 :%s//r//g                           ;: 删除 DOS 的换行符 ^M
 63 ;:" 你的文本文件是否乱七八糟的排成一行?使用如下命令
 64 :%s//r//r/g                         ;: 转换 DOS 回车符 ^M 为真正的回车符
 65 :%s= *$==                           ;: 删除行尾空白
 66 :%s= /+$==                          ;: 同上
 67 :%s#/s*/r/?$##                      ;: 删除尾部空白和dos换行符
 68 :%s#/s*/r*$##                       ;: 同上
 69 ;:" 删除空行
 70 :%s/^/n/{3}//                       ;: 删除连续3个空行
 71 :%s/^/n/+//r/                       ;: 压缩空行,多个替换为一个
 72 :%s#<[^>]/+>##g                      ;: 删除html的tag部分
 73 :%s#</_./{-1,}>##g                  ;: 多行删除 html 的tags (非贪婪方式)
 74 ;:" IF YOU ONLY WANT TO KNOW ONE THING
 75 :'a,'bg/fred/s/dick/joe/igc         ;: 非常有用 
 76                                     ;# 译释:''a,''b指定一个范围:mark a ~ mark b
 77                                     ;# g//用一个正则表达式指出了进行操作的行必须可以被fred匹配
 78                                     ;# 看后面,g//是一个全局显示命令
 79                                     ;# s/dick/joe/igc则对于这些满足条件的行进行替换
 80 ;:" 复制列
 81 :%s= [^ ]/+$=&&=                    ;: 复制最后一列
 82 :%s= /f/+$=&&=                      ;: 复制最后一列
 83 :%s= /S/+$=&&                       ;: 复制最后一列
 84 ;:" 记忆(反向引用)
 85 :s//(.*/):/(.*/)//2: /1/            ;: 将两个字段颠倒
 86 :%s/^/(.*/)/n/1$//1/                ;: 删除重复行
 87 ;:" 非贪婪匹配 /{-}
 88 :%s/^./{-}pdf/new.pdf/              ;: 删除第一个pdf
 89 ;:" use of optional atom /?
 90 :%s#/<[zy]/?tbl_[a-z_]/+/>#/L&#gc   ;: lowercase with optional leading characters
 91 ;:" 跨越尽量多的行
 92 :%s/<!--/_./{-}-->//                ;: 删除多行注释
 93 :help //{-}                         ;: 查看非贪婪匹配的更多帮助
 94 ;:" 使用寄存器替换
 95 :s/fred/<c-r>a/g                    ;: 将fred替换为寄存器a里的内容 #<c-r>为按下Ctrl与r
 96 :s/fred/<c-r>asome_text<c-r>s/g
 97 :s/fred//=@a/g                      ;: 比较好的办法,不显示替换内容 
 98 ;:" 在一行里写多种命令
 99 :%s//f/+/.gif/>//r&/r/g | v//.gif$/d| %s/gif/jpg/
100 :%s/a/but/gie|:update|:next         ;: 当使用 @: 来重复
101 ;:" 或运算
102 :%s/suck/|buck/loopy/gc             ;: 替换suck或者buck(这里|不是管道)
103 ;:" 调用vim函数
104 :s/__date__//=strftime("%c")/       ;: 将__date__替换成当前日期,使用strftime函数
105 ;:" 处理列,替换所有在第三列中的str1
106 :%s:/(/(/w/+/s/+/)/{2}/)str1:/1str2:
107 ;:" 交换第一列跟第四列
108 :%s:/(/w/+/)/(.*/s/+/)/(/w/+/)$:/3/2/1:
109 ;:" 过滤form中的内容放在寄存器里
110 :redir @*|sil exec 'g#</(input/|select/|textarea/|//=form/)/>#p'|redir END
111 :nmap ,z :redir @*<Bar>sil exec 'g@</(input/<Bar>select/<Bar>textarea/<Bar>//=form/)/>@p'<Bar>redir END<CR>
112 ;:" 两位以上的数字减三(带进位。这个命令挺有趣)
113 :%s//d/+//=(submatch(0)-3)/
114 ;:" 包含loc或者functions的行中的数字加6
115 :g/loc/|function/s//d//=submatch(0)+6/
116 ;:" 比上面更好的方法
117 :%s#txtdev/zs/d#/=submatch(0)+1#g
118 :h //zs                            ;查看帮助
119 ;:" 前缀为gg的数字加6
120 :%s//(gg/)/@<=/d/+//=submatch(0)+6/
121 :h zero-width                      ;查看帮助
122 ;:" 替换一个特定字符串为数字
123 :let i=10 | 'a,'bg/Abc/s/yy//=i/ |let i=i+1 ;# 将yy转换成10,11,12等等
124 ;:" 比上面的更精确
125 :let i=10 | 'a,'bg/Abc/s/xx/zsyy/ze//=i/ |let i=i+1 # 将xxyy 转换成 xx11,xx12,xx13
126 ;:" 将查找内容放入内存,然后用/zs进行简单替换 
127 :%s/"/([^.]/+/).*/zsxx//1/
128 ;:" 将xx替换为此行内容 
129 :nmap <leader>z :%s#/<<c-r>=expand("<cword>")<cr>/>#
130 ;:" 将Vis选中的内容用<>括起来 
131 :vmap <leader>z :<C-U>%s//<<c-r>*/>/
132 ;:-----------------------------------------------------------------------------
133 ;:" 下面举一些在替换中使用替换的例子 
134 ;:" 多种分符可以被用在替换中 
135 :%s,/(all/.*/)/@<=/,_,g             ;: 用 _ 替换 "all/"之后的 /  
136 ;:" 同样的功能 
137 :s#all//zs.*#/=substitute(submatch(0), '/', '_', 'g')#
138 :s#all/#&^M#|s#/#_#g|-j!            ;" 查找断行,并合并为一行
139 ;:" 在替换命令中使用替换 
140 :%s/.*//='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/
141 ;:-----------------------------------------------------------------------------
142 ;:" 全局显示命令 
143 :g/gladiolli/#                      ;: 查找并显示匹配的行号
144 :g/fred.*joe.*dick/                 ;: 显示所有含有 fred,joe & dick的行
145 :g//<fred/>/                        ;: 显示单一单词fred
146 :g/^/s*$/d                          ;: 删除所有空行
147 :g!/^dd/d                           ;: 删除不含字符串''dd''的行
148 :v/^dd/d                            ;: 同上
149 :g/fred/,/joe/d                     ;: 删除所有的从fred到joe
150 :g/-------/.-10,.d                  ;: 以-------为标记删除之前的10行
151 :g/{/ ,/}/- s//n/+//r/g             ;: 删除 {...}之间的空行
152 :v//S/d                             ;: 删除空行 
153 :v/./,/./-j                         ;: 压缩空行
154 :g/^$/,/./-j                        ;: 同上
155 :g/<input/|<form/p                  ;: 或运算
156 :g/^/put_                           ;: 双倍行宽 (pu = put)
157 :g/^/m0                             ;: 颠倒文件 (m = move)
158 :'a,'bg/^/m'b                       ;: 颠倒选中的 a 到 b
159 :g/^/t.                             ;: 重复行
160 :g/fred/t$                          ;: 拷贝行从fred到结尾
161 :g/stage/t'a                        ;: 拷贝行从stage 到 marker a(a为标记的位置)
162 :g//(^I[^^I]*/)/{80}/d              ;: 删除最少包含80个tab的行
163 ;:" 隔行替换 
164 :g/^/ if line('.')%2|s/^/zz /
165 ;:" 查找标记a与b 间所有包含 "somestr" 
166 ;:" 复制所有"otherstr"后的行 
167 :'a,'bg/somestr/co/otherstr/        ;: co(py) or mo(ve)
168 :'a,'bg/str1/s/str1/&&&/|mo/str2/   ;" 范围同上,进行替换
169 :%norm jdd                          ;: 隔行删除
170 ;:" 增加数字 (键入 <c-a>)            ;#在MS-Windows中<c-a>已经被定义为全选
171 :.,$g/^/d/exe "norm! /<c-a>"        ;: 增加从当前行首到结尾的数字
172 :'a,'bg//d/+/norm! ^A               ;: 增加数字
173 ;:" 保存全局命令的结果 (注意必须使用添加模式) 你需要使用 qaq 清空寄存器a. 
174 ;:"save results to a register/paste buffer 存储结果到 寄存器/粘贴 到 a
175 :g/fred/y A                         ;: 添加配备行到寄存器到 a
176 :g/fred/y A | :let @*=@a            ;: 放入复制缓冲区
177 :let @a=''|g/Barratt/y A |:let @*=@a
178 :'a,'b g/^Error/ . w >> errors.txt  ;" 将查找内容放入一个文件 (文件必须存在)
179 ;:" 复制每一行,然后在复制出来的每一行两侧加上一个 print '复制出来的内容'
180 :g/./yank|put|-1s/'/"/g|s/.*/Print '&'/
181 ;:" 用文件中的内容替换字符串,-d 表示删除“标记”
182 :g/^MARK$/r tmp.ex | -d
183 ;:" 精致的显示方法 
184 :g/<pattern>/z#.5                   ;: 带行号显示  
185 :g/<pattern>/z#.5|echo "==========" ;: 漂亮的显示  
186 ;:" 用 g// 执行正常命令
187 :g/|/norm 2f|r*                     ;: 替换第二个|为* 
188 ;:" 在新窗口中显示查找结果
189 :nmap <F3> :redir @a<CR>:g//<CR>:redir END<CR>:new<CR>:put! a<CR><CR>
190 ;:-----------------------------------------------------------------------------
191 ;:" 全局命令和替换命令联姻 (强大的编辑能力)
192 :'a,'bg/fred/s/joe/susan/gic        ;: 可以使用反向引用来匹配
193 :g/fred/,/joe/s/fred/joe/gic        ;: 非行模式 
194 ;:-----------------------------------------------------------------------------
195 ;:" 先找fred,然后找joe
196 :/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
197 ;:-----------------------------------------------------------------------------
198 ;:" create a new file for each line offile eg 1.txt,2.txt,3,txt etc
199 ;:" 将每一行的内容存成一个文件,文件名为 行号.txt  如 1.txt,2.txt 等
200 :g/^/exe ".w ".line(".").".txt"
201 ;:-----------------------------------------------------------------------------
202 ;:" 绝对精华 
203 ;:-----------------------------------------------------------------------------
204 * # g* g#                           ;: 查找当前光标下的单词(单个单词) (<cword>) (向前/向后)
205 %                                   ;: 匹配括号 {}[]()
206 .                                   ;: 重复上次操作 
207 @:                                  ;: 重复上次的命令
208 matchit.vim                         ;: 适%能匹配 <script> <?php等标记
209 <C-N><C-P>                          ;: 插入模式下自动完成填词
210 <C-X><C-L>                          ;: 行自动完成(超级有用)
211 /<C-R><C-W>                         ;: 把单个<cword>单词放入搜索或者命令行
212 /<C-R><C-A>                         ;: 把字符串中有的单词<CWORD>放入搜索或者命令行
213 :set ignorecase                     ;: 忽略大小写
214 :syntax on                          ;: 打开语法高亮 Perl,HTML,PHP 等等
215 :h regexp<C-D>                      ;: 按ctrl+d得到包含regexp的列表
216                                     ;:  (按tab自动不齐)
217 ;:-----------------------------------------------------------------------------
218 ;:" 简单编辑更新 _vimrc文件
219 :nmap ,s :source $VIM/_vimrc        ;:普通模式下的键盘映射 ,s映射成加载用户目录下的_vimrc文件
220 :nmap ,v :e $VIM/_vimrc             ;:,v映射成打开_vimrc文件
221 ;:-----------------------------------------------------------------------------
222 ;:#VISUAL 模式 (方便增加 HTML 标签)
223 :vmap sb "zdi<C-R>z<ESC>            ;: 在 VISUALLY模式下将选中的文本前后分别加上
224 :vmap st "zdi<?= <C-R>z ?><ESC>     ;: 加上 <?= ?>
225 ;:-----------------------------------------------------------------------------
226 ;:"vim 7 tabs 
227 vim -p fred.php joe.php             ;: 在新tab中打开文件 
228 :tabe fred.php                      ;: 在新tab中打开 fred.php
229 :tab ball                           ;: 每一个文件一个tab 
230 ;:" vim 7  .vimrc 配置使用tabs 
231 :nnoremap gf <C-W>gf
232 :cab      e  tabe
233 
234 ;:-----------------------------------------------------------------------------
235 ;:" 浏览
236 :e .                                ;: 文件浏览器 
237 :Exp(lore)                          ;: 浏览文件
238 :Sex(plore)                         ;: 分割窗口浏览文件
239 :browse e                           ;: 打开windows 的 ‘选择文件’对话
240 :ls                                 ;: 显示缓冲区
241 :cd ..                              ;: 设置当前目录位置
242 :args                               ;: 查看当前打开的所有文件
243 :args *.php                         ;: 打开所有 *.php文件 
244 :lcd %:p:h                          ;: 改变路径到当前编辑的文件
245 :autocmd BufEnter * lcd %:p:h       ;: 放入.vimrc自动完成上面的命令
246 ;:-----------------------------------------------------------------------------
247 ;:" 缓冲区浏览(一直排名前10的vim脚本)
248 ;:" 需要 bufexplorer.vim http://www.vim.org/script.php?script_id=42
249 /be                                 ;: 缓冲浏览器中查看缓冲列表
250 /bs                                 ;: 同上,但是分割窗口
251 ;:-----------------------------------------------------------------------------
252 ;:" 转换大小写
253 guu                                 ;: 将正行的字母转换成小写
254 gUU                                 ;: 将正行的字母转换成大写
255 Vu                                  ;: 转换选中的行(小写)
256 VU                                  ;: 转换选中的行(大写)
257 g~~                                 ;: 反向转换
258 vEU                                 ;: 转换词大写
259 vE~                                 ;: 反向转换词
260 ggguG                               ;: 将当前编辑文件内容全部转换成小写
261 ;:" Visually 模式下选择所有的字母及数字 (放入 .vimrc文件中)
262 vmap ,c :s//</(./)/(/k*/)/>//u/1/L/2/g<CR>
263 :%s/[.!?]/_s/+/a//U&/E/g            ;:" 大写所有句子的第一个字母
264 ;:-----------------------------------------------------------------------------
265 gf                                  ;: 打开当前光标下或后的文件
266 :nnoremap gF :view <cfile><cr>      ;: 打开当前光标下或后的文件, 如果不存在则创建
267 ga                                  ;: 显示当前光标下单个字的ascii,十进制,十六进制……
268 ggVGg?                              ;: 将整个文件用rot13编码……(谁看得懂啊~~hoho)
269 ggg?G                               ;: 同上 (针对大文件)
270 :8 | normal VGg?                    ;: 将第八行用rot13编码 
271 :normal 10GVGg?                     ;: 同上
272 <C-A>,<C-X>                         ;: 增加,减少当前光标下的数字
273                                     ;: win32 用户需要重定义 CNTRL-A
274 <C-R>=5*5                           ;: 插入25 (小型计算器)
275 ;:-----------------------------------------------------------------------------
276 ;:" 几个彩蛋……
277 :h 42                               ;: also http://www.google.com/search?q=42
278 :h holy-grail
279 :h!
280 ;:-----------------------------------------------------------------------------
281 ;:" 标记 & 移动
282 '.                                  ;: 跳回最后编辑的行 (超有用)
283 `.                                  ;: 同上,但是定位编辑点
284 g;                                  ;: 跳转到比较旧的编辑位置(如果有的话) (vim6.3后的新功能)
285 g,                                  ;: 这个是较心的位置 (同上)
286 :changes :打出改变表
287 :h changelist                       ;: 查看“改变表跳转”的帮助
288 <C-O>                               ;: 依次沿着你的跳转记录向回跳 (从最近的一次开始)
289 <C-I>                               ;: 依次沿着你的跳转记录向前跳
290 :ju(mps)                            ;: 列出跳转轨迹
291 :help jump-motions
292 :history                            ;: 列出历史记录
293 :his c                              ;: 命令行历史
294 :his s                              ;: 搜索历史
295 q/                                  ;: 搜索命令历史的窗口
296 q:                                  ;: 命令行命令历史的窗口
297 :<C-F>                              ;: 历史窗口
298 ;:-----------------------------------------------------------------------------
299 ;:" 缩写 & 映射
300 :map <f7> :'a,'bw! c:/aaa/x
301 :map <f8> :r c:/aaa/x
302 :map <f11> :.w! c:/aaa/xr<CR>
303 :map <f12> :r c:/aaa/xr<CR>
304 :ab php                             ;: 查看以php开头的缩写
305 :map ,                              ;: 列出所有的映射(以逗号开始的)
306 ;:" 允许映射 F10 (win32)
307 set wak=no                          ;: :h winaltkeys
308 ;:" 映射中常使用的表示
309 <CR>                                ;: 回车
310 <ESC>                               ;: Esc
311 <LEADER>                            ;: 右斜杠
312 <BAR>                               ;: 管道符号
313 <BACKSPACE>                         ;: 退格键
314 <SILENT>                            ;: 不回显
315 #显示自定义的 RGB 颜色显示当前光标下的字符串 例如 #445588
316 :nmap <leader>c :hi Normal guibg=#<c-r>=expand("<cword>")<cr><cr>
317 :map <f2> /price only//|versus/     :在map中需要用反斜线 /
318 ;:-----------------------------------------------------------------------------
319 ;:" 简单的 PHP 调试将所有显示的变量放入寄存器a
320 iab phpdb exit("<hr>Debug <C-R>a ");
321 ;:-----------------------------------------------------------------------------
322 ;:" 使用寄存器来映射 (放入 .vimrc文件自动加载)
323 :let @m=":'a,'bs/"
324 :let @s=":%!sort -u"
325 ;:-----------------------------------------------------------------------------
326 ;:" 列出寄存器
327 :reg                                ;: 显示当前所有的寄存器
328 :reg a                              ;: 显示寄存器a中的内容
329 ;:"1p....                             ;: 引用一个叫1的寄存器
330 :let @y='yy@"'                      ;: pre-loading registers (put in .vimrc)
331 qqq                                 ;: 清空寄存器 "q"
332 ;:-----------------------------------------------------------------------------
333 ;:" 一些有用的决窍
334 ;:"ayy@a                              ;: 把当前行作为命令执行
335 yy@"                                ;: 上面的匿名寄存器
336 u@.                                 ;: 只执行键入的命令
337 ;:-----------------------------------------------------------------------------
338 ;:" 从其它命令处获得输入(需要外部命令)
339 :r!ls.exe                           ;: 从ls 获得输入插入到当前位置
340 !!date                              ;: 从date获得输入(删除当前行)
341 ;:" 使用外部sort排序
342 :%!sort -u                          ;: 用sort排序整个文件(结果覆盖整个文件)
343 :'a,'b!sort -u                      ;: 从mark a到mark b之间的内容进行排序
344 !1} sort -u                         ;: 排序一个段落
345 :g/^$/;,/^$/-1!sort                 ;: 排序一个选中内容 ( ; 号非常重要)
346 ;:-----------------------------------------------------------------------------
347 ;:" 多文件管理 (基本的)
348 :bn                                 ;: 跳转到下一个buffer
349 :bp                                 ;: 跳转到前一个buffer
350 :wn                                 ;: 保存当前buffer并跳转到下一个buffer (超有用)
351 :wp                                 ;: 保存当前buffer并跳转到前一个buffer
352 :bd                                 ;: 把当前文件从buffer移出 (超有用)
353 :bun                                ;: 卸载当前buffer (关闭这个窗口但是不移出)
354 :badd file.c                        ;: 添加file.c到buffer列表
355 :b 3                                ;: 前往第三个 buffer
356 :b main                             ;: 前往含有main的buffer中 比如说 main.c
357 :sav php.html                       ;: 把当前文件存为php.html并打开
358 :sav! %<.bak                        ;: 换一个后缀名保存 (旧方法)
359 :sav! %:r.cfm                       ;: 同上
360 :sav %:s/fred/joe/                  ;: 替换文件名
361 :sav %:s/fred/joe/:r.bak2           ;: 替换文件和后缀
362 :!mv % %:r.bak                      ;: 重命名当前文件
363 :help filename-modifiers
364 :e!                                 ;: 打开未修改之前的文件
365 :w c:/aaa/%                         ;: 存储文件到指定位置
366 :e #                                ;: 编辑标记为#的文件在buffer中
367 :rew                                ;: 返回到第一个可编辑的文件
368 :brew                               ;: 回到第一个buffer
369 :sp fred.txt                        ;: 分割窗口打开fred.txt
370 :sball,:sb                          ;: 把所有的 buffers分割显示在一个窗口中 (超有用)
371 :scrollbind                         ;: in each split window
372 :map <F5> :ls<CR>:e #               ;: 按F5显示所有buffer, 并显示行号
373 :set hidden                         ;: 允许不保存当前buffer而进行切换
374 ;:-----------------------------------------------------------------------------
375 ;:" 在分割窗口中快速切换
376 map <C-J> <C-W>j<C-W>_
377 map <C-K> <C-W>k<C-W>_
378 ;:-----------------------------------------------------------------------------
379 ;:" 录制命令 (最好的技巧)
380 qq                                  ;:# 录制命令放入 q寄存器
381 ..                                  ;:输入一些命令
382 q                                   ;:# 录制结束 
383 @q                                  ;:执行放入寄存器q中的内容
384 @@                                  ;:重复
385 5@@                                 ;:重复5次
386 ;:" 编辑一个 寄存器/录制
387 "qp                                 ;:显示寄存器q中的内容(普通模式下)
388 <ctrl-R>q                           ;:显示寄存器q中的内容 (插入模式下)
389                                     ;:" 你现在可以看到记录内容,随便编辑
390 "qdd                                ;:删除,重新存入q
391 @q                                  ;:执行 录制/寄存器 q
392 ;:" 在可视块中运行记录
393 ;:1) 定义记录/寄存器
394 qq:s/ to/ from/g^Mq
395 ;:2) 定义可视块
396 V}
397 ;:3) 键入                               ;: 将显示下面信息
398 :'<,'>
399 ;:4)完成如下操作
400 :'<,'>norm @q
401 ;:-----------------------------------------------------------------------------
402 ;:"宏记录的map (命令方式结束)
403 nnoremap ] @q:w!<bar>bd
404 ;:-----------------------------------------------------------------------------
405 ;:" 可视化模式提供一种灵活易用的方法选择一块文本供操作符使用
406 ;:" 记出
407 v                                   ;: 进入可视化模式
408 V                                   ;: 进入可视化行选择模式
409 <C-V>                               ;: 进入可视化块选择模式
410 gv                                  ;: 重新选择
411 o                                   ;: 选择的区域头尾移动
412 "*y                                 ;: 复制选择区域到paste buffer
413 V%                                  ;: 选择一个匹配段
414 V}J                                 ;: 合并一个段落
415 V}gJ                                ;: 合并一个段落,并保留空格
416 ;:-----------------------------------------------------------------------------
417 ;:" 删除选中的10行的前两个字符(不过这里应该假设是紧凑的排版格式,不能包含空格、tab等字符的,可是经实验应该是钱3个字符才对啊??)
418 0<c-v>10j2ld
419 ;:-----------------------------------------------------------------------------
420 ;:" 如何用可视块拷贝几列
421 ;:" 可视块(并非通常的 v 命令)
422 <C-V>,然后通过移动命令选择列 (win32 <C-Q>)
423 然后执行 c,d,y,r 等命令
424 ;:-----------------------------------------------------------------------------
425 ;:"用一个块替换另一个块 
426 复制第一个块: ctrl-v move "ay
427 复制第二个块: ctrl-v move cctrl-o "aP <esc>
428 ;:-----------------------------------------------------------------------------
429 ;:" _vimrc 基本设置
430 :set incsearch                      ;: 输入搜索命令时,立即显示目前输入的模式对应的匹配。匹配的字符串被高亮。
431 :set wildignore=*.o,*.obj,*.bak,*.exe  ;: tab补全时忽略这些忽略这些
432 :set shiftwidth=3                   ;: 设置自动缩进为3个字符
433 :set vb t_vb=".                     ;: 安静模式,关闭响铃跟闪烁
434 :set browsedir=buffer               ;: 设置文件浏览使用的目录 
435                                     ;: 注:last 使用文件浏览器最近访问相同的目录。 
436                                     ;:     buffer 使用相关缓冲区的目录。 
437                                     ;:     current 使用当前目录。 
438                                     ;:     {path} 使用指定目录。
439 ;:-----------------------------------------------------------------------------
440 ;:" 启动windows中的IE
441 :nmap ,f :update<CR>:silent !start c:/progra~1/intern~1/iexplore.exe file://%:p<CR>
442 :nmap ,i :update<CR>: !start c:/progra~1/intern~1/iexplore.exe <cWORD><CR>
443 ;:-----------------------------------------------------------------------------
444 ;:" 在vim里打开ftp
445 cmap ,r :Nread ftp://209.51.134.122/public_html/index.html
446 cmap ,w :Nwrite ftp://209.51.134.122/public_html/index.html
447 gvim ftp://www.somedomain.com/index.html # 使用 netrw.vim
448 ;:-----------------------------------------------------------------------------
449 ;:" 向寄存器中添加内容 (使用相应寄存器名称的大写)
450 ;:" 复制5行放入a寄存器,然后向下跳转10行再复制5行
451 "a5yy
452 10j
453 "A5yy
454 ;:-----------------------------------------------------------------------------
455 [I                                  ;: 显示当前行中字符的所有匹配(超级有用)
456 ;:-----------------------------------------------------------------------------
457 ;:" 常规缩进
458 :'a,'b>>                            ;: 将mark a到mark b之间的内容进行两次缩进
459 ;:" 虚拟模式下缩进 (可重复)
460 :vnoremap < <gv                     ;: 这是一个虚拟模式下的键盘映射 
461                                     ;: < 映射为<gv " < 意为向内缩进,
462                                     ;: gv 上面已有解释,为重复上次选区
463                                     ;: <gv 也就是先向内缩进然后再选择刚才的选区 
464                                     ;: 这样就可以只按 < 实现重复缩进了
465 :vnoremap > >gv                     ;: 向内缩进,原理同上
466 ;:" 块缩进
467 >i{
468 >a{
469 ;:" also
470 >% and <%                           ;:自己试试看吧,涉及到用 { 的语言很有用,比如c,c++等
471 ;:-----------------------------------------------------------------------------
472 ;:" 重定向 & 粘贴到寄存器 * (*为寄存器名称)
473 :redir @*                           ;: 重定向命令到paste缓冲区
474 :redir END                          ;: 结束
475 :redir >> out.txt                   ;: 重定向到文件
476 ;:" 操作粘贴缓冲区
477 "*yy                                ;: 复制到寄存器
478 "*p                                 ;: 从寄存器中粘贴一行
479 ;:" 复制到粘贴缓冲区 (扩展模式)
480 :'a,'by*                            ;: 复制一个范围到粘
480 :'a,'by*                            ;: 复制一个范围到粘贴寄存器
481 :%y*                                ;: 复制一个括号匹配到粘贴缓冲区
482 :.y*                                ;: 复制当前行到粘贴缓冲区
483 ;:" 从剪贴板上过滤非可打印字符
484 ;:" 当从一些 GUI 程序粘贴时会有用处
485 :nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*p
486 ;:-----------------------------------------------------------------------------
487 ;:" 重新格式化文本
488 gq}                                 ;: 合并一个段落
489 gqap                                ;: 当前段落
490 ggVGgq                              ;: 全部段落
491 Vgq                                 ;: 当前行
492 :s/./{,69/};/s*/|./{,69/}/s/+/&/r/g ;:" 在70列的时候换行
493 ;:-----------------------------------------------------------------------------
494 ;:" 命令使用于多个文件
495 :argdo %s/foo/bar/e                 ;: 在所有文件上操做 :args
496 :bufdo %s/foo/bar/e
497 :windo %s/foo/bar/e
498 :argdo exe '%!sort'|w!              ;: 包含外部命令
499 ;:-----------------------------------------------------------------------------
500 ;:" 命令行技巧
501 gvim -h                             ;: 显示帮助
502 ls | gvim -                         ;: 管道操作
503 cat xx | gvim - -c "v/^/d/d/|^[3-9]/d "   ;: 从管道出过滤内容
504 gvim -o file1 file2                 ;: 分割窗口显示两个文件
505 ;:" 打开文件后执行一条命令
506 gvim.exe -c "/main" joe.c           ;: 打开 joe.c & 跳转到 "main"
507 ;:" 在打开一个文件时执行多条命令
508 vim -c "%s/ABC/DEF/ge | update" file1.c
509 ;:" 在一组文件上执行多条命令
510 vim -c "argdo %s/ABC/DEF/ge | update" *.c
511 ;:" 从一系列文件中删除一块区域
512 vim -c "argdo /begin/+1,/end/-1g/^/d| update" *.c
513 ;:" 自动编辑文件 (编辑命令序列Ex commands已经包含在convert.vim中了)
514 vim -s "convert.vim" file.c
515 ;:#不加载.vimrc跟任何plugin(干净清新的 VIM^_^)
516 gvim -u NONE -U NONE -N
517 ;:" Access paste buffer contents (put in a script/batch file)
518 gvim -c 'normal ggdG"*p' c:/aaa/xp
519 ;:" 将paste中的内容送往默认的打印机
520 gvim -c 's/^//=@*/|hardcopy!|q!'
521 ;:" gvim 里的 grep (win32 or *nix)
522 :grep somestring *.php              ;: 创建匹配的文件列表
523 ;:" 使用 :cn(向后后) :cp(向前) 操纵列表
524 :h grep :查看帮助
525 ;:-----------------------------------------------------------------------------
526 ;:" GVIM 的差异比较 
527 gvim -d file1 file2                 ;: vimdiff (比较不差异)
528 dp                                  ;: 把光标处的不同放到另一个文件
529 do                                  ;: 在光标处从另一个文件取得不同
530 ;:-----------------------------------------------------------------------------
531 ;:" Vim traps 在正则表达式中 + | ( { 都要加上转义符(反斜杠)
532 In regular expressions you must backslash + (match 1 or more)
533 In regular expressions you must backslash | (or)
534 In regular expressions you must backslash ( (group)
535 In regular expressions you must backslash { (count)
536 /fred/+/                            ;: 匹配 fred/freddy 但不匹配 free
537 //(fred/)/{2,3}/                    ;: note what you have to break
538 ;:-----------------------------------------------------------------------------
539 ;:" /v ,或叫做very magic (通常都是这么叫)可以取消转义符
540 /codes/(/n/|/s/)*where              ;: 普通的正则表达式
541 //vcodes(/n|/s)*where               ;: very magic
542 ;:-----------------------------------------------------------------------------
543 ;:" 把对象送到命令行或者搜索行
544 <C-R><C-W>                          ;: 执行当前光标下的单个单词
545 <C-R><C-A>                          ;: 执行当前光标下尽可能多的单词
546 <C-R>-                              ;: 送至一个小型寄存器(同样使用于插入模式) 
547 <C-R>[0-9a-z]                       ;: 送至一个命名寄存器 (括弧同上)
548 <C-R>%                              ;: 送至文件名(#也行) (同上)
549 <C-R>=somevar                       ;: 送至一个变量 (例如 :let sray="ray[0-9]")
550 ;:-----------------------------------------------------------------------------
551 ;:" 控制寄存器
552 :let @a=@_                          ;: 清除寄存器 a
553 :let @a=""                          ;: 同上 a
554 :let @*=@a                          ;: 拷贝寄存器 a 到 paste buffer
555 :let @*=@:                          ;: 拷贝最后执行的命令到 paste buffer
556 :let @*=@/                          ;: 拷贝最后执行的查找命令到paste buffer
557 :let @*=@%                          ;: 拷贝当前文件到 paste buffer
558 ;:-----------------------------------------------------------------------------
559 ;:" 帮助的帮助? (使用 TAB)
560 :h quickref                         ;: VIM 快速参考页
561 :h tips                             ;: Vim'自己的技巧帮助
562 :h visual<C-D><tab>                 ;: 虚拟模式的帮助列表
563 : 然后使用tab选择它们
564 :h ctrl<C-D>                        ;: 所有关于ctrl键的帮助列表
565 :helpg uganda                       ;: 过滤帮助文件 使用 :cn, :cp 查找下一个及后一个
566 :helpgrep edit.*director: grep help using regexp
567 :h :r                               ;: 关于 :ex 的命令帮助
568 :h CTRL-R                           ;: 普通模式相关
569 :h //r                              ;: /r是什么的意思
570 :h //zs                             ;: 使用双反斜线查找关于 /zs 的帮助
571 :h i_CTRL-R                         ;: 在插入模式中 <C-R>的解释
572 :h c_CTRL-R                         ;: 在命令模式中 <C-R> 的解释
573 :h v_CTRL-V                         ;: 虚拟模式
574 :h tutor                            ;: VIM 快速指南
575 <C-[>, <C-T>                        ;: Move back & Forth in HELP History
576 gvim -h                             ;: VIM 命令行帮助
577 ;:-----------------------------------------------------------------------------
578 ;:" 选项设置在那里
579 :scriptnames                        ;: 列出所有已经加载的 plugins, _vimrcs文件
580 :verbose set history? :显示 history的值并显示在那里定义的
581 :function                           ;: 列出所有函数
582 :func SearchCompl                   ;: 显示指定函数的细节
583 ;:-----------------------------------------------------------------------------
584 ;:" 制作你自己的VIM 帮助
585 :helptags /vim/vim64/doc            ;: 重新编译所有 *.txt 的帮助文件在这个目录里
586 :help add-local-help :如何添加本地帮助
587 ;:-----------------------------------------------------------------------------
588 ;:" 用外部程序运行文件 (例如 php)
589 map <f9> :w<CR>:!c:/php/php.exe %<CR>
590 map <f2> :w<CR>:!perl -c %<CR>
591 ;:-----------------------------------------------------------------------------
592 ;:" 在另一个buffer中,捕捉当前脚本的输出
593 :new | r!perl #                     ;: 新建一个buffer,从另一个buffer中读入结果
594 :new! x.out | r!perl #              ;: 同上,并指定一个新文件名
595 :new+read!ls
596 ;:-----------------------------------------------------------------------------
597 ;:" 创建一个新的buffer, 粘贴q寄存器,然后对它进行排序 
598 :new +put q|%!sort
599 ;:-----------------------------------------------------------------------------
600 ;:" 插入DOS换行符
601 :%s/$//<C-V><C-M>&/g                ;: (that's what you type
602 :%s/$//<C-Q><C-M>&/g                ;: for Win32) 对于Win32应该这样
603 :%s/$//^M&/g                        ;: 你看到的^M是一个字符
604 ;:-----------------------------------------------------------------------------
605 ;:" 自动删除行尾 Dos回车符和空格
606 autocmd BufRead * silent! %s/[/r /t]/+$//
607 autocmd BufEnter *.php :%s/[ /t/r]/+$//e
608 ;:-----------------------------------------------------------------------------
609 ;:" 对指定文件或文件类型执行某个动作
610 autocmd VimEnter c:/intranet/note011.txt normal! ggVGg?
611 autocmd FileType *.pl exec('set fileformats=unix')
612 ;:-----------------------------------------------------------------------------
613 ;:" 把最后一个命令贴到当前位置
614 i<c-r>:
615 ;:" 把最后一个搜索指令贴到当前位置
616 i<c-r>/
617 ;:-----------------------------------------------------------------------------
618 ;:" 更多的完成功能
619 <C-X><C-F> ;:插入当前目录下的一个文件名到当前位置 # 在insert模式下使用 # 然后用 Ctrl-P/Ctrl-N 翻页
620 ;:-----------------------------------------------------------------------------
621 ;:" 替换一个visual区域
622 ;:" 选择一个区域,然后输入 :s/Emacs/Vim/ 等等,vim会自动进入:模式
623 :'<,'>s/Emacs/Vim/g                 ;: 前面的' '<.'> 是vim自动添加的
624 gv                                  ;: 重新选择前一个可视区域 (ULTRA)
625 ;:-----------------------------------------------------------------------------
626 ;:" 在文件中插入行号
627 :g/^/exec "s/^/".strpart(line(".")."", 0, 4)
628 :%s/^//=strpart(line(".")." ", 0, 5)
629 :%s/^//=line('.'). ' '
630 ;:-----------------------------------------------------------------------------
631 ;:#用VIM的方式来编号行
632 :set number                         ;: 显示行号
633 :map <F12> :set number!<CR>         ;: <F12>开关行号显示 
634 :%s/^//=strpart(line('.')." ",0,&ts)
635 ;:#从任意行开始编号(需要perl)
636 :'a,'b!perl -pne 'BEGIN{$a=223} substr($_,2,0)=$a++'
637 ;:#产生数字列表
638 ;:#从223行开始的内容至一个空文件
639 qqmnYP`n^Aq                         ;: 用@q来重复一个宏q 
640 ;:" 递增已存在数字到文件末
641 :.,$g/^/d/exe "normal! /<c-a>"
642 ;:" 高级递增,参见:
643 http://vim.sourceforge.net/tip_view.php?tip_id=150
644 ;:-----------------------------------------------------------------------------
645 ;:" 高级递增 (真的很有用)
646 ;:" 把下面几句放到 _vimrc
647 let g:I=0
648 function! INC(increment)
649 let g:I =g:I + a:increment
650 return g:I
651 endfunction
652 ;:" 例如从mark a 到mark b 递增,从223开始,步长为5
653 :let I=223
654 :'a,'bs/^//=INC(5)/
655 ;:" create a map for INC
656 cab viminc :let I=223 /| 'a,'bs/$//=INC(5)/
657 ;:-----------------------------------------------------------------------------
658 ;:" 生成从 23-64 的数字列表
659 o23<ESC>qqYp<C-A>q40@q
660 ;:-----------------------------------------------------------------------------
661 ;:" 在当前插入模式下编辑/移动 (真得很有用)
662 <C-U>                               ;: 删除全部
663 <C-W>                               ;: 删除最后一个单词
664 <HOME><END>                         ;: 移动到行首/行尾
665 <C-LEFTARROW><C-RIGHTARROW>         ;: 向前/后移动一个单词
666 <C-X><C-E>,<C-X><C-Y>               ;: 输入方式时滚屏 
667 ;:-----------------------------------------------------------------------------
668 #加密(小心使用,不要忘了密码)
669 :X                                  ;: vim会提示你输入密码
670 :h :X
671 ;:-----------------------------------------------------------------------------
672 ;:" 模式行 (使文件只读等),必须在前/后 5行内
673 // vim:noai:ts=2:sw=4:readonly:
674 vim:ft=html:                        ;: 使用 HTML 语法高亮
675 :h modeline
676 ;:-----------------------------------------------------------------------------
677 ;:" 建立你自己的菜单项
678 amenu Modeline.Insert/ a/ VIM/ modeline <Esc><Esc>ggOvim:ff=unix ts=4 ss=4<CR>vim60:fdm=marker<esc>gg
679 ;:-----------------------------------------------------------------------------
680 ;:" 一个保存当前光标下的狭义字到一个文件的函数
681 function! SaveWord()
682 normal yiw
683 exe ':!echo '.@0.' >> word.txt'
684 endfunction
685 map ,p :call SaveWord()
686 ;:-----------------------------------------------------------------------------
687 ;:" 删除重复行的函数
688 function! Del()
689 if getline(".") == getline(line(".")- 1)
690 norm dd
691 endif
692 endfunction
693 
694 :g/^/ call Del()                    ;:#使用该函数的一个例子
695 ;:-----------------------------------------------------------------------------
696 ;:" 双字节编码 (non alpha-numerics)
697 :digraphs                           ;: 显示编码表
698 :h dig                              ;: 帮助
699 i<C-K>e'                            ;: 输入 é
700 i<C-V>233                           ;: 输入 é (Unix)
701 i<C-Q>233                           ;: 输入 é (Win32)
702 ga                                  ;: 查看字符的hex值
703 ;:#删除非 ascii 字符
704 :%s/[<C-V>128-<C-V>255]//gi         ;: <C-V> Control-V 
705 :%s/[]//gi                       ;: 查看不可见字符 
706 :%s/[<C-V>128-<C-V>255<C-V>01-<C-V>31]//gi  ;: All pesky non-asciis
707 :exec "norm /[/x00-/x1f/x80-/xff]/" ;:: 同上 
708 ;:#在查找框内输入不可见字符
709 yl/<C-R>" :
710 /[^a-zA-Z0-9_[:space:][:punct:]]    ;:: 找出所有不可见字符 
711 ;:-----------------------------------------------------------------------------
712 ;:" 文件名自动完成 (例如 main_c.c)
713 :e main_<tab>                       ;: tab 键完成
714 gf                                  ;: 打开光标处广义字命名的文件 (normal模式)
715 main_<C-X><C-F>                     ;: 文件名自动完成(insert模式)
716 ;:-----------------------------------------------------------------------------
717 ;:" Vim复杂使用
718 ;:" 交换两个单词
719 :%s//</(on/|off/)/>//=strpart("offon", 3 * ("off" == submatch(0)), 3)/g
720 ;:" 交换两个单词
721 :vnoremap <C-X> <Esc>`.``gvP``P
722 ;:-----------------------------------------------------------------------------
723 ;:" 把text文件转换成html文件(oh,ft)
724 :runtime! syntax/2html.vim          ;: 转换 txt 成 html
725 :h 2html
726 ;:-----------------------------------------------------------------------------
727 ;:" VIM 有一个内部自带的 grep 命令
728 :grep some_keyword *.c              ;: 得到一个包含some_keyword的c文件名列表
729 :cn                                 ;: 去下一个出现的位置
730 ;:-----------------------------------------------------------------------------
731 ;:" 强制无扩展名的文件的语法着色方式
732 :set syntax=perl
733 ;:" 取消语法着色 (很有用)
734 :set syntax off
735 ;:" 改变色彩主题 (在~vim/vim??/colors中的任何文件)
736 :colorscheme blue
737 ;:" 通过使用模式行强迫使用 HTML 语法高亮
738 # vim:ft=html:
739 ;:" 强制自动语法加亮(非标准的文件扩展)
740 au BufRead,BufNewFile */Content.IE?/* setfiletype html
741 ;:-----------------------------------------------------------------------------
742 :set noma (non modifiable)          ;: 防止修改
743 :set ro (Read Only)                 ;: 只读保护
744 ;:-----------------------------------------------------------------------------
745 ;:" 对话 (打开一堆文件)
746 gvim file1.c file2.c lib/lib.h lib/lib2.h         ;: 在"对话"中加载这些文件
747 :mksession                          ;: 生成一个Session文件 (默认是Session.vim)
748 :q
749 gvim -S Session.vim                 ;: 重新加载所有文件
750 ;:-----------------------------------------------------------------------------
751 #标记(tags) (跳转到子程序/函数)
752 taglist.vim                         ;: 很流行的插件
753 :Tlist                              ;: 显示标记 (函数列表)
754 <C-]>                               ;: 跳转到光标处的函数
755 ;:-----------------------------------------------------------------------------
756 ;:" columnise a csv file for display only as may crop wide columns
757 :let width = 20
758 :let fill=' ' | while strlen(fill) <width | let fill=fill.fill | endwhile
759 :%s//([^;]*/);/=//=strpart(submatch(1).fill, 0, width)/ge
760 :%s//s/+$//ge
761 ;:" Highlight a particular csv column (put in .vimrc)
762 function! CSVH(x)
763 execute 'match Keyword /^/([^,]*,/)/{'.a:x.'}/zs[^,]*/'
764 execute 'normal ^'.a:x.'f,'
765 endfunction
766 command! -nargs=1 Csv :call CSVH(<args>)
767 ;:" call with
768 :Csv 5                              ;: highlight fifth column
769 ;:-----------------------------------------------------------------------------
770 ;:" 折叠:隐藏某些片断,使查看更容易
771 zf}                                 ;: 使用动作命令折叠一个段落 
772 v}zf                                ;: 使用可视模式折叠一个段落
773 zf'a                                ;: 折叠到一个标记上
774 zo                                  ;: 打开折叠
775 zc                                  ;: 重新关闭折叠
776 ;:-----------------------------------------------------------------------------
777 ;:" 显示"不可见字符"
778 :set list
779 :h listchars
780 ;:-----------------------------------------------------------------------------
781 ;:" 如何在不进入插入模式的情况下粘贴"普通模式的命令"
782 :norm qqy$jq
783 ;:-----------------------------------------------------------------------------
784 ;:" 处理文件名
785 :h filename-modifiers               ;: 帮助
786 :w %                                ;: 写入当前文件
787 :w %:r.cfm                          ;: 改变文件扩展名为 .cfm
788 :!echo %:p                          ;: 显示完整路径和文件名
789 :!echo %:p:h                        ;: 只显示完整路径
790 :!echo %:t                          ;: 只显示文件名
791 :reg %                              ;: 显示文件名
792 <C-R>%                              ;: 插入文件名 (插入模式)
793 :"%p                                ;: 插入文件名 (普通模式)
794 /<C-R>%                             ;: 在文本中查找文件名
795 ;:-----------------------------------------------------------------------------
796 ;:" 删除,但不破坏 buffer 内容
797 :"_d                                ;: 你一直想要的东西
798 :"_dw                               ;: 例如:删除一个单词 (使用黑洞???)
799 ;:-----------------------------------------------------------------------------
800 ;:" 送完整的路径名到剪贴板,用于邮件附件等
801 nnoremap <F2> :let @*=expand("%:p")<cr> :unix
802 nnoremap <F2> :let @*=substitute(expand("%:p"), "/", "//", "g")<cr> :win32
803 ;:-----------------------------------------------------------------------------
804 ;:" 不用离开 Vim 就能修改文件名的简单 shell 脚本
805 $ vim
806 :r! ls *.c
807 :%s//(.*/).c/mv & /1.bla
808 :w !sh
809 :q!
810 ;:-----------------------------------------------------------------------------
811 ;:" 在一个文本里计算单词数
812 g<C-G>
813 ;:-----------------------------------------------------------------------------
814 ;:" 你自己设置高亮显示的例子
815 :syn match DoubleSpace " "
816 :hi def DoubleSpace guibg=#e0e0e0
817 ;:-----------------------------------------------------------------------------
818 ;:" reproduce previous line word by word
819 imap ] @@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s
820 nmap ] i@@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s
821 ;:" 根据文件类型映射快捷键
822 :autocmd bufenter *.tex map <F1> :!latex %<CR>
823 :autocmd bufenter *.tex map <F2> :!xdvi -hush %<.dvi&<CR>
824 ;:-----------------------------------------------------------------------------
825 ;:" 读取 MS-Word 文档,需要 antiword
826 :autocmd BufReadPre *.doc set ro
827 :autocmd BufReadPre *.doc set hlsearch!
828 :autocmd BufReadPost *.doc %!antiword "%"
829 ;:-----------------------------------------------------------------------------
830 ;:" a folding method
831 vim: filetype=help foldmethod=markerfoldmarker=<<<,>>>
832 ;:A really big section closed with a tag <<< 
833 ;:--- remember folds can be nested ---
834 Closing tag >>>
835 ;:-----------------------------------------------------------------------------
836 ;:" Just Another Vim Hacker JAVH
837 vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?"
838 ;:# 译释:呵呵,谁来解释一下吧!
839 ;:# 其实不过是在启动vim的时候执行了一个命令
840 ;:# 先写入了 Just Another Vim Hacker 的rot13编码
841 ;:# 然后再解码
842 ;:-----------------------------------------------------------------------------
843 ;:__END__
844 

原创粉丝点击