VIM 用正则表达式 批量替换文本,多行删除,复制,移动

您所在的位置:网站首页 vim批量删除多行 VIM 用正则表达式 批量替换文本,多行删除,复制,移动

VIM 用正则表达式 批量替换文本,多行删除,复制,移动

2024-07-03 09:00| 来源: 网络整理| 查看: 265

在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动

:n1,n2 m n3     移动n1-n2行(包括n1,n2)到n3行之下;

:n1,n2 co n3    复制n1-n2行(包括n1,n2)到n3行之下;

:n1,n2 d        删除n1-n2行(包括n1,n2)行;

 

vi替换使用规则: :g/s1/s/s2/s3/g

第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换 s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串 在vi界面下使用命令 :%s#/usr/bin#/bin#g 可以把文件中所有路径/usr/bin换成/bin。其中“#”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。

 

s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1 :s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1 :s/str1/str2/gi 用字符串 str2 替换行中所有出现的字符串 str1,在查找时不区分大小写

 

(本文出自php_sir的新浪博客,用户名php_sir,首页链接:http://blog.sina.com.cn/phpsir,未经本人(php_sir)同意禁止转载)

: .,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1 :1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1

:1,$ s/^str1/str2/g 用字符串 str2 替换正文中所有出现的,每行以str1开头的字符串 :g/str1/s//str2/g 功能同上 :%s/str1/str2/g 功能同上 :g/foobar/s/bar/baz/g 首先搜寻foobar,然后把它变成foobaz. 它没有改变 jailbars, 而其他的一些命令可能会改变jailbars. :%s/str1/str2/gc 替换全文所有符合的单词并让用户确认 :g/str1/s//str2/gi 用字符串 str2 替换正文中所有出现的字符串 str1,在查找时不区分大小写,此命令没有下面的严格,经测试显示,不能完全做到在查找时忽略大小写 :%s/str1/str2/gi 用字符串 str2 替换正文中所有出现的字符串 str1,在查找时不区分大小写,在查找时可以完全做到忽略大小写 :10,20s/^/ / 将第10行至第20行资料的最前面插入5个空白 :%s/$/str/g 在整个文件每一行的行尾添加“str” :3,7s/str1/str2/g仅替换文件中的第3行到第7行中的“str1”成“str2” :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分(前提是已经打开了/etc/passwd文件)

 

从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串在光标所在行的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。上面的命令中的/只是起分隔作用,也可以用其他的字符代替。另外,可以在正规式里用\ (和\)来剥离一个序列。

 

例如:有些字符域使用得很频繁. Vim 为这些字符域提供了预定义域: 项 匹配 相当于 \d 数字 [0-9] \D 非数字 [^0-9] \x 十六进制数字 [0-9a-fA-F] \X 非十六进制数字 [^0-9a-fA-F] \s 空白字符 [ ] ( 和 ) \S 非空白字符 [^ ] (非 和 ) \l 小写字母 [a-z] \L 非小写字母 [^a-z] \u 大写字母 [A-Z] \U 非大写字母 [^A-Z] & 所有查找时匹配到的东西 \[Ee] 更改大小写的选择区域的终点

:%s/\s\+$// 删除行尾多余的空格

命令前面指明范围是“%”,所以这会作用于整个文件。“substitute”命令的样式是“\s\+$”。这表示行末($)一个或者多个(\+)空格(\s)。:g/\(foo\)\(bar\)/s/\2/\1baz/g 将foobar替换成foobaz

www.qdtianquan.com

:0,$d   删除所有内容 :%s/r//g 删除DOS方式的回车^M :%s= *$== 删除行尾空白 :%s/^(.*)n1/1$/ 删除重复行 :%s/^.{-}pdf/new.pdf/ 只是删除第一个pdf :%s/// 又是删除多行注释(咦?为什么要说「又」呢?) :g/s*^$/d 删除所有空行 :这个好用有没有人用过还有其他的方法吗? :g!/^dd/d 删除不含字符串'dd'的行 :v/^dd/d 同上 (译释:v == g!,就是不匹配!) :g/str1/,/str2/d 删除所有第一个含str1到第一个含str2之间的行 :v/./.,/./-1join 压缩空行 :g/^$/,/./-j 压缩空行 ndw 或 ndW 删除光标处开始及其后的 n-1 个字符。 d0 删至行首。 d$ 删至行尾。 ndd 删除当前行及其后 n-1 行。 x 或 X 删除一个字符。 Ctrl+u 删除输入方式下所输入的文本。 ^R 恢复u的操作 J 把下一行合并到当前行尾 V 选择一行 ^V 按下^V后即可进行矩形的选择了 aw 选择单词 iw 内部单词(无空格) as 选择句子 is 选择句子(无空格) ap 选择段落 ip 选择段落(无空格) D 删除到行尾 x,y 删除与复制包含高亮区 dl 删除当前字符(与x命令功能相同) d0 删除到某一行的开始位置 d^ 删除到某一行的第一个字符位置(不包括空格或TAB字符) dw 删除到某个单词的结尾位置 d3w 删除到第三个单词的结尾位置 db 删除到某个单词的开始位置 dW 删除到某个以空格作为分隔符的单词的结尾位置 dB 删除到某个以空格作为分隔符的单词的开始位置 d7B 删除到前面7个以空格作为分隔符的单词的开始位置 d) 删除到某个语句的结尾位置 d4) 删除到第四个语句的结尾位置 d( 删除到某个语句的开始位置 d) 删除到某个段落的结尾位置 d{ 删除到某个段落的开始位置 d7{ 删除到当前段落起始位置之前的第7个段落位置 dd 删除当前行 d/text 删除从文本中出现“text”中所指定字样的位置, 一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容 dfc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容 dtc 删除当前行直到下一个字符“c”所出现位置之间的内容 D 删除到某一行的结尾 d$ 删除到某一行的结尾 5dd 删除从当前行所开始的5行内容 dL 删除直到屏幕上最后一行的内容 dH 删除直到屏幕上第一行的内容 dG 删除直到工作缓存区结尾的内容 d1G 删除直到工作缓存区开始的内容

 

(本文出自php_sir的新浪博客,用户名php_sir,首页链接:http://blog.sina.com.cn/phpsir,未经本人(php_sir)同意禁止转载)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3