删除所有出现的单词列表vim

时间:2014-08-14 09:06:26

标签: variables vim str-replace

有一个第一行为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 

2 个答案:

答案 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