行号列表作为vim的输入

23t*_*tux 2 vim

我有一个文件中的行号列表,例如

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命令.

Ing*_*kat 5

您可以从文件创建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)