Les guillemets dans LaTeX sont différents de ceux du texte normal, en ce sens qu'ils sont formatés ``like this''
(ou `like this'
pour des guillemets simples). Cela rend difficile leur navigation dans Vim.
J'utilise habituellement quelque chose comme T`ct'
(en arrière jusqu'à `
, changer jusqu'à '
). Cependant, c'est maladroit et contre nature. Je préférerais être en mesure d'utiliser quelque chose le long des lignes de ciq
( « changement entre guillemets »), tout comme je peux le faire ciw
, ca)
, ci"
, ca'
, etc.
Existe-t-il un moyen de dire à Vim de traiter ``LaTeX'' `quotes'
comme des objets texte? (En plus, existe-t-il un moyen de déclencher cela uniquement lors de la modification d'un .tex
fichier?)
la source
iq
, mais ne semble pas fonctionner avec, par exempledaq
,.aq
avec un mappage similaire supplémentaire. J'ai édité la réponse. J'ai également échangé T` avec t 'dans le mappage afin qu'il recherche en premier, ce qui me semble plus naturel.daq
sur``foo''
seulement les résultats dans`foo'
.f
ett
permettent, ce qui nécessiterait d'écrire une fonction entière avec des variables et tout. Je n'ai pas le temps de le faire pour le moment.Edit : je viens de découvrir le plugin vim-textobject-latex , qui ajoute la fonctionnalité exacte que vous recherchez (en plus de quelques autres choses). Depuis le fichier README du plugin:
Les objets texte actuellement pris en charge sont:
Ainsi, vous pouvez utiliser
caq
et similaires comme vous le vouliez. Je l'ai testé et cela fonctionne comme annoncé, mais notez qu'il dépend du plugin vim-textobject-user . Notez également que vous devez vous assurer que letextobject-user
plugin se charge d'abord , sinon les choses ne fonctionneront pas.Si vous ne voulez pas jouer avec les plugins, ma réponse originale reste utile:
L'ajout de ces deux lignes à votre
.vimrc
couverture couvrira la plupart de vos souhaits.Ceux-ci créent de nouveaux objets texte (
aq
etiq
) qui reviennent au précédent`
, passent en mode de sélection visuelle, puis sélectionnent jusqu'au suivant'
.Cela fonctionne pour
ciq
,caq
,yiq
etdiq
. Cependant,yaq
etdaq
ne tirera pas / ne supprimera pas les guillemets externes, j'ai donc créé un autre objet textea"
, pour gérer cela (i"
n'est pas nécessaire, mais j'ai ajouté pour garder les choses cohérentes:L'inconvénient majeur ici est que cela va casser l'utilisation normale
ca"
, etc. Si vous les faites précéderau FileType tex
, vous n'aurez ce problème que dans les.tex
fichiers, mais cela pourrait parfois être un problème. Vous pouvez également nommer l'objet quelque chose commead
/id
('d' pour 'double' citation), mais cela me semblait moins intuitif (je visais la moindre différence par rapport au fonctionnement normal).La seule façon de penser à les regrouper en deux objets texte serait d'écrire une fonction qui vérifie une autre citation en dehors du premier ensemble et de définir les
aq
objets texte pour appeler cela.Remarque : Il y a quelques autres problèmes mineurs avec ceux-ci:
ma2F`v2f'<cr>`a
), assurez-vous simplement de ne pas en utiliser une que vous utilisez fréquemment manuellement)Pour conclure tout cela, voici ce que j'ajouterais personnellement à
.vimrc
ce problème:Comme vous pouvez le voir, j'ai opté pour la rupture de la fonctionnalité normale
ca'
/ya"
/ etc afin de ne pas avoir à apprendre de nouvelles commandes pour eux car je n'utiliserais pas autant la fonctionnalité normale dans LaTeX. C'est juste une préférence personnelle; pas difficile de changer les noms des objets. J'ai également ajouté la détection de type de fichier et les marques.la source
C'est une vieille question mais pour le bénéfice des futurs visiteurs: je trouve plus facile de changer les citations en latex avec:
Et
This thing is "Foobar"!
cela fonctionnera bien dans le vim et le latex.la source
Brancher
vim-sandwich
Un autre plugin utile pour cela est celui
vim-sandwich
qui a défini un environnement spécifique à ftl`
oul'
pour`text'
,l"
pour``text''
etAvec les mappages par défaut après le travail
`text'
aveccisl'
ou si la détection automatique de la plus proche entourant est très biencib
(par exemple , le curseur surh
en`a (phony) text'
nécessite la mise sous pressevibibc
). Cependant, vous pouvez définir l'objet de texte supplémentaire suivantiq
(exemple 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"
Maintenant, appuyez simplement surciq
ouciQ
fonctionne.text
dessaiwl'
apostrophes simples pour obtenir`text'
le modèle de la commande est
sa{motion/textobject}{surrounding}
et des moyens Invoke opérateuradd surrounding
surinner word
et le type Surround estlatex single quote
.sdl'
ou avecsdb
srl'l"
ou avecsrbl"
Ça supporte
la source