VIM 及正则表达式
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、在行首添加行号
比较容易理解的版本:
- :%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 及正则表达式的更多相关文章
- VIM 用正则表达式
VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3 移动n1-n2行(包括n1,n2)到n3行之下: ...
- VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,中文正则,倒数第二列, 匹配任意一个字符 :
VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3 移动n1-n2行(包括n1,n2)到n3行之下: ...
- [置顶] Vim用正则表达式进行批量修改
vim可以设置 magic 这个东西, magic就是设置哪些元字符要加反斜杠哪些不用加的. 简单来说: magic(\m):除了 $ . * ^ 之外其他元字符都要加反斜杠. nomagic(\M) ...
- VIM和正则表达式
1.VIM 1.1vim简介 vim是一款强大的文本编辑器,它和 vi 使用方法一致,但功能更为强大.官网:www.vim.org.中文手册:http://vimcdoc.sourceforge.ne ...
- vim的正则表达式(二)应用实例
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
- vim下正则表达式的非贪婪匹配
贪婪模式是: .* 非贪婪模式是: .\{-}
- vi/vim正则表达式
http://www.cnblogs.com/penseur/archive/2011/02/25/1964522.html 毋庸多言,在vim中正则表达式得到了十分广泛的应用. 最常用的 / 和 : ...
- [转] vim 正则表达式 很强大
毋庸多言,在vim中正则表达式得到了十分广泛的应用. 最常用的 / 和 :s 命令中,正则表达式都是不可或缺的. 下面对vim中的正则表达式的一些难点进行说明. 关于magic vim中有个magic ...
- 终于明白vim 和 grep 中 的正则表达式的用法, vim 正则表达式 和grep基本正则表达式 几乎一样
要搞清楚 vim中的正则和普通的Perl正则表达式的区别: 因为在perl中所有的元字符 都可以直接使用, 不需要在 元字符的前面加 反斜杠. 但是在vim, 包括grep中就有所区别, 同样是元字符 ...
随机推荐
- [每日一题] 11gOCP 1z0-053 :2013-10-7 the backup of MULT_DATA................................32
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12500579 正确答案:D RMAN 的新增功能 对超大型文件应用 Intraf ...
- 如何在eclipse中安装Jess
如何在eclipse中安装Jess 浏览:49 | 更新:2014-05-12 16:39 这个文章帮了不少忙,感谢! 但经我实践,还要把插件那些文件向/dropins/sdk下也放一份,才能成功. ...
- 【Apache开源软件基金会项目】
因为想要继续巩固一下外语,并且扩展下java的知识面,翻译一下Apache软件基金会的各个项目是个不错的选择. 2014-10-19 1 [Apache .NET Ant Libary] .net A ...
- Python实现二叉树的前序遍历、中序遍历
计算根节点到叶子节点的所组成的数字(1247, 125, 1367)以及叶子节点到根节点组成的数字(7421, 521, 8631),其二叉树树型结构如下 计算从根节点到叶子节点组成的数字,本质上来说 ...
- javaSE-基础部分整理
JavaSE基础部分整理 1.java介绍 1.Java分为三个部分: javaSE,javaEE,javaME; java重要性之一:跨平台(操作系统). 跨平台:一次编译,到处运行. Java虚拟 ...
- CAS认证(3):验证用户信息
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- Geogebra里给带有曲线和直线混合边界的封闭区域填充颜色
目的 用Geogebra绘制如图所看到的曲线,并填充如图边界的区域为实心: 用代码实现当然是能够的,可是,图形过于简单的时候用代码就不经济了.由于每个细小变动都还要调整改动代码并预览,非所见即所得.往 ...
- 单核CPU,多线程与性能
问题概述 单核CPU的计算机上, 多线程能够提高程序运行的性能吗? 这个问题看起来简单,实际很复杂,设计到多方面的因素. 首先我们要把概念搞清楚, 那就是什么是性能? 一般来说, 我们把运行一个任 ...
- Android5.0之CardView的使用
CardView也是一个非常炫酷的控件,一般我们将CardView配合RecyclerView来使用,当然,CardView也可以配合ListView来使用,都是可以的.OK,我们先来看一张CardV ...
- 查看kindle paperwhite2上卡索引书籍的方法
昨天kindle耗电量突然加快,经过检查和网络搜索得知是卡索引导致的耗电量增大.我自己通过关闭索引的方式解决了这个问题. 在这个过程中发现了一个可以直接找到所有卡索引书籍的方法,在此分享一下. 首先打 ...