我有一个文件中的行号列表,例如
1
5
3
Run Code Online (Sandbox Code Playgroud)
我想为另一个文件中的每个行号添加相同的注释:
test1 # comment
test2 # comment
test3
test4
test5 # comment
Run Code Online (Sandbox Code Playgroud)
有没有办法逐行处理文件作为vim中行号的输入,并对其执行一些操作?我知道如何通过使用来定位单行
5,5s/$/ # comment/
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何从文件中获取行号到vim命令.
您可以从文件创建Vim列表:
let list = readfile('path/to/list.txt')
Run Code Online (Sandbox Code Playgroud)
或者如果文件已在Vim中打开:
let list = getbufline('list.txt', 1, '$')
Run Code Online (Sandbox Code Playgroud)
这会让你:
:echo list
['1', '5', '3']
Run Code Online (Sandbox Code Playgroud)
作为第二步,我们需要找到适用的行.一个for循环做到; 行号将通过:execute以下方式进行插值:
for l in list
execute l . 's/$/ # comment/'
endfor
Run Code Online (Sandbox Code Playgroud)
或者,我们可以滥用:global命令进行迭代.但速度较慢,因为index()我们必须避免将苹果(此处为:行号)与橙子(此处为:表示列表中行号的字符串)进行比较.我仍然提到这一点,因为这更为一般; 例如,您可以使用它从文件中读取单词或正则表达式到目标行:
global/^/if index(list, "" . line('.')) != -1 | s/$/ # comment/ | endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |