我有以下清单:
[torunn,sentry,moonstone,avispa,phil coulson]是否可以使用Vim将其更改为此?
["torunn","sentry","moonstone","avispa","phil coulson"]发布于 2018-06-01 16:52:32
替代Ex命令是一个很好的工具来操作CSV线
我经常使用替换的Ex命令操作CSV。
在这种情况下,我只是通过一个字符范围来匹配集合中的值:
[ a-zA-Z]
->类似于\w,但是您的集合没有_0-9,我们需要空间。
我使用转义括号将其放在一个字符组中。
另外,由于我们接下来可以有一个逗号或结束括号,所以我创建了另一个字符组,并允许使用交替运算符的任意一个字符:
\(,\|\]\)
在这里检查我们的模式匹配:

然后在替换字符串中引用这些字符组(并包括引号)。
将所有这些都放在一起,下面是替换命令:
:s/\([ a-zA-Z]\+\)\(,\|\]\)/"\1"\2/g在此之前:

之后:

小于工程解决方案
正如@bimlas所指出的,一个较少设计的解决方案如下:
:s/[^,]\+/"\0"/g
\0只是引用整个匹配的模式(参见:help \0)。
发布于 2018-06-01 15:07:53
在环绕声和宏的帮助下,很容易:
我假设您的光标位于第一个字母上(在本例中为“t”):qqys/\v,|]<cr>"nlq99@q
让我们一步一步地把它分解:
qqys/\v,|]<cr>"nlq99@q
qq q # record a macro in the q register
ys # surround something with something
/\v,|]<cr> # search for comma or closing bracket
" # surround until there with double-quotes
n # jump to the next match
l # go one to the right
99@q # run the macro 99 times (will stop at first failure)搜索查询\v,|]只是打开v or魔术模式,然后匹配逗号或(|)结束括号。我们不需要逃离托架,因为我们没有打开一个。
发布于 2018-06-01 18:17:21
您可以使用替换:
s/\v(\w|\s)+/"&"/g这将匹配单词\w或空格\s字符的一次多次(\w)事件。替换字符串"&"是由引号包围的匹配模式&。&字符用:help s/\&描述
https://stackoverflow.com/questions/50646052
复制相似问题