Vim -如何在双引号之间选择包含双引号的文本

4urapxun  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(134)

如果我有文本:

var x = "Hello my name is Jim and I like ice-cream"

字符串
用v+i+就很简单了。
但是如果我的文本是:

var x = "Hello my name is "Jim" and I like ice-cream"


当我使用v+i+”时,Vim只会突出显示Hello my name is。这是预期的行为。
如何选择完整句子Hello my name is "Jim" and I like ice-cream中的所有内容?

rta7y2nd

rta7y2nd1#

如何选择完整句子Hello my name is "Jim" and I like ice-cream中的所有内容?
我会分三步来做:
1.诅咒同事(不可能是我,对吧?)忘记转义Jim周围的引号(以及各种各样的链接器和编译器等等,让那些垃圾通过)。
1.添加缺少的反斜杠。
1.最后是vi"
基本原理:直引号不会嵌套,所以你使用的编程语言和Vim都不知道第二个"不会关闭第一个"开始的字符串。
“正确”字符串(YMMV)的示例:

"Hello my name is \"Jim\" and I like ice-cream"
"Hello my name is 'Jim' and I like ice-cream"
'Hello my name is "Jim" and I like ice-cream'
`Hello my name is "Jim" and I like ice-cream`
"Hello my name is “Jim” and I like ice-cream"

字符串

ybzsozfc

ybzsozfc2#

您仍然可以使用ft分别跳转到包含或排除字符。在您的用例中,将光标定位在第一个引号上(如果还没有,请使用T"^f"移动它),然后执行v3t"以直观地选择外部引号中的所有内容。
如果你不喜欢计数,你可以用vt"lt"lt"lt"或类似的方法来递增。
参见:help t:help f
由于视觉模式本身不会编辑任何内容,因此可能存在非视觉替代方案。如果目标是更改或删除外部引号中的文本,您可以:substitute它并利用*的贪婪性,如:

:s/".*"/"I like sauerkraut better."

字符串
如果您的目标是将文本粘贴到其他地方的引号中,我会尝试将整行内容拉出来并粘贴,然后在粘贴后删除引号和其他内容。

brgchamk

brgchamk3#

正如您所发现的,vi"不起作用。
选择从第一个"到最后一个"左边一个字符的所有内容,与光标在行上的位置无关。最好不计算任何内容。
然后用0f"lv$F"h做同样的事情。
这会将光标定位在行首,找到第一个",向右移动一个,可视地选择到行尾,将选择范围缩小到最右边的",然后向左删除另一个字符。

相关问题