Edit : Acabei de descobrir o plugin vim-textobject-latex , que adiciona a funcionalidade exata que você está procurando (além de algumas outras coisas). No arquivo LEIA-ME do plug-in:
Os objetos de texto atualmente suportados são:
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{...}``
Então você pode usar caq
e afins como quiser. Eu testei e funciona como anunciado, mas observe que depende do plug - in vim-textobject-user . Observe também que você deve garantir que o textobject-user
plug - in seja carregado primeiro , caso contrário, as coisas não funcionarão.
Se você não quiser mexer com plugins, no entanto, minha resposta original permanece útil:
A adição dessas duas linhas ao seu .vimrc
abrange a maior parte do que você deseja.
onoremap aq :<c-u>normal! F`vf'<cr>
onoremap iq :<c-u>normal! T`vt'<cr>
Eles criam novos objetos de texto ( aq
e iq
) que retornam ao anterior `
, entram no modo de seleção visual e, em seguida, selecionam até o próximo '
.
Isto irá funcionar para ciq
, caq
, yiq
e diq
. No entanto, yaq
e daq
não arrancar / excluir as aspas externas, criei outro objeto de texto a"
para lidar com isso ( i"
não é necessário, mas adicionei para manter as coisas consistentes:
onoremap a" :<c-u>normal! 2F`v2f'<cr>
onoremap i" :<c-u>normal! 2T`v2t'<cr>
A principal desvantagem aqui é que isso quebrará o ca"
uso normal , etc. Se você os anteceder au FileType tex
, você só terá esse problema nos .tex
arquivos, mas ainda assim pode ser um aborrecimento. Você também pode nomear o objeto com algo como ad
/ id
('d' para aspas 'duplas'), mas isso me pareceu menos intuitivo (eu estava buscando a menor diferença em relação à operação normal).
A única maneira de pensar em agrupá-los em apenas dois objetos de texto seria escrever uma função que verifique outra citação fora do primeiro conjunto e defina os aq
objetos de texto para chamar isso.
Nota : Existem alguns outros problemas menores com estes:
- Puxar pode deixar o cursor em um local inesperado (isso pode ser corrigido adicionando uma marca nos comandos (por exemplo
ma2F`v2f'<cr>`a
), apenas certifique-se de não usar uma que você usa frequentemente manualmente)
- O cursor deve estar dentro das aspas; coisas estranhas acontecem se estiver entre aspas.
Para encerrar tudo isso, é isso que eu pessoalmente acrescentaria ao meu .vimrc
para este problema:
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
Como você pode ver, optei por quebrar a funcionalidade normal ca'
/ ya"
/ etc para não precisar aprender novos comandos para eles, pois não usaria tanto a funcionalidade normal no LaTeX. Essa é apenas uma preferência pessoal; não é difícil mudar os nomes dos objetos. Também adicionei marcas e detecção de tipo de arquivo.
iq
, mas não parece funcionar, por exemplodaq
,.