2009年3月15日星期日

vim技巧1(高级篇)

1 ;:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 ;:文档来源: http://www.rayninfo.co.uk/vimtips.html
3 ;:翻译参考: 没有记,请原作者见谅
4 ;:文档日期: 2006-10-13 11:19:04
5 ;:更新记录:
6 ;:作  者: li3
7 ;:生成工具: 2Html.vim
8 ;:http://blog.21ic.org/user1/313/archives/2006/30482.html
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 /\/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/" ;: visually模式下的键盘映射,把//映射成匹配当前选中的文本
38 :vmap // y/=escape(@",'\\/.*$^~[]') ;: 包括空白字符
39 ;:" \zs 和 \ze 匹配原 :h /\zs
40 /<\zs[^>]*\ze> ;: 匹配<与>所包含的内容
41 ;:" 零宽度匹配 :h /\@=
42 /<\@<=[^>]*>\@= ;: 查找<与>所包含的内容
43 /<\@<=\_[^>]*>\@= ;: 多行匹配<与>所包含的内容
44 ;:" 多行查找 \_ 的意思是包括换行符
45 / ;: 匹配<与>所包含的所有内容
46 /fred\_s*joe/i ;: 匹配fred开始到joe,之间一定得是空白字符
47 /bugs\(\_.\)*bunny ;: 匹配所有bugs到bunny的字符串
48 :h \_ ;: help
49 ;:" 查找函数声明,nmap为normal模式下的键盘映射
50 :nmap gx yiw/^\(sub\function\)\s\+"
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/a/g ;: 将fred替换为寄存器a里的内容 #为按下Ctrl与r
96 :s/fred/asome_texts/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 @*sil exec 'g@<\(input\select\textarea\/\=form\)\>@p'redir END
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 z :%s#\<=expand("")\>#
130 ;:" 将Vis选中的内容用<>括起来
131 :vmap z :%s/\<*\>/
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
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 ;: 或运算(/和input之间有<,|和form之间有<)
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 ;:" 增加数字 (键入 ) ;#在MS-Windows中已经被定义为全选
171 :.,$g/^\d/exe "norm! \" ;: 增加从当前行首到结尾的数字
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//z#.5 ;: 带行号显示
185 :g//z#.5|echo "==========" ;: 漂亮的显示
186 ;:" 用 g// 执行正常命令
187 :g/|/norm 2f|r* ;: 替换第二个|为*
188 ;:" 在新窗口中显示查找结果
189 :nmap :redir @a:g//:redir END:new:put! a
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# ;: 查找当前光标下的单词(单个单词) () (向前/向后)
205 % ;: 匹配括号 {}[]()
206 . ;: 重复上次操作
207 @: ;: 重复上次的命令
208 matchit.vim ;: 适%能匹配 《script》 209 ;: 插入模式下自动完成填词
210 ;: 行自动完成(超级有用)
211 / ;: 把单个单词放入搜索或者命令行
212 / ;: 把字符串中有的单词放入搜索或者命令行
213 :set ignorecase ;: 忽略大小写
214 :syntax on ;: 打开语法高亮 Perl,HTML,PHP 等等
215 :h regexp ;: 按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 "zdiz ;: 在 VISUALLY模式下将选中的文本前后分别加上
224 :vmap st "zdiz ?> ;: 加上
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 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
263 :%s/[.!?]\_s\+\a/\U&\E/g ;:" 大写所有句子的第一个字母
264 ;:-----------------------------------------------------------------------------
265 gf ;: 打开当前光标下或后的文件
266 :nnoremap gF :view ;: 打开当前光标下或后的文件, 如果不存在则创建
267 ga ;: 显示当前光标下单个字的ascii,十进制,十六进制……
268 ggVGg? ;: 将整个文件用rot13编码……(谁看得懂啊~~hoho)
269 ggg?G ;: 同上 (针对大文件)
270 :8 | normal VGg? ;: 将第八行用rot13编码
271 :normal 10GVGg? ;: 同上
272 , ;: 增加,减少当前光标下的数字
273 ;: win32 用户需要重定义 CNTRL-A
274 =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 ;: 依次沿着你的跳转记录向回跳 (从最近的一次开始)
289 ;: 依次沿着你的跳转记录向前跳
290 :ju(mps) ;: 列出跳转轨迹
291 :help jump-motions
292 :history ;: 列出历史记录
293 :his c ;: 命令行历史
294 :his s ;: 搜索历史
295 q/ ;: 搜索命令历史的窗口
296 q: ;: 命令行命令历史的窗口
297 : ;: 历史窗口
298 ;:-----------------------------------------------------------------------------
299 ;:" 缩写 & 映射
300 :map :'a,'bw! c:/aaa/x
301 :map :r c:/aaa/x
302 :map :.w! c:/aaa/xr
303 :map :r c:/aaa/xr
304 :ab php ;: 查看以php开头的缩写
305 :map , ;: 列出所有的映射(以逗号开始的)
306 ;:" 允许映射 F10 (win32)
307 set wak=no ;: :h winaltkeys
308 ;:" 映射中常使用的表示
309 ;: 回车
310 ;: Esc
311 ;: 右斜杠
312 ;: 管道符号
313 ;: 退格键
314 ;: 不回显
315 #显示自定义的 RGB 颜色显示当前光标下的字符串 例如 #445588
316 :nmap c :hi Normal guibg=#=expand("")
317 :map /price only\\|versus/ :在map中需要用反斜线 \
318 ;:-----------------------------------------------------------------------------
319 ;:" 简单的 PHP 调试将所有显示的变量放入寄存器a
320 iab phpdb exit("
Debug 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 :ls:e # ;: 按F5显示所有buffer, 并显示行号
373 :set hidden ;: 允许不保存当前buffer而进行切换
374 ;:-----------------------------------------------------------------------------
375 ;:" 在分割窗口中快速切换
376 map j_
377 map k_
378 ;:-----------------------------------------------------------------------------
379 ;:" 录制命令 (最好的技巧)
380 qq ;:# 录制命令放入 q寄存器
381 .. ;:输入一些命令
382 q ;:# 录制结束
383 @q ;:执行放入寄存器q中的内容
384 @@ ;:重复
385 5@@ ;:重复5次
386 ;:" 编辑一个 寄存器/录制
387 "qp ;:显示寄存器q中的内容(普通模式下)
388 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!bd
404 ;:-----------------------------------------------------------------------------
405 ;:" 可视化模式提供一种灵活易用的方法选择一块文本供操作符使用
406 ;:" 记出
407 v ;: 进入可视化模式
408 V ;: 进入可视化行选择模式
409 ;: 进入可视化块选择模式
410 gv ;: 重新选择
411 o ;: 选择的区域头尾移动
412 "*y ;: 复制选择区域到paste buffer
413 V% ;: 选择一个匹配段
414 V}J ;: 合并一个段落
415 V}gJ ;: 合并一个段落,并保留空格
416 ;:-----------------------------------------------------------------------------
417 ;:" 删除选中的10行的前两个字符(不过这里应该假设是紧凑的排版格式,不能包含空格、tab等字符的,可是经实验应该是钱3个字符才对啊??)
418 010j2ld
419 ;:-----------------------------------------------------------------------------
420 ;:" 如何用可视块拷贝几列
421 ;:" 可视块(并非通常的 v 命令)
422 ,然后通过移动命令选择列 (win32 )
423 然后执行 c,d,y,r 等命令
424 ;:-----------------------------------------------------------------------------
425 ;:"用一个块替换另一个块
426 复制第一个块: ctrl-v move "ay
427 复制第二个块: ctrl-v move cctrl-o "aP
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:silent !start c:\progra~1\intern~1\iexplore.exe file://%:p
442 :nmap ,i :update: !start c:\progra~1\intern~1\iexplore.exe
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 ;: 这是一个虚拟模式下的键盘映射 (gv前面有个<)
461 ;: < 映射为< gv " < 意为向内缩进,
(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* ;: 复制一个范围到粘