Editar : Acabo de descubrir el complemento vim-textobject-latex , que agrega la funcionalidad exacta que estás buscando (además de algunas otras cosas). Desde el archivo README del complemento:
Los objetos de texto admitidos actualmente son:
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{...}``
Para que pueda usar caq
y hacer lo que quisiera. Lo probé y funciona como se anuncia, pero tenga en cuenta que depende del complemento vim-textobject-user . También tenga en cuenta que debe asegurarse de que el textobject-user
complemento se cargue primero , de lo contrario las cosas no funcionarán.
Sin embargo, si no desea meterse con los complementos, mi respuesta original sigue siendo útil:
Agregar estas dos líneas a tu .vimrc
cubrirá la mayor parte de lo que deseas.
onoremap aq :<c-u>normal! F`vf'<cr>
onoremap iq :<c-u>normal! T`vt'<cr>
Estos crean nuevos objetos de texto ( aq
y iq
) que vuelven al anterior `
, ingresan al modo de selección visual y luego seleccionan hasta el siguiente '
.
Esto funcionará para ciq
, caq
, yiq
, y diq
. Sin embargo, yaq
y daq
no tiraré / eliminaré las comillas externas, así que creé otro objeto de texto a"
, para manejar eso ( i"
no es necesario, pero agregué para mantener las cosas consistentes:
onoremap a" :<c-u>normal! 2F`v2f'<cr>
onoremap i" :<c-u>normal! 2T`v2t'<cr>
El principal inconveniente aquí es que esto romperá el ca"
uso normal , etc. Si los introduces au FileType tex
, solo tendrás ese problema en los .tex
archivos, pero de vez en cuando puede ser una molestia. También podría nombrar el objeto de manera similar a ad
/ id
('d' para la cita 'doble'), pero eso me pareció menos intuitivo (buscaba la menor diferencia con respecto al funcionamiento normal).
La única forma en que puedo pensar en envolverlos en solo dos objetos de texto sería escribir una función que verifique si hay otra cita fuera del primer conjunto y establecer los aq
objetos de texto para llamar a eso.
Nota : Hay otros problemas menores con estos:
- Yanking puede dejar el cursor en un lugar inesperado (esto se puede solucionar agregando usando una marca en los comandos (por ejemplo
ma2F`v2f'<cr>`a
), solo asegúrese de no usar uno que usa con frecuencia manualmente)
- El cursor debe estar dentro de las comillas; Suceden cosas raras si está entre comillas.
Para concluir todo esto, esto es lo que personalmente agregaría a mi .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 puede ver, opté por romper la funcionalidad normal ca'
/ ya"
/ etc. para no tener que aprender nuevos comandos para ellos, ya que de todos modos no estaría usando la funcionalidad normal dentro de LaTeX. Eso es solo una preferencia personal; No es difícil cambiar los nombres de los objetos. También agregué en la detección de tipo de archivo y las marcas.
iq
, pero no parece funcionar con, por ejemplodaq
,.