vim-水木-正则表达式实例

__开始__
------------------------------------------------------------------------------
"搜索
/joe/e:设置光标到匹配"joe"的末尾
/joe/e+1:设置光标到匹配"joe"的末尾再后移一位
/joe/s-2:设置光标到匹配"joe“的开头再前移两位
/^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的行
/\<fred\>/i:搜索独立的单词fred
/\<\d\d\d\d\>:搜索独立的4位数字
/\D\d\d\d\d\D:搜索6位字符串中间4位数字前后两位不能为数字
/\<\d\{4}\>:同/\<\d\d\d\d\>
"查找空行
/^\n\{3}:匹配三连续的空行
"使用正则表达式组查找
/\(fred\).*\(joe\).*\2.*\1
"正则表达式重复
/^\([^,]*,\)\{8}
"visualsearching
:vmap//y/<C-R>"<CR>:visually模式下的键盘映射,把//映射成匹配当前选中的文本
:vmap<silent>//y/<C-R>=escape(@",'\\/.*$^~[]')<CR><CR>:包括空白字符
"\zs和\ze匹配原:h/\zs
/<\zs[^>]*\ze>:匹配尖括号中的内容
"零宽度匹配:h/\@=
/<\@<=[^>]*>\@=:searchfortagcontents,ignoringchevrons
/<\@<=\_[^>]*>\@=:searchfortagsacrosspossiblemultiplelines
"多行查找\_的意思是包括换行符
/<!--\_p\{-}-->:匹配<!--开始到-->结尾的所有内容
/fred\_s*joe/i:匹配fred开始到joe,之间一定得是空白字符
/bugs\(\_.\)*bunny:匹配所有bugs到bunny的字符串
:h\_:help
"查找函数声明,nmap为normal模式下的键盘映射
:nmapgxyiw/^\(sub\<bar>function\)\s\+<C-R>"<CR>
"查找多个文件
:bufdo/searchstr/:在多个文件缓冲区里执行查找
"更好的多文件查找定位方法
:bufdo%s/searchstr/&/gic:在多个文件缓冲区里查找,按下n停止
"怎样不使用/来查找网址
?http://www.vim.org/:向后查找
"查找指定字符以外的字符串
/\c\v([^aeiou]&\a){4}:查找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}//:删除连续3个空行
:%s/^\n\+/\r/:压缩空行,多个替换为一个
%s#<[^>]\+>##g:删除html的tag部分
"IFYOUONLYWANTTOKNOWONETHING
:'a,'bg/fred/s/dick/joe/igc:非常有用
#译释:''a,''b指定一个范围:marka~markb
#g//用一个正则表达式指出了进行操作的行必须可以被fred匹配
#看后面,g//是一个全局显示命令
#s/dick/joe/igc则对于这些满足条件的行进行替换
"复制列
:%s=[^]\+$=&&=:复制最后一列
:%s=\f\+$=&&=:一样
:%s=\S\+$=&&:晕,还一样!
"记忆(反向引用)
:s/\(.*\):\(.*\)/\2:\1/:将两个字段颠倒
:%s/^\(.*\)\n\1$/\1/:删除重复行
"非贪婪匹配\{-}
:%s/^.\{-}pdf/new.pdf/:删除第一个pdf
"useofoptionalatom\?
:%s#\<[zy]\?tbl_[a-z_]\+\>#\L&#gc:lowercasewithoptionalleadingcharacters
"跨越尽量多的行
:%s/<!--\_.\{-}-->//:删除多行注释
:help/\{-}:查看非贪婪匹配的更多帮助
"使用寄存器替换
:s/fred/<c-r>a/g:将fred替换为寄存器a里的内容
:s/fred/<c-r>asome_text<c-r>s/g
:s/fred/\=@a/g:betteralternativeasregisternotdisplayed
"在一行里写多种命令
:%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\+\)\{2}\)str1:\1str2:
"交换第一列跟第四列
:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
"过滤form中的内容放在寄存器里
:redir@*|silexec'g#<\(input\|select\|textarea\|/\=form\)\>#p'|redirEND
:nmap,z:redir@*<Bar>silexec'g@<\(input\<Bar>select\<Bar>textarea\<Bar>/\=form\)\>@p'<Bar>redirEND<CR>
"两位以上的数字减三(带进位。这个命令挺有趣)
:%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/
:hzero-width查看帮助
"替换一个特定字符串为数字
:leti=10|'a,'bg/Abc/s/yy/\=i/|leti=i+1#将yy转换成10,11,12等等
"比上面的更精确
:leti=10|'a,'bg/Abc/s/xx\zsyy\ze/\=i/|leti=i+1#将xxyy转换成xx11,xx12,xx13
"findreplacementtext,putinmemory,thenuse\zstosimplifysubstitute
:%s/"\([^.]\+\).*\zsxx/\1/
"PullwordundercursorintoLHSofasubstitute
:nmap<leader>z:%s#\<<c-r>=expand("<cword>")<cr>\>#
"PullVisuallyHighlightedtextintoLHSofasubstitute
:vmap<leader>z:<C-U>%s/\<<c-r>*\>/
----------------------------------------
"allfollowingperformingsimilartask,substitutewithinsubstitution
"Multiplesinglecharactersubstitutioninaportionoflineonly
:%s,\(all/.*\)\@<=/,_,g:replaceall/with_AFTER"all/"
"Samething
:s#all/\zs.*#\=substitute(submatch(0),'/','_','g')#
"Substitutebysplittingline,thenre-joining
:s#all/#&^M#|s#/#_#g|-j!
"Substituteinsidesubstitute
:%s/.*/\='cp'.submatch(0).'all/'.substitute(submatch(0),'/','_','g')/
----------------------------------------
"全局显示命令
:g/gladiolli/#:查找并显示匹配的行号
:g/fred.*joe.*dick/:显示所有含有fred,joe&dick的行
:g/\<fred\>/:显示单一单词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:Deleteemptylines(bothtypes)
:v/./,/./-j:压缩空行
:g/^$/,/./-j:同上
:g/<input\|<form/p:或运算
: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到markera(a为标记的位置)
:g/\(^I[^^I]*\)\{80}/d:删除最少包含80个tab的行
"performasubstituteoneveryotherline
:g/^/ifline('.')%2|s/^/zz/
"matchalllinescontaining"somestr"betweenmarkersa&b
"copyafterlinecontaining"otherstr"
:'a,'bg/somestr/co/otherstr/:co(py)ormo(ve)
"asabovebutalsodoasubstitution
:'a,'bg/str1/s/str1/&&&/|mo/str2/
:%normjdd:隔行删除
"增加数字(键入<c-a>)
:.,$g/^\d/exe"norm!\<c-a>":增加从当前行首到结尾的数字
:'a,'bg/\d\+/norm!^A:增加数字
"保存全局命令的结果(注意必须使用添加模式)你需要使用qaq清空寄存器a.
"saveresultstoaregister/pastebuffer存储结果到寄存器/粘贴到a
:g/fred/yA:添加配备行到寄存器到a
:g/fred/yA|:let@*=@a:放入复制缓冲区
:let@a=''|g/Barratt/yA|:let@*=@a
:'a,'bg/^Error/.w>>errors.txt
"复制每一行,然后在复制出来的每一行两侧加上一个print'复制出来的内容'
:g/./yank|put|-1s/'/"/g|s/.*/Print'&'/
"用文件中的内容替换字符串,-d表示删除“标记”
:g/^MARK$/rtmp.ex|-d
"displayprettily
:g/<pattern>/z#.5:displaywithcontext
:g/<pattern>/z#.5|echo"==========":displaybeautifully
"Combiningg//withnormalmodecommands
:g/|/norm2f|r*:replace2nd|withastar
"sendoutputofpreviousglobalcommandtoanewwindow
:nmap<F3>:redir@a<CR>:g//<CR>:redirEND<CR>:new<CR>:put!a<CR><CR>
----------------------------------------
"全局命令和替换命令联姻(强大的编辑能力)
:'a,'bg/fred/s/joe/susan/gic:可以使用反向引用来匹配
:g/fred/,/joe/s/fred/joe/gic:non-linebased(ultra)
----------------------------------------
"先找fred,然后找joe
:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
----------------------------------------
"createanewfileforeachlineoffileeg1.txt,2.txt,3,txtetc
:g/^/exe".w".line(".").".txt"
----------------------------------------
"Absolutelyessential
----------------------------------------
*#g*g#:查找当前光标下的单词(单个单词)(<cword>)(向前/向后)
%:匹配括号{}[]()
.:重复上次操作
@::重复上次的命令
matchit.vim:适%能匹配<script><?php等标记
<C-N><C-P>:插入模式下自动完成填词
<C-X><C-L>:行自动完成(超级有用)
/<C-R><C-W>:把单个<cword>单词放入搜索或者命令行
/<C-R><C-A>:把字符串中有的单词<CWORD>放入搜索或者命令行
:setignorecase:忽略大小写
:syntaxon:打开语法高亮Perl,HTML,PHP等等
:hregexp<C-D>:按ctrl+d得到包含regexp的列表
(按tab自动不齐)
----------------------------------------
"简单编辑更新_vimrc文件
:nmap,s:source$VIM/_vimrc:普通模式下的键盘映射,s映射成加载用户目录下的_vimrc文件
:nmap,v:e$VIM/_vimrc:,v映射成打开_vimrc文件
----------------------------------------
#VISUAL模式(方便增加HTML标签)
:vmapsb"zdi<C-R>z<ESC>:在VISUALLY模式下将选中的文本前后分别加上
:vmapst"zdi<?=<C-R>z?><ESC>:加上<?=?>
----------------------------------------
"浏览
:Exp(lore):浏览文件
:Sex(plore):分割窗口浏览文件
:ls:显示缓冲区
:cd..:设置当前目录位置
:args:查看当前打开的所有文件
:lcd%:p:h:改变路径到当前编辑的文件
:autocmdBufEnter*lcd%:p:h:放入.vimrc自动完成上面的命令
----------------------------------------
"缓冲区浏览(一直排名前10的vim脚本)
"需要bufexplorer.vimhttp://www.vim.org/script.php?script_id=42
\be:缓冲浏览器中查看缓冲列表
\bs:同上,但是分割窗口
----------------------------------------
"转换大小写
guu:将正行的字母转换成小写
gUU:将正行的字母转换成大写
Vu:转换选中的行(小写)
VU:转换选中的行(大写)
g~~:反向转换
vEU:转换词大写
vE~:反向转换词
ggguG:将当前编辑文件内容全部转换成小写
"Visually模式下选择所有的字母及数字(放入.vimrc文件中)
vmap,c:s/\<\(.\)\(\k*\)\>/\u\1\L\2/g<CR>
"大写所有句子的第一个字母
:%s/[.!?]\_s\+\a/\U&\E/g
----------------------------------------
gf:打开当前光标下或后的文件
:nnoremapgF:view<cfile><cr>:打开当前光标下或后的文件,如果不存在则创建
ga:显示当前光标下单个字的ascii,十进制,十六进制……
ggVGg?:将整个文件用rot13编码……(谁看得懂啊~~hoho)
ggg?G:同上(针对大文件)
:8|normalVGg?:将第八行用rot13编码
:normal10GVGg?:同上
<C-A>,<C-X>:增加,减少当前光标下的数字
win32用户需要重定义CNTRL-A
<C-R>=5*5:插入25(小型计算器)
----------------------------------------
"几个彩蛋……
:h42:alsohttp://www.google.com/search?q=42
:hholy-grail
:h!
----------------------------------------
"标记&移动
'.:跳回最后编辑的行(超有用)
`.:同上,但是定位编辑点
g;:跳转到比较旧的编辑位置(如果有的话)(vim6.3后的新功能)
g,:这个是较心的位置(同上)
:changes:打出改变表
:hchangelist:查看“改变表跳转”的帮助
<C-O>:依次沿着你的跳转记录向回跳(从最近的一次开始)
<C-I>:依次沿着你的跳转记录向前跳
:ju(mps):列出跳转轨迹
:helpjump-motions
:history:列出历史记录
:hisc:命令行历史
:hiss:搜索历史
q/:搜索命令历史的窗口
q::命令行命令历史的窗口
:<C-F>:历史窗口
----------------------------------------
"缩写&映射
:map<f7>:'a,'bw!c:/aaa/x
:map<f8>:rc:/aaa/x
:map<f11>:.w!c:/aaa/xr<CR>
:map<f12>:rc:/aaa/xr<CR>
:abphp:查看以php开头的缩写
:map,:列出所有的映射(以逗号开始的)
"允许映射F10(win32)
setwak=no::hwinaltkeys
"映射中常使用的表示
<CR>:回车
<ESC>:Esc
<LEADER>:右斜杠
<BAR>:管道符号
<BACKSPACE>:退格键
<SILENT>:不回显
#显示自定义的RGB颜色显示当前光标下的字符串例如#445588
:nmap<leader>c:hiNormalguibg=#<c-r>=expand("<cword>")<cr><cr>
map<f2>/priceonly\\|versus/:inamapneedtobackslashthe\
----------------------------------------
"SimplePHPdebuggingdisplayallvariablesyankedintoregistera
"简单的PHP调试将所有显示的变量放入寄存器a
iabphpdbexit("<hr>Debug<C-R>a");
----------------------------------------
"使用寄存器来映射(放入.vimrc文件自动加载)
:let@m=":'a,'bs/"
:let@s=":%!sort-u"
----------------------------------------
"列出寄存器
:reg:显示当前所有的寄存器
:rega:显示寄存器a中的内容
"1p....:引用一个叫1的寄存器
:let@y='yy@"':pre-loadingregisters(putin.vimrc)
qqq:清空寄存器"q"
----------------------------------------
"一些有用的决窍
"ayy@a:把当前行作为命令执行
yy@":上面的匿名寄存器
u@.:只执行键入的命令
----------------------------------------
"从其它命令处获得输入(需要外部命令)
:r!ls.exe:从ls获得输入插入到当前位置
!!date:从date获得输入(删除当前行)
"使用外部sort排序
:%!sort-u:用sort排序整个文件(结果覆盖整个文件)
:'a,'b!sort-u:从marka到markb之间的内容进行排序
!1}sort-u:排序一个段落
:g/^$/;,/^$/-1!sort:Sorteachblock(notethecrucial;)
----------------------------------------
"多文件管理(基本的)
:bn:跳转到下一个buffer
:bp:跳转到前一个buffer
:wn:保存当前buffer并跳转到下一个buffer(超有用)
:wp:保存当前buffer并跳转到前一个buffer
:bd:把当前文件从buffer移出(超有用)
:bun:卸载当前buffer(关闭这个窗口但是不移出)
:baddfile.c:添加file.c到buffer列表
:b3:前往第三个buffer
:bmain:前往含有main的buffer中比如说main.c
:savphp.html:把当前文件存为php.html并打开
:sav!%<.bak:换一个后缀名保存(旧方法)
:sav!%:r.cfm:同上
:sav%:s/fred/joe/:替换文件名
:sav%:s/fred/joe/:r.bak2:替换文件和后缀
:!mv%%:r.bak:重命名当前文件
:e!:打开未修改之前的文件
:wc:/aaa/%:存储文件到指定位置
:e#:编辑标记为#的文件在buffer中
:rew:返回到第一个可编辑的文件
:brew:回到第一个buffer
:spfred.txt:分割窗口打开fred.txt
:sball,:sb:把所有的buffers分割显示在一个窗口中(超有用)
:scrollbind:ineachsplitwindow
:map<F5>:ls<CR>:e#:按F5显示所有buffer,并显示行号
:sethidden:允许不保存当前buffer而进行切换
----------------------------------------
"在分割窗口中快速切换
map<C-J><C-W>j<C-W>_
map<C-K><C-W>k<C-W>_
----------------------------------------
"录制命令(最好的技巧)
qq#录制命令放入q寄存器
输入一些命令
q#录制结束
@q:执行放入寄存器q中的内容
@@:重复
5@@:重复5次
"编辑一个寄存器/录制
"qp:显示寄存器q中的内容(普通模式下)
<ctrl-R>q:显示寄存器q中的内容(插入模式下)
"你现在可以看到记录内容,随便编辑
"qdd:删除,重新存入q
@q:执行录制/寄存器q
"在可视块中运行记录
1)定义记录/寄存器
qq:s/to/from/g^Mq
2)定义可视块
V}
3)键入:将显示下面信息
:'<,'>
4)完成如下操作
:'<,'>norm@q
----------------------------------------
"combiningarecordingwithamap(toendupincommandmode)
nnoremap]@q:w!<bar>bd
----------------------------------------
"可视化模式提供一种灵活易用的方法选择一块文本供操作符使用
"记出
v:进入可视化模式
V:进入可视化行选择模式
<C-V>:进入可视化块选择模式
gv:重新选择
o:选择的区域头尾移动
"*y:复制选择区域到pastebuffer
V%:选择一个匹配段
V}J:合并一个段落
V}gJ:合并一个段落,并保留空格
----------------------------------------
"删除选中的10行的前两个字符(不过这里应该假设是紧凑的排版格式,不能包含空格、tab等字符的,可是经实验应该是钱3个字符才对啊??)
0<c-v>10j2ld
----------------------------------------
"如何用可视块拷贝几列
"可视块(并非通常的v命令)
<C-V>,然后通过移动命令选择列(win32<C-Q>)
然后执行c,d,y,r等命令
----------------------------------------
"howtooverwriteavisual-blockoftextwithanothersuchblock
Pickthefirstblock:ctrl-vmove"ay
Pickthesecondblock:ctrl-vmovecctrl-o"aP<esc>
----------------------------------------
"_vimrc基本设置
:setincsearch:输入搜索命令时,立即显示目前输入的模式对应的匹配。匹配的字符串被高亮。
:setwildignore=*.o,*.obj,*.bak,*.exe:tab补全时忽略这些忽略这些
:setshiftwidth=3:设置自动缩进为3个字符
:setvbt_vb=".:安静模式,关闭响铃跟闪烁
:setbrowsedir=buffer:设置文件浏览使用的目录
“注:
”last使用文件浏览器最近访问相同的目录。
“buffer使用相关缓冲区的目录。
”current使用当前目录。
“{path}使用指定目录。
----------------------------------------
"启动windows中的IE
:nmap,f:update<CR>:silent!startc:\progra~1\intern~1\iexplore.exefile://%:p<CR>
:nmap,i:update<CR>:!startc:\progra~1\intern~1\iexplore.exe<cWORD><CR>
----------------------------------------
"在vim里打开ftp
cmap,r:Nreadftp://209.51.134.122/public_html/index.html
cmap,w:Nwriteftp://209.51.134.122/public_html/index.html
gvimftp://www.somedomain.com/index.html#使用netrw.vim
----------------------------------------
"向寄存器中添加内容(使用相应寄存器名称的大写)
"复制5行放入a寄存器,然后向下跳转10行再复制5行
"a5yy
10j
"A5yy
----------------------------------------
[I:显示当前行中字符的所有匹配(超级有用)
----------------------------------------
"常规缩进
:'a,'b>>:将marka到markb之间的内容进行两次缩进
"虚拟模式下缩进(可重复)
:vnoremap<<gv
”这是一个虚拟模式下的键盘映射<映射为<gv
"<意为向内缩进,gv上面已有解释,为重复上次选区
“<gv也就是先向内缩进然后再选择刚才的选区
“这样就可以只按<实现重复缩进了
:vnoremap>>gv:向内缩进,原理同上
"块缩进
>i{
>a{
"also
>%and<%
”自己试试看吧,涉及到用{的语言很有用,比如c,c++等
----------------------------------------
"重定向&粘贴到寄存器*(*为寄存器名称)
:redir@*:重定向命令到paste缓冲区
:redirEND:结束
:redir>>out.txt:重定向到文件
"操作粘贴缓冲区
"*yy:复制到寄存器
"*p:从寄存器中粘贴一行
"复制到粘贴缓冲区(扩展模式)
:'a,'by*:复制一个范围到粘贴寄存器
:%y*:复制一个括号匹配到粘贴缓冲区
:.y*:复制当前行到粘贴缓冲区
"从剪贴板上过滤非可打印字符
"当从一些GUI程序粘贴时会有用处
:nmap<leader>p:let@*=substitute(@*,'[^[:print:]]','','g')<cr>"*p
----------------------------------------
"重新格式化文本
gq}:合并一个段落
gqap:当前段落
ggVGgq:全部段落
Vgq:当前行
"在70列的时候换行
:s/.\{,69\};\s*\|.\{,69\}\s\+/&\r/g
----------------------------------------
"命令使用于多个文件
:argdo%s/foo/bar/e:在所有文件上操做:args
:bufdo%s/foo/bar/e
:windo%s/foo/bar/e
:argdoexe'%!sort'|w!:包含外部命令
----------------------------------------
"命令行技巧
gvim-h:显示帮助
ls|gvim-:管道操作
catxx|gvim--c"v/^\d\d\|^[3-9]/d":从管道出过滤内容
gvim-ofile1file2:分割窗口显示两个文件
"打开文件后执行一条命令
gvim.exe-c"/main"joe.c:打开joe.c&跳转到"main"
"在打开一个文件时执行多条命令
vim-c"%s/ABC/DEF/ge|update"file1.c
"在一组文件上执行多条命令
vim-c"argdo%s/ABC/DEF/ge|update"*.c
"从一系列文件中删除一块区域
vim-c"argdo/begin/+1,/end/-1g/^/d|update"*.c
"自动编辑文件(编辑命令序列Excommands已经包含在convert.vim中了)
vim-s"convert.vim"file.c
#不加载.vimrc跟任何plugin(干净清新的VIM^_^)
gvim-uNONE-UNONE-N
"Accesspastebuffercontents(putinascript/batchfile)
gvim-c'normalggdG"*p'c:/aaa/xp
"将paste中的内容送往默认的打印机
gvim-c's/^/\=@*/|hardcopy!|q!'
"gvim里的grep(win32or*nix)
:grepsomestring*.php:创建匹配的文件列表
"使用:cn(向后后):cp(向前)操纵列表
:hgrep:查看帮助
----------------------------------------
"GVIM的差异比较
gvim-dfile1file2:vimdiff(比较不差异)
dp:把光标处的不同放到另一个文件
do:在光标处从另一个文件取得不同
----------------------------------------
"Vimtraps
在正则表达式中+|({都要加上转义符(反斜杠)
/fred\+/:匹配fred/freddy但不匹配free
/\(fred\)\{2,3}/:notewhatyouhavetobreak
----------------------------------------
"\v,或叫做verymagic(通常都是这么叫)可以取消转义符
/codes\(\n\|\s\)*where:普通的正则表达式
/\vcodes(\n|\s)*where:verymagic
----------------------------------------
"把对象送到命令行或者搜索行
<C-R><C-W>:执行当前光标下的单个单词
<C-R><C-A>:执行当前光标下尽可能多的单词
<C-R>-:送至一个小型寄存器(同样使用于插入模式)
<C-R>[0-9a-z]:送至一个命名寄存器(括弧同上)
<C-R>%:送至文件名(#也行)(同上)
<C-R>=somevar:送至一个变量(例如:letsray="ray[0-9]")
----------------------------------------
"控制寄存器
:let@a=@_:清除寄存器a
:let@a="":同上a
:let@*=@a:拷贝寄存器a到pastebuffer
:let@*=@::拷贝最后执行的命令到pastebuffer
:let@*=@/:拷贝最后执行的查找命令到pastebuffer
:let@*=@%:拷贝当前文件到pastebuffer

map<f11>"qyy:let@q=@q."zzz"
----------------------------------------
"帮助的帮助?(使用TAB)
:hquickref:VIM快速参考页
:htips:Vim'自己的技巧帮助
:hvisual<C-D><tab>:虚拟模式的帮助列表
:然后使用tab选择它们
:hctrl<C-D>:所有关于ctrl键的帮助列表
:helpguganda:过滤帮助文件使用:cn,:cp查找下一个及后一个
:h:r:关于:ex的命令帮助
:hCTRL-R:普通模式相关
:h/\r:\r是什么的意思
:h\\zs:使用双反斜线查找关于\zs的帮助
:hi_CTRL-R:在插入模式中<C-R>的解释
:hc_CTRL-R:在命令模式中<C-R>的解释
:hv_CTRL-V:虚拟模式
:htutor:VIM快速指南
<C-[>,<C-T>:Moveback&ForthinHELPHistory
gvim-h:VIM命令行帮助
----------------------------------------
"选项设置在那里
:scriptnames:列出所有已经加载的plugins,_vimrcs文件
:verbosesethistory?:显示history的值并显示在那里定义的
:function:列出所有函数
:funcSearchCompl:显示指定函数的细节
----------------------------------------
"制作你自己的VIM帮助
:helptags/vim/vim64/doc:重新编译所有*.txt的帮助文件在这个目录里
:helpadd-local-help:如何添加本地帮助
----------------------------------------
"用外部程序运行文件(例如php)
map<f9>:w<CR>:!c:/php/php.exe%<CR>
map<f2>:w<CR>:!perl-c%<CR>
----------------------------------------
"在另一个buffer中,捕捉当前脚本的输出
:new|r!perl#:新建一个buffer,从另一个buffer中读入结果
:new!x.out|r!perl#:同上,并指定一个新文件名
:new+read!ls
----------------------------------------
"createanewbuffer,pastearegister"q"intoit,thensortnewbuffer
:new+putq|%!sort
----------------------------------------
"插入DOS换行符
:%s/$/\<C-V><C-M>&/g:(that'swhatyoutype
:%s/$/\<C-Q><C-M>&/g:forWin32)对于Win32应该这样
:%s/$/\^M&/g:你看到的^M是一个字符
----------------------------------------
"自动删除行尾Dos回车符和空格
autocmdBufRead*silent!%s/[\r\t]\+$//
autocmdBufEnter*.php:%s/[\t\r]\+$//e
----------------------------------------
"对指定文件或文件类型执行某个动作
autocmdVimEnterc:/intranet/note011.txtnormal!ggVGg?
autocmdFileType*.plexec('setfileformats=unix')
----------------------------------------
"把最后一个命令贴到当前位置
i<c-r>:
"把最后一个搜索指令贴到当前位置
i<c-r>/
----------------------------------------
"更多的完成功能
<C-X><C-F>:插入当前目录下的一个文件名到当前位置
#在insert模式下使用
#然后用Ctrl-P/Ctrl-N翻页
----------------------------------------
"替换一个visual区域
"选择一个区域,然后输入:s/Emacs/Vim/等等,vim会自动进入:模式
:'<,'>s/Emacs/Vim/g:前面的''<.'>是vim自动添加的
gv:重新选择前一个可视区域(ULTRA)
----------------------------------------
"在文件中插入行号
:g/^/exec"s/^/".strpart(line(".")."",0,4)
:%s/^/\=strpart(line(".")."",0,5)
:%s/^/\=line('.').''
----------------------------------------
#用VIM的方式来编号行
:setnumber:显示行号
:map<F12>:setnumber!<CR>:Showlinenumbersflip-flop
:%s/^/\=strpart(line('.')."",0,&ts)
#从任意行开始编号(需要perl)
:'a,'b!perl-pne'BEGIN{$a=223}substr($_,2,0)=$a++'
#产生数字列表
#Typeinnumberonlinesay223inanemptyfile
qqmnYP`n^Aq:inrecordingqrepeatwith@q
"递增已存在数字到文件末
:.,$g/^\d/exe"normal!\<c-a>"
"高级递增,参见:
http://vim.sourceforge.net/tip_view.php?tip_id=150
----------------------------------------
"高级递增(真的很有用)
"把下面几句放到_vimrc
letg:I=0
function!INC(increment)
letg:I=g:I+a:increment
returng:I
endfunction
"例如从marka到markb递增,从223开始,步长为5
:letI=223
:'a,'bs/^/\=INC(5)/
"createamapforINC
cabviminc:letI=223\|'a,'bs/$/\=INC(5)/
----------------------------------------
"生成从23-64的数字列表
o23<ESC>qqYp<C-A>q40@q
----------------------------------------
"在当前插入模式下编辑/移动(真得很有用)
<C-U>:删除全部
<C-W>:删除最后一个单词
<HOME><END>:移动到行首/行尾
<C-LEFTARROW><C-RIGHTARROW>:向前/后移动一个单词
<C-X><C-E>,<C-X><C-Y>:scrollwhilestayingputininsert
----------------------------------------
#加密(小心使用,不要忘了密码)
:X:vim会提示你输入密码
:h:X
----------------------------------------
"模式行(使文件只读等),必须在前/后5行内
//vim:noai:ts=2:sw=4:readonly:
"vim:ft=html::使用HTML语法高亮
:hmodeline
----------------------------------------
"建立你自己的菜单项
amenuModeline.Insert\a\VIM\modeline<Esc><Esc>ggOvim:ff=unixts=4ss=4<CR>vim60:fdm=marker<esc>gg
----------------------------------------
"一个保存当前光标下的狭义字到一个文件的函数
function!SaveWord()
normalyiw
exe':!echo'.@0.'>>word.txt'
endfunction
map,p:callSaveWord()
----------------------------------------
"删除重复行的函数
function!Del()
ifgetline(".")==getline(line(".")-1)
normdd
endif
endfunction

:g/^/callDel()#使用该函数的一个例子
----------------------------------------
"双字节编码(nonalpha-numerics)
:digraphs:显示编码表
:hdig:帮助
i<C-K>e':输入é
i<C-V>233:输入é(Unix)
i<C-Q>233:输入é(Win32)
ga:查看字符的hex值
#删除非ascii字符
:%s/[<C-V>128-<C-V>255]//gi:whereyouhavetotypetheControl-V
:%s/[€-?]//gi:Shouldseeablacksquare&adottedy
:%s/[<C-V>128-<C-V>255<C-V>01-<C-V>31]//gi:Allpeskynon-asciis
:exec"norm/[\x00-\x1f\x80-\xff]/":samething
#Pullanon-asciicharacterontosearchbar
yl/<C-R>":
/[^a-zA-Z0-9_[:space:][:punct:]]:searchforallnon-ascii
----------------------------------------
"文件名自动完成(例如main_c.c)
:emain_<tab>:tab键完成
gf:打开光标处广义字命名的文件(normal模式)
main_<C-X><C-F>:文件名自动完成(insert模式)
----------------------------------------
"Vim复杂使用
"交换两个单词
:%s/\<\(on\|off\)\>/\=strpart("offon",3*("off"==submatch(0)),3)/g
"交换两个单词
:vnoremap<C-X><Esc>`.``gvP``P
----------------------------------------
"把text文件转换成html文件(oh,ft)
:runtime!syntax/2html.vim:转换txt成html
:h2html
----------------------------------------
"VIM有一个内部自带的grep命令
:grepsome_keyword*.c:得到一个包含some_keyword的c文件名列表
:cn:去下一个出现的位置
----------------------------------------
"强制无扩展名的文件的语法着色方式
:setsyntax=perl
"取消语法着色(很有用)
:setsyntaxoff
"改变色彩主题(在~vim/vim??/colors中的任何文件)
:colorschemeblue
"通过使用模式行强迫使用HTML语法高亮
#vim:ft=html:
"强制自动语法加亮(非标准的文件扩展)
auBufRead,BufNewFile*/Content.IE?/*setfiletypehtml
----------------------------------------
:setnoma(nonmodifiable):防止修改
:setro(ReadOnly):只读保护
----------------------------------------
"对话(打开一堆文件)
gvimfile1.cfile2.clib/lib.hlib/lib2.h:在"对话"中加载这些文件
:mksession:生成一个Session文件(默认是Session.vim)
:q
gvim-SSession.vim:重新加载所有文件
----------------------------------------
#标记(tags)(跳转到子程序/函数)
taglist.vim:很流行的插件
:Tlist:显示标记(函数列表)
<C-]>:跳转到光标处的函数
----------------------------------------
"columniseacsvfilefordisplayonlyasmaycropwidecolumns
:letwidth=20
:letfill=''|whilestrlen(fill)<width|letfill=fill.fill|endwhile
:%s/\([^;]*\);\=/\=strpart(submatch(1).fill,0,width)/ge
:%s/\s\+$//ge
"Highlightaparticularcsvcolumn(putin.vimrc)
function!CSVH(x)
execute'matchKeyword/^\([^,]*,\)\{'.a:x.'}\zs[^,]*/'
execute'normal^'.a:x.'f,'
endfunction
command!-nargs=1Csv:callCSVH(<args>)
"callwith
:Csv5:highlightfifthcolumn
----------------------------------------
"折叠:隐藏某些片断,使查看更容易
zf}:使用动作命令折叠一个段落
v}zf:使用可视模式折叠一个段落
zf'a:折叠到一个标记上
zo:打开折叠
zc:重新关闭折叠
----------------------------------------
"显示"不可见字符"
:setlist
:hlistchars
----------------------------------------
"如何在不进入插入模式的情况下粘贴"普通模式的命令"
:normqqy$jq
----------------------------------------
"处理文件名
:hfilename-modifiers:帮助
:w%:写入当前文件
:w%:r.cfm:改变文件扩展名为.cfm
:!echo%:p:显示完整路径和文件名
:!echo%:p:h:只显示完整路径
:!echo%:t:只显示文件名
:reg%:显示文件名
<C-R>%:插入文件名(插入模式)
"%p:插入文件名(普通模式)
/<C-R>%:在文本中查找文件名
----------------------------------------
"删除,但不破坏buffer内容
"_d:你一直想要的东西
"_dw:例如:删除一个单词(使用黑洞???)
----------------------------------------
"送完整的路径名到剪贴板,用于邮件附件等
nnoremap<F2>:let@*=expand("%:p")<cr>:unix
nnoremap<F2>:let@*=substitute(expand("%:p"),"/","\\","g")<cr>:win32
----------------------------------------
"不用离开Vim就能修改文件名的简单shell脚本
$vim
:r!ls*.c
:%s/\(.*\).c/mv&\1.bla
:w!sh
:q!
----------------------------------------
"在一个文本里计算单词数
g<C-G>
----------------------------------------
"你自己设置高亮显示的例子
:synmatchDoubleSpace""
:hidefDoubleSpaceguibg=#e0e0e0
----------------------------------------
"reproducepreviouslinewordbyword
imap]@@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s
nmap]i@@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s
"根据文件类型映射快捷键
:autocmdbufenter*.texmap<F1>:!latex%<CR>
:autocmdbufenter*.texmap<F2>:!xdvi-hush%<.dvi&<CR>
----------------------------------------
"读取MS-Word文档,需要antiword
:autocmdBufReadPre*.docsetro
:autocmdBufReadPre*.docsethlsearch!
:autocmdBufReadPost*.doc%!antiword"%"
----------------------------------------
"afoldingmethod
vim:filetype=helpfoldmethod=markerfoldmarker=<<<,>>>
Areallybigsectionclosedwithatag<<<
---rememberfoldscanbenested---
Closingtag>>>
----------------------------------------
"JustAnotherVimHackerJAVH
vim-c":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|normVg?"
#译释:呵呵,谁来解释一下吧!
#其实不过是在启动vim的时候执行了一个命令
#先写入了JustAnotherVimHacker的rot13编码
#然后再解码
----------------------------------------
__END__
--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值