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. SharePoint 命令使用集锦 (持续更新中...)

    首先要定位到 cd "Program Files\Common Files\Microsoft Shared\web server extensions\14\BIN" 下面   ...

  2. Xmind Pro 3.4.0.201311050558 Xmind 3.4 破解版 Crack

    其实就一个附件.某大神那里的下不到了.从这里就好了. 使用方法请参见压缩包~ 如果连接不能用了请及时告知回复.>< 仅适用于与版本号为201311050558的Xmind.当然尊重正版开发 ...

  3. HW4.5

    public class Solution { public static void main(String[] args) { final double POUNDS_PER_KILOGRAM = ...

  4. Tuple元组

    Tuple元组 Tuple 是 Storm 的主要数据结构,并且是 Storm 中使用的最基本单元.数据模型和元组. Tuple 描述 Tuple 就是一个值列表, Tuple 中的值可以是任何类型的 ...

  5. git 初级

    以前工作中用到git,但没有总结,这次借鉴其它博客加上自己实践,总结git的简单用法 首先安装.... 打开一个文件右击git bash 弹出来一个jit界面 git config http.post ...

  6. testlink邮件设置(centos 7)

    上一篇文章在centos 7上安装了testlink(CentOS 7下安装xampp和testlink),本篇进行邮件设置,可在进行testlink密码修改.用例指派时进行邮件通知 1.修改conf ...

  7. 【剪枝】HDU 1010——tempter of the bone

    来源:点击打开链接 看上去数据规模很小,但是必须要剪枝,否则直接爆TLE. 通过这个题可以练习奇偶剪枝. 另外:还有一个优化方式,如果所有步数走完了门还没关,则直接返回结果"NO" ...

  8. 仰视源代码,实现memcpy

    C++实现内存的复制 通常我们使用深复制就是通过内存复制实现的,可是对象的复制涉及到基类派生类及其相关类的问题.这里不讨论. 目的为了可以明确内存复制的底层实现. void* memcpy(void* ...

  9. Geogebra里给带有曲线和直线混合边界的封闭区域填充颜色

    目的 用Geogebra绘制如图所看到的曲线,并填充如图边界的区域为实心: 用代码实现当然是能够的,可是,图形过于简单的时候用代码就不经济了.由于每个细小变动都还要调整改动代码并预览,非所见即所得.往 ...

  10. Win7 64bit 安装VisualSVN出现报错:Servic 'VisualSVN Server' failed to start.解决办法

    问题描述: Win7 64bit 安装VisualSVN时出现报错: Servic 'VisualSVN Server' failed to start.Please check VisualSVN ...