上下文:
Vim和Neovim以几种有用的方式对单引号('
)进行配对。特别是:
1.当你输入'
时,Vim会生成另一个'
,并将你的光标放在这对之间。
'
s之间的文本被视为Vim可以操作的文本对象。
同样的行为也适用于Vim与第二个反勾号配对的反勾号(`)。
提问:
这很好;然而,在某些情况下,反勾应该与单引号配对,而不是与第二个反勾配对。我的问题是:
- 这种行为在哪里受到控制?
- Vim和neovim有什么不同吗?
- 我有什么选项可以修改此行为,使反引号仅在某些上下文中(即具有某些扩展名的文件)与单引号配对,同时在其他地方保持默认行为?
示例:
乳胶
在Latex中,双引号的开头使用两个反引号(``)而不是双引号(“),并使用两个单引号(”)结束。在这种情况下,所需的配对将是两个反引号和两个单引号,光标在中间。此外,文本对象应该是反引号集和单引号集之间的文本。
下面由Friedrich提供的csquotes包对Latex情况有帮助,但我对更一般地解决这个问题的东西感兴趣。
状态
在Stata中,本地宏和包含双引号的字符串都使用这种模式。一个简单的例子:
local foo bar
di "`foo'"
generate one_dbl_quote = `"""'
字符串
这将字符串bar
放入名为foo
的本地宏中,然后将foo
的内容打印到控制台,然后创建一个包含一个双引号的字符串变量。
1条答案
按热度按时间dgsult0t1#
事实证明,How can I treat LaTeX quotes as a text object? on Vi and Vim SE的几个答案也适用于这个问题。
我不会在这里重复所有的答案,但是用户superjer的answer定义了
aq
和iq
文本对象的新Map(更多信息请参见:help text-objects
)。答案是轻量级的,可以很容易地适应这个问题。它确实有一个警告,它只适用于单引号,只有当字符串在一行,这似乎是可以接受的用于Stata宏(但不用于LaTeX)。要仅为
stata
文件类型启用Map(如果文件类型未知,请考虑使用:help new-filetype
中的说明添加它),并像这样创建~/.vim/after/ftplugin/stata.vim
文件:字符串
或者-稍微不那么整洁-你可以采取一个快捷方式,根据你的
vimrc
中的文件扩展名通过autocmd
启用它们:型
请注意,这使用了
<buffer>
Map,因此它们不会泄漏到非Stata文件中。而不是使用iq
和aq
,您甚至可能决定疯狂地覆盖默认运算符i``和
a``。对于跨多行的字符串,事情会变得非常棘手。在这种情况下,我建议使用一个插件,比如在链接问题的答案中提到的两个插件:vim-sandwich或-特别是LaTeX-textobj-latex。
如果你喜欢这些建议中的任何一个,请访问Vi and Vim SE,并给予相应的作者你的赞成票!