使用for循环在vim中插入带有索引的单词



不止一次,我不得不在python的列表中插入一个词的一些变体,例如:

intf = ["eno1", "eno2", "eno3", "eno4", "eno5", "eno6", "eno7", "eno8", "eno9", "eno10"]

是否有一种简单的方法可以用for循环插入这些单词?我发现了这个:https://renenyffenegger.ch/notes/development/vim/commands/put这和我想做的非常接近。例如,我可以输入:

:for i in range(1,10) | put ='"eno'.i.'", ' | endfor

得到:

"eno1",
"eno2",
...

唯一的区别是它将每个单词插入到新的行中。有没有一种变体,把所有的单词都插在同一行上?

  1. 首先将所有值附加到变量中,然后调用put。
:let a="" | for i in range(1,10) | let a.='"eof'.i.'", ' | endfor | put =a
  1. 要删除结尾的',',我们也可以将值添加到列表中,然后调用join
:let a=[] | for i in range(1,10) | call add(a,'"eof'.i.'"') | endfor | put =join(a, ', ')

为什么不直接在代码中生成这个列表呢?

intf = []
for i in range(1, 11):
intf.append('eno' + str(i))

如果你坚持在Vim中使用Vim功能:

intf = <C-r>=range(1,10)->map('"eno" . v:val')->string()<CR>

参见:help i_ctrl-r,:help "=,:help range(),:help map(),:help string(),:help method

最新更新