有一个第一行为foo,bar,baz,qux,quux
的文档,是否有办法将这些单词作为列表['foo','bar','baz','qux','quux']
存储在变量中,并使用vim删除文档中出现的所有单词?
与可视模式中的命令:removeall
一样,突出显示列表:
foo,bar,baz,qux,quux
hello foo how are you
doing foo bar baz qux
good quux
会将文字更改为:
hello how are you
doing good
答案 0 :(得分:3)
更安全的方法是编写一个函数,检查“列表”的每个部分,是否有需要转义的内容。然后进行替换(删除)。肮脏的&使用您的输入快速完成此操作的方法是:
nnoremap <leader>R :s/,/\|/g<cr>dd:%s/\v<c-r>"<c-h>//g<cr>
然后在正常模式下,当您转到包含删除部分且必须为CSV格式的行时,按<leader>R
您将获得预期的输出。
如果该行具有正则表达式特殊字符,例如/
,*
,.
或\
等,则替换将失败。
答案 1 :(得分:1)
像这样的衬里应该有效:
:for f in split(getline("."), ",") | execute "%s/" . f | endfor | 0d
请注意,最终会有很多尾随空格。
<强> 修改 强>
上面这个版本的命令负责处理那些讨厌的尾随空格(但不是示例文本第2行的空格):
:for f in split(getline("."), ",") | execute "%s/ *" . f | endfor | 0d
结果:
hello how are you
doing
good