`
wodamazi
  • 浏览: 1416574 次
文章分类
社区版块
存档分类
最新评论

vim-正则表达式3

 
阅读更多

vim正则表达式

作者:ACE封印来源:博客园发布时间:2011-04-29 13:48阅读:133 次原文链接[收藏]
vim正则表达式
元字符 说明
. 匹配任意一个字符
[abc] 匹配方括号中的任意一个字符。可以使用-表示字符范围,
如[a-z0-9]匹配小写字母和阿拉伯数字。
[^abc] 在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。
\d 匹配阿拉伯数字,等同于[0-9]。
\D 匹配阿拉伯数字之外的任意字符,等同于[^0-9]。
\x 匹配十六进制数字,等同于[0-9A-Fa-f]。
\X 匹配十六进制数字,等同于[^0-9A-Fa-f]。
\w 匹配单词字母,等同于[0-9A-Za-z_]。
\W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]。
\t 匹配<TAB>字符。
\s 匹配空白字符,等同于[ \t]。
\S 匹配非空白字符,等同于[^ \t]。
\a 所有的字母字符. 等同于[a-zA-Z]
\l 小写字母 [a-z]
\L 非小写字母 [^a-z]
\u 大写字母 [A-Z]
\U 非大写字母 [^A-Z]
表示数量的元字符
元字符 说明
* 匹配0-任意个
\+ 匹配1-任意个
\? 匹配0-1个
\{n,m} 匹配n-m个
\{n} 匹配n个
\{n,} 匹配n-任意个
\{,m} 匹配0-m个
\_. 匹配包含换行在内的所有字符
\{-} 表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好
\= 匹配一个可有可无的项
\_s 匹配空格或断行
\_[]
元字符 说明
\*匹配 * 字符。
\.匹配 . 字符。
\/匹配 / 字符。
\\匹配 \ 字符。
\[匹配 [ 字符。
表示位置的符号
元字符 说明
$ 匹配行尾
^ 匹配行首
\< 匹配单词词首
\> 匹配单词词尾
替换变量
在正规表达式中使用 \( 和 \) 符号括起正规表达式,即可在后面使用\1、\2等变量来访问 \( 和 \) 中的内容。
懒惰模式
\{-n,m} 与\{n,m}一样,尽可能少次数地重复
\{-} 匹配它前面的项一次或0次, 尽可能地少
\|"或"操作符
\&并列
函数式
:s/替换字符串/\=函数式
在函数式中可以使用 submatch(1)、submatch(2) 等来引用 \1、\2 等的内容,而submatch(0)可以引用匹配的整个内容。
与Perl正则表达式的区别 ?
元字符的区别
Vim语法 Perl语法 含义
\+ + 1-任意个
\? ? 0-1
\{n,m} {n,m} n-m
\(和\) (和)分组
例如:
1,去掉所有的行尾空格:“:%s/\s\+$//”。“%”表示在整个文件范围内进行替换,“\s”表示空白字符(空格和制表符),“\+”对前面的字符匹配一次或多次(越多越好),“___FCKpd___0rdquo;匹配行尾(使用“\___FCKpd___0rdquo;表示单纯的“___FCKpd___0rdquo;字符);被替换的内容为空;由于一行最多只需替换一次,不需要特殊标志。这个还是比较简单的。(/<Space><Tab>)
2,去掉所有的空白行:“:%s/\(\s*\n\)\+/\r/”。这回多了“\(”、“\)”、“\n”、“\r”和 “*”。“*”代表对前面的字符(此处为“\s”)匹配零次或多次(越多越好;使用“\*”表示单纯的“*”字符),“\n”代表换行符,“\r”代表回车符,“\(”和“\)”对表达式进行分组,使其被视作一个不可分割的整体。因此,这个表达式的完整意义是,把连续的换行符(包含换行符前面可能有的连续空白字符)替换成为一个单个的换行符。唯一很特殊的地方是,在模式中使用的是“\n”,而被替换的内容中却不能使用“\n”,而只能使用“\r”。原因是历史造成的,详情如果有兴趣的话可以查看“:help NL-used-for-Nul”。
3,去掉所有的“//”注释:“:%s!\ s*//.*!!”。首先可以注意到,这儿分隔符改用了“!”,原因是在模式或字符串部分使用了“/”字符,不换用其他分隔符的话就得在每次使用“/”字符本身时写成“\/”,上面的命令得写成“:%s/\s*\/\/.*//”,可读性较低。命令本身倒是相当简单,用过正则表达式的人估计都知道“.”匹配表示除换行符之外的任何字符吧。
4,去掉所有的“/* */”注释:“:%s!\s*/\*\_.\{-}\*/\s*! !g”。这个略有点复杂了,用到了几个不太常用的 Vim 正则表达式特性。“\_.”匹配包含换行在内的所有字符;“\{-}”表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好;标志“g”表示一行里可以匹配和替换多次。替换的结果是个空格的目的是保证像“int/* space not necessary around comments */main()”这样的表达式在替换之后仍然是合法的。
:g/^\s*$/d删除只有空白的行
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1将 data1 data2 修改为 data2 data1
:%s/\(\w\+\), \(\w\+\)/\2 \1/将 Doe, John 修改为 John Doe
:%s/\<id\>/\=line(".")将各行的 id 字符串替换为行号
:%s/\(^\<\w\+\>\)/\=(line(".")-10) .".". submatch(1)
将每行开头的单词替换为(行号-10).单词的格式,如第11行的word替换成1. word
排序 :/OB/+1,$!sort

vim使用疑问解答:

Q:vim如何支持ftp操作:
A:打开:e ftp://192.168.10.76/abc.txt
保存(如果不存在则创建) :w ftp://192.168.10.76/abc.txt
读取:r ftp://192.168.10.76/abc.txt
以上操作第一次打开时需要输入用户名和密码,以后就不用了,

Q:vi 处理多个文件编辑有什么法子?
A:1)vi file1 file2 file3...
2)假设你正在编辑 file1,那么用 :args <CTRL-R>;% file2 file3

Q:如何删除连续两行之间的回车符,使连续的两行成为一行?
A:Jx

Q:怎么将一定段落中的某个词替换成另一个词啊?
A:替换用 s/abc/def/ 这样,就可以把 abc 换成 def
一个简便的方法是,先在 visual 模式下想办法选中你要操作的范围,然后再输入 s 命令就可以替换了。
比如你要操作一个段落,可以先用 { 或者 [[ 挪到段落的开始处,然后再用 v 进入 visual 模式,
然后再用 } 或者 ]] 挪到段落的结尾处,然后再输入 s 命令就可以实现你的目的了

Q:vim中光标在C函数和系统调用上时,按K进入man手册页,可是如果应用程序也有这个名字,比方说readlink,按下K就进入那个应用程序的man页了,
如果我想取得在shell中man 2 readlink这样的效果,该怎么办
A:先按下2,然后shift+k,就进入系统调用man页了

Q:在vi中,怎么选中指定的几行,然后进行规整格式之类的命令?比如用V可以进入虚拟模式,然后上下就可以选中几行,然后用=规整格式。如果我想选中的行比较多,有没有比较好的办法呢?
A:V 打开"可视模式"(不是虚拟模式,虚拟是 virtual)后,可以有很多种办法移动光标的,不一定非得用 h j k l , 比如可以搜索定位, 也可以用 [[ ]] ][ [] } { 等段落定位的命令.
v]] v[[ v}这样就可以选中一大块,而不用一行一行地选,还有 H L 这些都可以用.详细请 help motion
另外, vim 内置了很多以 a 打头的文本对象, 如 a{ 表示一个 {} 块, ap 表示一个段落等等。=a{ 就可以重排当前语法块.

Q:=a{命令重排后,是按2个TAB键进行缩进的?想让它按一个TAB键缩进,该如果处理?谢谢! 在Visual状态下,如何选择整个文件?
A:全选的命令是 ggVG gg表示到第一行第一个字母,V进入visual lineG则到文件尾。
至于=a{重排,应该跟shiftwidth、softtabstop、tabstop、expandtab等设置有关。具体看你是怎么设置的。
我的是把TAB全部设置成4个空格了。
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set cindent
set ai

Q:从win2k telnet到rh7.3使用vim编辑C文件时候,如何处理Ctrl+]呢?
A:vt100 不支持。用 ansi 终端,或者干脆改用 NetTerm 等软件,.

Q:vim支持语法高亮度显示,那么vim是否支持将语法高亮度显示的结果保存为一个html文档呢?
A::TOhtml

Q:vim如何把 “调用外部程序得到的输出” 转移到它自己一个新型的窗口里?比如我调用:!objdump -S %:p:r<cr>;怎样让VIM产生一个新的BUFFER或者窗口,捕获它的输出?
A::split +enew | r !ls
split :分割窗口split {+cmd} 表示打开一个新窗口,并在新窗口中执行 {cmd} 命令
split +enew 就是打开一个新窗口,并且在其中执行 enew 这个命令
enew打开一个新的无名buffer| 命令分割符 r read!ls执行外部命令

Q:在vim中如何 进行块复制 删除等 块操作
A::v进入可视模式,hjkl选中要选中的块。y:复制、d:删除/剪切、p:粘贴
v: visual mode//和普通的选择没区别
V: visual line mode//在此模式下,选择的基本单位是行,即:要么就选一行,要么就什么都不选
Ctrl-V: visual block mode//此模式下,可以选择一个块。

Q:能不能读入(解析)一个html文件呢?就是去掉html的的标记,象浏览器一样读入html??
A:vim 是个文本编辑器,不是 html 浏览器。去掉标记:%s/<[^>;]*>;//g

Q:写C的时候,如果要把一段注释掉,有什么方法?
A::vmap <F2>; :s/^/\/\//<CR>;选中内容,按 F2。

Q:缩写
A::ab cu chinaunix 以后就可以自己写cu(空格 or 回车 or tab后)vi自动把cu替换成chinaunix

Q:在vi中,如果我不小心按错了键,跑到文件头或者文件尾了,怎么能快速回到刚才光标所在的位置?
A:vi 中不知道。 vim 中可以用 Ctrl+o(欧) 回来。

Q:如果我键入if,再回车,下一行就自动缩进,直到输入endif再和if对齐,vi中不知道怎么实现这个功能
A::set ai的命令来启动自动缩进。用:syntax on命令来启动语法着色。一般都是写在.exrc中每次自动执行的

Q:用什么快捷键可以在"插入模式"下删除光标到行尾的字符
A:^od$ ^o 表示同时按住 Ctrl 和 O 键。

Q:set autoindent 与 set cindent 区别
A:autoindent 就是自动缩进的意思,当你在输入状态用回车键插入一个新行,或者在 normal 状态用 o 或者 O 插入一个新行时,autoindent 会自动地将当前行的缩进拷贝到新行,也就是上面这位网友说的“自动对齐”,当然了,如果你在新行没有输入任何字符,那么这个缩进将自动删除。
cindent 就不同了,它会按照 C 语言的语法,自动地调整缩进的长度,比如,当你输入了半条语句然后回车时,缩进会自动增加一个 TABSTOP 值,当你键入了一个右花括号时,会自动减少一个 TABSTOP 值。

Q:如何比较快速简单地用一段文字替换文章中的多处不同文字 如:用“为人民服务”来代替
A::%s/TNND\|TMD\|XXX\|FUCK/为人民服务

Q:用vi怎么copy一行,到另外的一个vi打开的文件中
A:Step1 yy Step2 :vi file2 Step3 p

Q:怎么实现vim内,打一个括号如 "("自动补全另一个括号
A::iab ( ()

Q:如何删除所有的偶数行?
A:<ESC>;ggqajddq10000@a假设你的文本有不到 20000 行,那么输入以上的命令就可以删除所有的偶数行。

Q:隔两行插入一个空行:
A:ggqajo<ESC>;jq1000@a

Q::set tabstop=4 按tab缩进4了..可是退出vi再进 还是8啊..怎么办?
A:你可以在用户目录下建文本.exrc,在里面写上set ts=4就可,下次进入时按tab就只有4格了

Q:怎么在vi里面更方便的删除一段内容?
A:首先在你需要考贝头,mark为ma,然后下移或上移到考贝尾,在命令模式输入d'a 或者在ex模式输入:.,'ad<CR>;

Q:请问vim有配制文件吗?有的话放在哪里
A:根据你的系统类型及配置情况的不同,vim 配置文件的路径也会不同,所以具体请参照 :help vimrc

Q:怎样让 vim 在打开不同文件的时候在开头写入不同的内容。 例如在打开一个后缀名为 cpp 的空文件的时候写入
#include <iostream>;
using namespace std;
A:[code] autocmd BufNewFile *.cpp exec append(0,"#include <iostream>;") | exec append(1,"using namespace std;") | exec ':$' [/code]

Q:如何实现一下删除多行,或是整个文件中的所有行
A::%d ggdG

Q:源代码比较混乱,有没有办法格式化呢?
A:gg=G

Q:使用:args可以查看你正在编辑哪个文件,但是我在C语言环境下,使用Ctrl-]跳转到函数定义地方以后,怎么知道我现在位于哪个文件呢?
A:Ctrl+g


分享到:
评论

相关推荐

    vim正则表达式的使用

    vim正则表达式的使用,轻松处理文本文件

    VIM正则表达式查找替换[PDF电子教程]

    VIM,很好很强大;正则表达式亦是如此。将两者有机结合起来,使工作效率更高。本教程面向正则表达式爱好者或有一定基础的VIM用户。非常之详细。

    grep用法详解---grep与正则表达式

    首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同! 正则表达式只是一种表示法,只要工具支持这种表示法, ...vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大。

    Vim中查找替换及正则表达式的使用详解

    Vim中的正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作。下面这篇文章主要给大家介绍了关于Vim中查找替换及正则表达式使用的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来...

    grep用法详解 grep与正则表达式

    vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;在以前上班的公司里,由于公司是基于web的服务型网站(nginx),对正则的需求比 较大,所以也花了点时间研究正则,特与大家分享...

    vim-fnr:没有正则表达式的 Find-N-Replace 助手

    vim-fnr 在 Vim 中使用实时预览进行 Find-N-Replace(实验性)安装使用您最喜欢的插件管理器。 VIM-FNR需要 。 使用 : Plug ' junegunn/vim-pseudocl 'Plug ' junegunn/vim-fnr '用法正常模式&lt;Leader&gt;r&lt;Movement&gt; -...

    Vim插件vim-switchtoinc.zip

    基于vim正则表达式查找(例子):let g:alternateSerchPath = 'reg:/inc/src/g/, reg:/src/inc/g/' 以上方法都比较有局限性,因为只能针对单条路径(正则)或单个目录进行查找,下面的方法相对麻烦一点,但...

    regex-cheatsheet:不同正则表达式语法的备忘单

    正则表达式语法备忘单 许多程序使用正则表达式来查找和替换文本。 然而,它们往往带有自己不同的风味。 您可能会期望大多数现代软件和编程语言都使用 Perl 风格的一些变体,“PCRE”; 然而,命令行工具(grep、...

    vim-HideShow:基于正则表达式的交互式折叠

    隐藏显示.vim HideShow 可以轻松地将基于正则表达式的折叠应用于您的 vim 缓冲区。 例如,Java 源文件的简单折叠可能是: :Show \v (public|private|protected) :Show 和 :Hide 调用是累积的,因此以下三个 :Show ...

    vim-searchlabels:轻松跳转到(n)vim中的搜索结果

    这些的缺点之一是它们没有正则表达式支持。 由于该插件仅在vim的本机搜索结束时才挂接,因此您将获得vim的全部功能。 用法 只需使用/搜索,如果窗口中可见多个匹配项,则会显示标签,使您可以直接跳至任何匹配项。 ...

    vim-textobj-user:Vim插件:创建自己的文本对象

    您可以使用正则表达式定义简单的文本对象,也可以使用函数定义复杂的文本对象。例子模式定义的简单文本对象定义ad / id以选择日期,例如2013-03-16 ,并at / it处选择时间,例如22:04:21 : call textobj#user#...

    linux下关于正则表达式grep的一点总结

    正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具。类似于生活中常见的寻人启示,通过描述一个人的特征来...

    vim-esearch:轻松执行文件搜索

    输入提示界面,而不使用命令行: 可以按原样粘贴搜索模式(通过在提示中按&lt;cr&gt;&lt;cr&gt;启用具有正则表达式模式的)。 使用neovim浮动窗口和普通拆分的2种预览模式。 第三方插件集成: vim-visual-multi(多个游标...

    LinuxPDF最全学习资料,从安装到大神,运维必备

    A第二章 Linux基本操作和自己动手组装服务器 B第三章 Linux基本命令操作 C第四章 文件的基本管理和XFS文件系统备份...V第二十三章 expect-正则表达式-sed-cut的使用 W第二十四章 Shell中色彩处理和awk使用技巧 。。。

    vim-textobj-quote:在Vim中使用'curly'引号字符

    通过插件使用正则表达式实现 支持包含收缩的带引号的字符串(例如“don't” ) 可配置以支持 包括四个附加功能: educate-从“直引号”键自动输入“印刷引号” 替换-将引号从直接转换为印刷,反之亦然 matchit-...

    ujihisa.vim-3:ujihisa.vim#3 -- 一个国际 Vim 会议

    Vim”(绝对匿名) “关于正则表达式”与 特别的"vimrc" 与 vimrc 阅读俱乐部(thinca 和 manga_osyo)要求演示直接申请Fork 在 README.md 中添加您的姓名、标题和摘要发送拉取请求间接应用与场地混合公司〒150-0011...

    vim-rubyhash:一个vim插件来转换Ruby哈希的关键样式

    买者自负识别哈希键的正则表达式适用于仅包含字母,数字和下划线的短语。 诚然,这是非常有限的,但是我希望现在可以满足80%的用例。安装建议您使用Pathogen,并将此插件的git repo作为子目录包含在bundle目录中。 ...

    vim-patternjump:根据需要移动光标

    通过使用正则表达式可以轻松优化移动光标的规则。 在本引言中,由正则表达式定义的那些规则称为模式。 可以注册多个图案,并将光标移动到其中最接近的候选图案。 该插件提供两个键盘映射。 一个搜索候选者的前进...

    vim-searchtags

    这些的缺点之一是它们没有正则表达式支持。 由于该插件仅在vim的本机搜索结束时才挂接,因此您将获得vim的全部功能。 安装 Plug 'thomkeh/vim-searchtags' git clone git://github....

    vim-multiple-cursors:Vim的True Sublime Text样式选择

    :exclamation_mark: 该插件已弃用,请...使用命令来匹配正则表达式 要查看上述示例使用了哪些击键,请参阅。 安装 使用 , , , 或您喜欢的Vim软件包管理器进行安装。 需要vim 7.4或更高版本才能使用全部功能。 vim

Global site tag (gtag.js) - Google Analytics