我有一个包含字符串的文件:
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中有没有任何简单的黑客(比如只选择这一行并在所选范围内替换)? 或者我应该录制宏并将其应用于我需要的字符串。
答案 0 :(得分:3)
如果有可能通过正则表达式选择这些行,我们可以
: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'
您也可以直观地选择文本并将其传递给外部命令。
希望它有所帮助。答案 1 :(得分:1)
有一个插件可以让你拥有“多个游标”。我自己没试过,但你应该看看它是否能解决你的问题: