Modifica : ho appena scoperto il plug-in vim-textobject-latex , che aggiunge l'esatta funzionalità che stai cercando (oltre a poche altre cose). Dal README del plug-in:
Gli oggetti di testo attualmente supportati sono:
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{...}``
Quindi puoi usare caq
e simili come volevi. L'ho provato e funziona come pubblicizzato, ma nota che dipende dal plug-in vim-textobject-user . Nota anche che devi textobject-user
prima caricare il plugin , altrimenti le cose non funzioneranno.
Se non vuoi scherzare con i plugin, tuttavia, la mia risposta originale rimane utile:
L'aggiunta di queste due righe al tuo .vimrc
coprirà la maggior parte di ciò che desideri.
onoremap aq :<c-u>normal! F`vf'<cr>
onoremap iq :<c-u>normal! T`vt'<cr>
Questi creano nuovi oggetti di testo ( aq
e iq
) che tornano al precedente `
, accedono alla modalità di selezione visiva, quindi selezionano fino al successivo '
.
Questo lavoro per ciq
, caq
, yiq
, e diq
. Tuttavia, yaq
e daq
non strapperò / eliminerò le virgolette esterne, quindi ho creato un altro oggetto di testo a"
, per gestirlo ( i"
non è necessario, ma ho aggiunto per mantenere le cose coerenti:
onoremap a" :<c-u>normal! 2F`v2f'<cr>
onoremap i" :<c-u>normal! 2T`v2t'<cr>
Il principale svantaggio qui è che questo interromperà l'uso normale ca"
, ecc. Se li prefiggi au FileType tex
, avrai solo quel problema nei .tex
file, ma a volte potrebbe ancora essere un fastidio. Potresti anche nominare l'oggetto come ad
/ id
('d' per virgoletta 'doppia'), ma questo mi è sembrato meno intuitivo (miravo alla minima differenza rispetto al normale funzionamento).
L'unico modo in cui mi viene in mente di racchiuderli in soli due oggetti di testo sarebbe quello di scrivere una funzione che controlli un'altra citazione al di fuori del primo set e impostare gli aq
oggetti di testo per chiamarlo.
Nota : ci sono un paio di altri problemi minori con questi:
- Lo strappo potrebbe lasciare il cursore in un posto inaspettato (questo potrebbe essere corretto aggiungendo un segno nei comandi (ad es.
ma2F`v2f'<cr>`a
), Assicurati solo di non usarne uno che usi frequentemente manualmente)
- Il cursore deve trovarsi tra virgolette; accadono cose strane se è tra virgolette.
Per concludere, questo è ciò che aggiungerei personalmente al mio .vimrc
per questo 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
Come puoi vedere, ho optato per la rottura della normale funzionalità ca'
/ ya"
/ etc, quindi non avrei dovuto imparare nuovi comandi per loro dato che non avrei comunque usato la normale funzionalità in LaTeX. Questa è solo una preferenza personale; non è difficile cambiare i nomi degli oggetti. Ho anche aggiunto il rilevamento del tipo di file e i segni.
iq
, ma non sembra funzionare, ad esempiodaq
.