vim 在括号内对字符串进行双引号引用

ar5n3qh5  于 5个月前  发布在  其他
关注(0)|答案(4)|浏览(76)

我有一个像下面这样的线。
fullname =(这是一个测试名称);
我想把“(“和“)"中的所有字符串都用双引号引起来。
即fullname =(“this”“is”“a”“test”“name”);
有人能给我给予一个Vim正则表达式来做这个吗?

gopyfrb3

gopyfrb31#

我会这样做:

:s/\<\w\+\>/"&"/gc

字符串
由于确认开关'c',每次替换时都会询问您。对于'fullname'的替换,请回答'n'(否),对于其余行,请回答'a'(全部)。

rxztt3cl

rxztt3cl2#

这样做:

:%s/\v(\(.*)@<=[[:alnum:]]+(.*\))@=/"&"/g

字符串
请注意,如果输入格式不正确,使用正则表达式匹配嵌套模式(如括号中)将出错。上面的方法根本不处理嵌套括号,引号或转义括号也会破坏嵌套括号。请小心处理。
其内容如下:

:%s               substitute on all lines
/                 matching
\v                (with "very magic" switched on)
(\(.*)@<=         a position that follows an opening paren, on this line
[[:alnum:]]+      a series of alphanumeric characters (i.e. "words")
(.*\))@=          that are followed by a closing paren, on this line
/                 replace with
"&"               the match, in quotes
/g                globally


值得注意的是,Vim确实支持可变长度的look-behind,而大多数现代的正则表达式实现都不支持。

hlswsv35

hlswsv353#

此命令将所有非空格、制表符、等号、括号或括号的内容置于引号中:

:s/[^ \t=();][^ \t=();]*/"&"/g

字符串
请注意,这也引用了fullname,但您可以手动删除这些引用。
有时候手动完成部分工作是值得的,因为自动化会更慢。
运行命令:

:help substi


获取有关Vim中regexp替换的帮助。

bcs8qyzn

bcs8qyzn4#

同样适用于此示例:

:%s/\(^.\{-}(\|\)\zs\w\+/"&"/g

字符串
还有一个更一般的例子:

:%s/\(\(^\|)\).\{-}(\|\)\zs\w\+/"&"/g

相关问题