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'
。
f
and 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'
或用删除sdb
srl'l"
或随着变化srbl"
它支持
iq
例如,这适用于,但似乎不适用于daq
。