我有一个带有字符串的文件:
8 deb http://ftp.de.debian.org/debian/ stable main contrib non-free
9 deb http://ftp.de.debian.org/debian/ stable main contrib non-free
10 deb http://ftp.de.debian.org/debian/ testing main contrib non-free
11 deb http://ftp.de.debian.org/debian/ testing main contrib non-free
12 deb http://ftp.de.debian.org/debian/ sid main contrib non-free
13 deb http://ftp.de.debian.org/debian/ sid main contrib non-free
14 deb http://ftp.de.debian.org/debian/ experimental main contrib non-free
15 deb http://ftp.de.debian.org/debian/ experimental main contrib non-free
我只需要在第 9,11,13,15 行编辑地址。
我只是好奇,vim 中是否有任何简单的技巧(例如仅选择此行并在选定范围内替换)来做到这一点?
或者我应该记录一个宏并将其应用于我需要的字符串。
如果可以通过正则表达式选择这些行,我们可以这样做
:g/pattern/s/foo/bar/
如果不可能,则需要编写一个小函数。功能并不复杂,只是getline
(在给定列表中使用 lineNO ),然后进行替换,最后setline
后退。但我不知道这是否属于你的“简单黑客”。
通过函数,你还可以这样做:
do substitution on lines with 10 <line number <50 and line number is odd.
这样您就不必输入这些数字。
您可能会意识到,shell 命令更容易处理此类事情。您可以选择调用外部命令来处理 vim 中的文本。
例如:
%!awk 'NR==3||NR==5{gsub(/deb/,"foo")}1'
或者用上面的例子进行替换,奇数行号在:10-50之间
%!awk 'BEGIN{for(i=11;i<50;i+=2)l[i]}NR in l{gsub(/foo/,"bar")}1'
您还可以直观地选择文本并将它们传递给外部命令。
希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)