Answers:
我不知道乳胶,但这似乎可行:
vnoremap iq :<C-U>silent! normal! t'vT`<CR>
omap iq :normal viq<CR>
我基于此处的信息:http : //vim.wikia.com/wiki/Creating_new_text_objects
您还可以添加对以下内容的支持aq:
vnoremap aq :<C-U>silent! normal! f'vF`<CR>
omap aq :normal vaq<CR>
aq使用其他类似的映射使其工作。我编辑了答案。我还在映射中用T'交换了T`,以便它首先向前搜索,这对我来说似乎更自然。
daq在``foo''短短的结果`foo'。
fand t运算符所允许的更深入的文本检查,这将需要编写一个包含变量和所有内容的完整函数。我现在没有时间这样做。
编辑:我刚刚发现了vim-textobject-latex插件,它添加了您正在寻找的确切功能(除了其他一些功能)。从插件的自述文件中:
当前支持的文本对象是:
a i Description
a\\ i\\ Inline math surrounded by ``\\(`` and ``\\)``.
a$ i$ Inline math surrounded by dollar signs.
aq iq Single-quoted text ``\`like this'``.
aQ iQ Double-quoted text ``\``like this''``.
ae ie Environment ``\begin{...}–\end{...}``
因此,您可以根据需要使用caq等。我对其进行了测试,并且它可以像宣传的那样工作,但是请注意,它取决于vim-textobject-user插件。另外请注意,您必须确保textobject-user首先加载插件,否则将无法正常工作。
但是,如果您不想弄乱插件,我的原始答案仍然有用:
将这两行添加到您的内容.vimrc中将满足您的大部分需求。
onoremap aq :<c-u>normal! F`vf'<cr>
onoremap iq :<c-u>normal! T`vt'<cr>
这些将创建新的文本对象(aq和iq),这些对象可以返回到上一个`,并进入可视选择模式,然后选择下一个'。
这对于工作ciq,caq,yiq,和diq。然而,yaq和daq不抽出/删除外引号,所以我创建另一个文本对象a",以处理(i"是不需要的,但我加入,以保持一致的东西:
onoremap a" :<c-u>normal! 2F`v2f'<cr>
onoremap i" :<c-u>normal! 2T`v2t'<cr>
这里的主要缺点是,这将打破常规ca"等用途。如果以开头au FileType tex,则只会在.tex文件中出现该问题,但有时仍然很烦人。您也可以将对象命名为ad/ id(用“ d”表示“双引号”),但对我来说似乎不太直观(我的目标是与正常操作的差异最小)。
我能想到的将它们包装成两个文本对象的唯一方法是编写一个函数,该函数检查第一个集合之外的另一个引号,并设置aq文本对象以调用它。
注意:这些还有其他一些小问题:
ma2F`v2f'<cr>`a)中添加标记来解决此问题,只需确保不要使用您经常手动使用的光标即可)总结一下,这是我个人.vimrc为此问题添加的内容:
augroup filetype_latex
au!
au FileType tex,plaintex onoremap a' :<c-u>normal! muF`vf'<cr>`u
au FileType tex,plaintex onoremap i' :<c-u>normal! muT`vt'<cr>`u
au FileType tex,plaintex onoremap a" :<c-u>normal! mu2F`v2f'<cr>`u
au FileType tex,plaintex onoremap i" :<c-u>normal! mu2T`v2t'<cr>`u
end augroup
如您所见,我选择了打破常规的ca'/ ya"etc功能,因此不必为它们学习新的命令,因为无论如何我不会在LaTeX中使用过多的常规功能。那只是个人喜好;不难切换对象名称。我还添加了文件类型检测和标记。
vim-sandwich另一个有用的插件是vim-sandwich定义了ft特定的环境
l`或l'为`text',l"为``text''和在使用默认映射的情况下,以下工作
`text'用cisl'或如果最近的周围的自动检测是细cib(例如光标h在`a (phony) text'要求压vibibc)。但是,您可以定义以下其他文本对象iq(OP示例),
omap <unique> iq <Plug>(textobj-sandwich-query-i)l'
xmap <unique> iq <Plug>(textobj-sandwich-query-i)l'
omap <unique> aq <Plug>(textobj-sandwich-query-a)l'
xmap <unique> aq <Plug>(textobj-sandwich-query-a)l'
omap <unique> iQ <Plug>(textobj-sandwich-query-i)l"
xmap <unique> iQ <Plug>(textobj-sandwich-query-i)l"
omap <unique> aQ <Plug>(textobj-sandwich-query-a)l"
xmap <unique> aQ <Plug>(textobj-sandwich-query-a)l"
现在只需按ciq或即可ciQ。text与saiwl'单撇号,以获得`text'sa{motion/textobject}{surrounding}与装置调用操作者add surrounding上inner word并环绕类型是latex single quote。sdl'或用删除sdbsrl'l"或随着变化srbl"它支持
iq例如,这适用于,但似乎不适用于daq。