Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42200
  • 博文数量: 13
  • 博客积分: 1956
  • 博客等级: 上尉
  • 技术积分: 155
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-05 23:06
文章分类

全部博文(13)

文章存档

2011年(3)

2010年(5)

2008年(5)

我的朋友

分类:

2008-12-22 21:26:32

  1 ;:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2 ;:文档来源:  
  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 /\/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 ? ;: 向后查找
 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/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                         ;: 适%能匹配
阅读(1009) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-04-03 21:06:56

哥们,真的,很强大.想问你一个问题,你用的是gvim还是vim?