vim使用技巧

来源:互联网 发布:域名系统安全防护要求 编辑:程序博客网 时间:2024/05/17 02:00

#------------------------------------------------

/joe/e ;: 设置光标到匹配"joe"的末尾
/joe/e+1 ;: 设置光标到匹配"joe"的末尾再后移一位
/joe/s-2 ;: 设置光标到匹配"joe“的开头再前移两位
/joe/+3 ;: 搜索“joe” 找到后将光标下移3行
/^joe.*fred.*bill/ ;: 匹配以'j'开头且"joe"到"fred"到"bill"之间至少有一个字符
/^[A-J]/+/ ;: 搜索行首非'A'到’J‘重复一次以上的行
/begin/_.*end ;: 多行匹配
/fred/_s*joe/i ;: 多行搜索可以是任何空白字符包括/n,/t等等
/fred/|joe ;: 搜索fred或者joe
/.*fred/&.*joe ;: 搜索同时包括fred跟joe的行
///i ;: 搜索独立的单词fred
//</d/d/d/d/> ;: 搜索独立的4位数字
//D/d/d/d/d/D ;: 搜索恰好4位的数字
//</d//> ;: 同//</d/d/d/d/>
//([^0-9]/|^/)%.*% ;: 查找以非0~9数字或在行首的%%所包括的内容
;:" 查找空行
/^/n/ ;: 匹配三连续的空行
;:" 使用正则表达式组查找
//(fred/).*/(joe/).*/2.*/1
;:" 正则表达式重复
/^/([^,]*,/)/
;:" visual 下搜索
:vmap // y/" ;: visually模式下的键盘映射,把//映射成匹配当前选中的文本
:vmap // y/=escape(@",'///.*$^~[]') ;: 包括空白字符
;:" /zs 和 /ze 匹配原 :h //zs
/</zs[^>]*/ze> ;: 匹配<与>所包含的内容
;:" 零宽度匹配 :h //@=
/</@<=[^>]*>/@= ;: 查找<与>所包含的内容
/</@<=/_[^>]*>/@= ;: 多行匹配<与>所包含的内容
;:" 多行查找 /_ 的意思是包括换行符
/ ;: 匹配<与>所包含的所有内容
/fred/_s*joe/i ;: 匹配fred开始到joe,之间一定得是空白字符
/bugs/(/_./)*bunny ;: 匹配所有bugs到bunny的字符串
:h /_ ;: help
;:" 查找函数声明,nmap为normal模式下的键盘映射
:nmap gx yiw/^/(sub/function/)/s/+"
;:" 查找多个文件
:bufdo /searchstr/ ;: 在多个文件缓冲区里执行查找
;:" 更好的多文件查找定位方法
:bufdo %s/searchstr/&/gic ;: 在多个文件缓冲区里查找,按下n停止
;:" 怎样不使用 / 来查找网址
?
http://www.vim.org/ ;: 向后查找
;:" 查找指定字符以外的字符串
//c/v([^aeiou]&/a) ;: 查找4个辅音字母
;:-----------------------------------------------------------------------------
;:#替换
:%s/fred/joe/igc ;: 普通替换命令
:%s//r//g ;: 删除 DOS 的换行符 ^M
;:" 你的文本文件是否乱七八糟的排成一行?使用如下命令
:%s//r//r/g ;: 转换 DOS 回车符 ^M 为真正的回车符
:%s= *$== ;: 删除行尾空白
:%s= /+$== ;: 同上
:%s#/s*/r/?$## ;: 删除尾部空白和dos换行符
:%s#/s*/r*$## ;: 同上
;:" 删除空行
:%s/^/n/// ;: 删除连续3个空行
:%s/^/n/+//r/ ;: 压缩空行,多个替换为一个
:%s#<[^>]/+>##g ;: 删除html的tag部分
:%s#</_./>##g ;: 多行删除 html 的tags (非贪婪方式)
;:" IF YOU ONLY WANT TO KNOW ONE THING
:'a,'bg/fred/s/dick/joe/igc ;: 非常有用
;# 译释:''a,''b指定一个范围:mark a ~ mark b
;# g//用一个正则表达式指出了进行操作的行必须可以被fred匹配
;# 看后面,g//是一个全局显示命令
;# s/dick/joe/igc则对于这些满足条件的行进行替换
;:" 复制列
:%s= [^ ]/+$=&&= ;: 复制最后一列
:%s= /f/+$=&&= ;: 复制最后一列
:%s= /S/+$=&& ;: 复制最后一列
;:" 记忆(反向引用)
:s//(.*/):/(.*/)//2: /1/ ;: 将两个字段颠倒
:%s/^/(.*/)/n/1$//1/ ;: 删除重复行
;:" 非贪婪匹配 /
:%s/^./pdf/new.pdf/ ;: 删除第一个pdf
;:" use of optional atom /?
:%s#/<[zy]/?tbl_[a-z_]/+/>#/L&#gc ;: lowercase with optional leading characters
;:" 跨越尽量多的行
:%s/// ;: 删除多行注释
:help // ;: 查看非贪婪匹配的更多帮助
;:" 使用寄存器替换
:s/fred/a/g ;: 将fred替换为寄存器a里的内容 #为按下Ctrl与r
:s/fred/asome_texts/g
:s/fred//=@a/g ;: 比较好的办法,不显示替换内容
;:" 在一行里写多种命令
:%s//f/+/.gif/>//r&/r/g | v//.gif$/d| %s/gif/jpg/
:%s/a/but/gie|:update|:next ;: 当使用 @: 来重复
;:" 或运算
:%s/suck/|buck/loopy/gc ;: 替换suck或者buck(这里|不是管道)
;:" 调用vim函数
:s/__date__//=strftime("%c")/ ;: 将__date__替换成当前日期,使用strftime函数
;:" 处理列,替换所有在第三列中的str1
:%s:/(/(/w/+/s/+/)//)str1:/1str2:
;:" 交换第一列跟第四列
:%s:/(/w/+/)/(.*/s/+/)/(/w/+/)$:/3/2/1:
;:" 过滤form中的内容放在寄存器里
:redir @*|sil exec 'g#</(input/|select/|textarea/|//=form/)/>#p'|redir END
:nmap ,z :redir @*sil exec 'g@</(input/select/textarea///=form/)/>@p'redir END
;:" 两位以上的数字减三(带进位。这个命令挺有趣)
:%s//d/+//=(submatch(0)-3)/
;:" 包含loc或者functions的行中的数字加6
:g/loc/|function/s//d//=submatch(0)+6/
;:" 比上面更好的方法
:%s#txtdev/zs/d#/=submatch(0)+1#g
:h //zs ;查看帮助
;:" 前缀为gg的数字加6
:%s//(gg/)/@<=/d/+//=submatch(0)+6/
:h zero-width ;查看帮助
;:" 替换一个特定字符串为数字
:let i=10 | 'a,'bg/Abc/s/yy//=i/ |let i=i+1 ;# 将yy转换成10,11,12等等
;:" 比上面的更精确
:let i=10 | 'a,'bg/Abc/s/xx/zsyy/ze//=i/ |let i=i+1 # 将xxyy 转换成 xx11,xx12,xx13
;:" 将查找内容放入内存,然后用/zs进行简单替换
:%s/"/([^.]/+/).*/zsxx//1/
;:" 将xx替换为此行内容
:nmap z :%s#/<=expand("")/>#
;:" 将Vis选中的内容用<>括起来
:vmap z :%s//<*/>/
;:-----------------------------------------------------------------------------
;:" 下面举一些在替换中使用替换的例子
;:" 多种分符可以被用在替换中
:%s,/(all/.*/)/@<=/,_,g ;: 用 _ 替换 "all/"之后的 /
;:" 同样的功能
:s#all//zs.*#/=substitute(submatch(0), '/', '_', 'g')#
:s#all/#&^M#|s#/#_#g|-j! ;" 查找断行,并合并为一行
;:" 在替换命令中使用替换
:%s/.*//='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/
;:-----------------------------------------------------------------------------
;:" 全局显示命令
:g/gladiolli/# ;: 查找并显示匹配的行号
:g/fred.*joe.*dick/ ;: 显示所有含有 fred,joe & dick的行
:g/// ;: 显示单一单词fred
:g/^/s*$/d ;: 删除所有空行
:g!/^dd/d ;: 删除不含字符串''dd''的行
:v/^dd/d ;: 同上
:g/fred/,/joe/d ;: 删除所有的从fred到joe
:g/-------/.-10,.d ;: 以-------为标记删除之前的10行
:g/{/ ,/}/- s//n/+//r/g ;: 删除 之间的空行
:v//S/d ;: 删除空行
:v/./,/./-j ;: 压缩空行
:g/^$/,/./-j ;: 同上
:g/:g/^/put_ ;: 双倍行宽 (pu = put)
:g/^/m0 ;: 颠倒文件 (m = move)
:'a,'bg/^/m'b ;: 颠倒选中的 a 到 b
:g/^/t. ;: 重复行
:g/fred/t$ ;: 拷贝行从fred到结尾
:g/stage/t'a ;: 拷贝行从stage 到 marker a(a为标记的位置)
:g//(^I[^^I]*/)//d ;: 删除最少包含80个tab的行
;:" 隔行替换
:g/^/ if line('.')%2|s/^/zz /
;:" 查找标记a与b 间所有包含 "somestr"
;:" 复制所有"otherstr"后的行
:'a,'bg/somestr/co/otherstr/ ;: co(py) or mo(ve)
:'a,'bg/str1/s/str1/&&&/|mo/str2/ ;" 范围同上,进行替换
:%norm jdd ;: 隔行删除
;:" 增加数字 (键入 ) ;#在MS-Windows中已经被定义为全选
:.,$g/^/d/exe "norm! /" ;: 增加从当前行首到结尾的数字
:'a,'bg//d/+/norm! ^A ;: 增加数字
;:" 保存全局命令的结果 (注意必须使用添加模式) 你需要使用 qaq 清空寄存器a.
;:"save results to a register/paste buffer 存储结果到 寄存器/粘贴 到 a
:g/fred/y A ;: 添加配备行到寄存器到 a
:g/fred/y A | :let @*=@a ;: 放入复制缓冲区
:let @a=''|g/Barratt/y A |:let @*=@a
:'a,'b g/^Error/ . w >> errors.txt ;" 将查找内容放入一个文件 (文件必须存在)
;:" 复制每一行,然后在复制出来的每一行两侧加上一个 print '复制出来的内容'
:g/./yank|put|-1s/'/"/g|s/.*/Print '&'/
;:" 用文件中的内容替换字符串,-d 表示删除“标记”
:g/^MARK$/r tmp.ex | -d
;:" 精致的显示方法
:g//z#.5 ;: 带行号显示
:g//z#.5|echo "==========" ;: 漂亮的显示
;:" 用 g// 执行正常命令
:g/|/norm 2f|r* ;: 替换第二个|为*
;:" 在新窗口中显示查找结果
:nmap :redir @a:g//:redir END:new:put! a
;:-----------------------------------------------------------------------------
;:" 全局命令和替换命令联姻 (强大的编辑能力)
:'a,'bg/fred/s/joe/susan/gic ;: 可以使用反向引用来匹配
:g/fred/,/joe/s/fred/joe/gic ;: 非行模式
;:-----------------------------------------------------------------------------
;:" 先找fred,然后找joe
:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
;:-----------------------------------------------------------------------------
;:" create a new file for each line offile eg 1.txt,2.txt,3,txt etc
;:" 将每一行的内容存成一个文件,文件名为 行号.txt 如 1.txt,2.txt 等
:g/^/exe ".w ".line(".").".txt"
;:-----------------------------------------------------------------------------
;:" 绝对精华
;:-----------------------------------------------------------------------------
* # g* g# ;: 查找当前光标下的单词(单个单词) () (向前/向后)
% ;: 匹配括号 {}[]()
. ;: 重复上次操作
@: ;: 重复上次的命令
matchit.vim ;: 适%能匹配

原创粉丝点击