VIM及正则表达式


一、查找/Search + 统计

1、统计某个关键字

方法是:%s:keyword:&:gn

其中,keyword是要搜索的关键字,&表示前面匹配的字符串,n表示不真正进行替换。有的人说,不加n也可以,不过不加n的话,会修改文件的时间信息,%表示所有行,s表示substitute,g表示global,所在行的所有匹配。

二、替换与删除/Substitute/Replace & Delete

1、删除行尾的^M

The ^M is a carriage-return/CR character. If you see this, you're probably looking at a file that originated in the DOS/Windows world, where an end-of-line is marked by a carriage return/newline pair, namely CR-LF, whereas in the Unix world, end-of-line is marked by a single newline.

Read this article for more detail, and also the Wikipedia entry for newline.

This article discusses how to set up vim to transparently edit files with different end-of-line markers.

If you have a file with ^M at the end of some lines and you want to get rid of them, use this in Vim:

:%s/^M$//g

**Note: ** (Press Ctrl+V Ctrl+M to insert that ^M.) You can't directly insert ^+M (two characters), which doesn't match the single CR character.另外可以用\r(carriage return/車-返/迴)来代替^M

参考:

删除行尾的^M

三、居中光标所在行

zz 居中光标所在行

zb zoom base/将光标所在的行跳转到当前页面的最底部

zt top/将光标所在的行跳转到当前页面的最顶部

ctrl+b 页面向后退一页/backward

ctrl+f 页面向前一页/forward

四、正向预搜索匹配

五、列模式/Volumn Mode

  1、比如我们经常要用到的注释,也就是在行首添加//(双斜杠)。

  在Windows的GVIM下先按CTRL+Q打开块选择模式,然后按SHIFT+上、下、左、右箭头选择相应的区域,后按下SHIFT+I(Insert)开始插入//,最后按下`(1左边的Escape键)即可。

  :有的时候按下CTRL+V也可以开启选择模式,但是在Windows下CTRL+V用作了粘贴键

2、在行首添加行号

比较容易理解的版本:

  1. :%s/^/=printf("%6d\t", line('.')) 或者 :%s:^:=printf("%6d",line('.'))

其中,:(冒号)与/(正斜线)均是作为一个命令的分隔符,后面的(反斜线)是个转义字符。这个printf(formatted print)与C语言中的功能相同,这里的格式%6d,表示输出为6为的10(shí)进制,如果不足6位则在前面用space(空格,Unicode 0x20)填充。line('.'),表示当前行的行号。%代表100%,也就是所有的行。

另外,这个匹配可以用另外一种方式去理解,^(caret/帽子)符号代表的是行首,我们只要用特定的字符把^(行首)替换了就可以了。

Note:基于此,那么在行首,添加//注释就非常的简单了。只要[range]s:^://即可,其中[range]表示哪些行,比如在5至7行 de' 行首添加注释,则[range]替换成5,7即可。

REFER:Inserting Line Numbers into Existing Text

六、复制/删除

(1)复制1个单词:yw

  复制n个单词:ynw

(2)复制1行:yy

  复制n行:nyy

(3)删除1个单词:dw(delete word);

  删除n个单词:dnw

(4)删除1行:dd

  删除n行:ndd

七、匹配中文字符

中文在不同的字符集编码中的匹配规则也不同,这里说的是UNICODE字符集中汉字的匹配规则。

UNICODE标准中,中日韩三国的文字通称为CJK象形文字,在UNICODE 6.3标准中占据的编码块有以下几个:
2E80..2EFF; CJK Radicals Supplement 中日韩部首增补
2F00..2FDF; Kangxi Radicals 康熙部首
3000..303F; CJK Symbols and Punctuation 中日韩符号和标点
31C0..31EF; CJK Strokes 中日韩笔画
3200..32FF; Enclosed CJK Letters and Months 带圈中日韩字母和月份
3300..33FF; CJK Compatibility 中日韩兼容
3400..4DBF; CJK Unified Ideographs Extension A 中日韩统一表意文字扩展A
4DC0..4DFF; Yijing Hexagram Symbols 易经六十四卦符号
4E00..9FFF; CJK Unified Ideographs 中日韩统一表意文字
F900..FAFF; CJK Compatibility Ideographs 中日韩兼容表意文字
FE30..FE4F; CJK Compatibility Forms 中日韩兼容形式
20000..2A6DF; CJK Unified Ideographs Extension B 中日韩统一表意文字扩展B
2A700..2B73F; CJK Unified Ideographs Extension C 中日韩统一表意文字扩展C
2B740..2B81F; CJK Unified Ideographs Extension D 中日韩统一表意文字扩展D
2F800..2FA1F; CJK Compatibility Ideographs Supplement 中日韩兼容表意文字增补

所以如果使用UNICODE字符集,无论使用何种编码转换格式,当然优先utf-8,就可以使用[\uxxxxx-\uxxxxx]这种格式来匹配相应的象形文字。对于常用汉字,可以用[\u4E00-\u9FFF]覆盖,但是这个范围没有标点符号,只能匹配 汉字/Kanji/漢字。[\u3000-\u303F]也只涵盖一部分 全角标点符号,比如没匹配到全角的逗号。

例子:

1、将汉字中间的英文逗号/,替换为中文逗号/,

方法:

:%s:\([\u4e00-\u9fa5]\)\(,\)\([\u4e00-\u9fa5]\):\1,\3:g

其中,\([\u4e00-\u9fa5]\)代表\1,表示分组1;
\(,\)代表\2,表示分组2;
\([\u4e00-\u9fa5]\)代表\3,表示分组3;

上面的第一个:,表示VIM的命令模式。%表示在整个文件进行操作。 s表示 subsitute/替换\(\)表示一个分组,分组可以用\n(n 为1-9)进行代替。

后面的\1,\3,表示只将 英文逗号, 替换为 中文逗号,另外的第1和第3组模式保持不变,g表示对某一行里面的所有匹配,不加g表示只替换所在行的第一个。

2、将( 汉字汉字汉字 ) 替换为 (汉字汉字汉字)。即,将英文括号换成中文的括号,并去掉汉字两边的空格。

:%s:\((\s\=\)\([\u4e00-\u9fa5]\+\)\(\s\=)\):(\2):g

解释:将左括号(英文)和左边的空格 分到第1组,中间的汉字为第2组,汉字后的 空格+括号 为第3组。

八、全选、全部复制

1、gg+V+G 全选

gg跳到第1行;V 选择模式;G(Shift+g),跳到最后一行;

2、gg+V+G+y 全选复制

3、复制n-m行

ngg+V+m+gg+y

n+gg,跳转到第n行;m+gg跳转到第m行;V,选择;y-yank复制;

参考


1、Search and Replace

2、VIMDoc

3、VIMRegex

4、VIMTips

5、China Unix VIM 中文

6、vim:匹配中文的正则表达式

VIM 及正则表达式的更多相关文章

  1. VIM 用正则表达式

    VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3     移动n1-n2行(包括n1,n2)到n3行之下: ...

  2. VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,中文正则,倒数第二列, 匹配任意一个字符 :

    VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3     移动n1-n2行(包括n1,n2)到n3行之下: ...

  3. [置顶] Vim用正则表达式进行批量修改

    vim可以设置 magic 这个东西, magic就是设置哪些元字符要加反斜杠哪些不用加的. 简单来说: magic(\m):除了 $ . * ^ 之外其他元字符都要加反斜杠. nomagic(\M) ...

  4. VIM和正则表达式

    1.VIM 1.1vim简介 vim是一款强大的文本编辑器,它和 vi 使用方法一致,但功能更为强大.官网:www.vim.org.中文手册:http://vimcdoc.sourceforge.ne ...

  5. vim的正则表达式(二)应用实例

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  6. vim下正则表达式的非贪婪匹配

    贪婪模式是: .* 非贪婪模式是: .\{-}

  7. vi/vim正则表达式

    http://www.cnblogs.com/penseur/archive/2011/02/25/1964522.html 毋庸多言,在vim中正则表达式得到了十分广泛的应用. 最常用的 / 和 : ...

  8. [转] vim 正则表达式 很强大

    毋庸多言,在vim中正则表达式得到了十分广泛的应用. 最常用的 / 和 :s 命令中,正则表达式都是不可或缺的. 下面对vim中的正则表达式的一些难点进行说明. 关于magic vim中有个magic ...

  9. 终于明白vim 和 grep 中 的正则表达式的用法, vim 正则表达式 和grep基本正则表达式 几乎一样

    要搞清楚 vim中的正则和普通的Perl正则表达式的区别: 因为在perl中所有的元字符 都可以直接使用, 不需要在 元字符的前面加 反斜杠. 但是在vim, 包括grep中就有所区别, 同样是元字符 ...

随机推荐

  1. 从打车软件你能想到多少?盈利模式?商机?大数据?移动互联网蛋糕?生活方式改变withApp?

    物联网.云服务.大数据.. 淘宝.12306.卡通...一个产品改变一次生活方式. 打车app,无疑是改变生活方式的又一个产品.从打车软件,你能看到什么? 个人认为,打车软件值得各种投资方斥资,最重要 ...

  2. shell脚本应用(4)--常用命令

    正则表达式 符号 用法 句号. 匹配任何单个字符  [shell用的是?] 符号^ 跟行首匹配 符号$ 跟行尾匹配 星号* 匹配0或若干个紧靠在星号前的字符[shell是0或若干跟字符] []结构 匹 ...

  3. Scala学习笔记(二)表达式和函数

    笔记的整理主要针对Scala对比Java的新特性:   1.if表达式 if表达式是有结果返回的. val a= if (5>2) "你好" else 1 a的值为if表达式 ...

  4. linux内核系列(二)内核数据结构之链表

    双向链表 传统链表与linu内核链表的区别图: 图一 图二 从上图中看出在传统链表中各种不同链表间没有通用性,因为各个数据域不同,而在linux内核中巧妙将链表结构内嵌到数据域结构中使得不同结构之间能 ...

  5. Pascal <-> C/C++ 转换简明教程

    在OI的学习中,阅读多种语言的能力是很重要的. 本文就着眼于让大家最快地掌握这两种语言间的转换方法. 程序主结构 C/C++ Pascal 主程序(即开始执行的程序段)和其他函数.过程本质上都属于函数 ...

  6. hdu5593--ZYB's Tree(树形dp)

    问题描述 ZYB有一颗N个节点的树,现在他希望你对于每一个点,求出离每个点距离不超过KK的点的个数. 两个点(x,y)在树上的距离定义为两个点树上最短路径经过的边数, 为了节约读入和输出的时间,我们采 ...

  7. 15个易遗忘的Java问题

    通常,在面试中,会遇到面试官提一些比较“偏冷”的基础知识,比如基本数据类型所占用的字节数,或者Unicode和UTF-8的区别之类的问题,这时很多应聘者会答错.还有在平常编码的过程中,很多时候会用到除 ...

  8. Combobox 成员添加

    this.comboBox1.Items.AddRange(new object[] {"Item 1", "Item 2", "Item 3&quo ...

  9. 版本控制Subversion TortoiseSVN apache VisualSVN笔记(转载)

    转载于http://blog.sina.com.cn/s/blog_6b94d5680101m7ah.html Subversion(简称svn)是近年来崛起的版本管理软件,是cvs的接班人.目前,绝 ...

  10. Swift编程语言的相关资料

    苹果官方Swift文档<The Swift Programming Language> 苹果开发人员Swift文档及介绍 网友整理的Swift中文文档<Apple Swift编程语言 ...