Est-il possible de définir un objet texte dans vim qui agira sur une région rectangulaire?
Par exemple, supposons que j'ai des colonnes de texte alignées verticalement, comme ceci:
column 1 co column 2 col
lumn 1 colu umn 2 column
mn 1 column 2 column 2 c
1 column 1 olumn 2 colu
Serait-il possible de définir un objet texte c
pour les colonnes, de manière à dac
supprimer une colonne, à la retirer yac
, à la cac
modifier, etc.?
(Je sais Control-V pour sélectionner une zone rectangulaire, et je sais que vous pouvez utiliser d
, y
etc pour supprimer, etc Yank la région sélectionnée. Mais je suis particulièrement curieux de savoir ce qui est possible en utilisant des objets de texte.)
cursor-motions
custom-text-object
Leah Velleman
la source
la source
Réponses:
Oui, c'est possible. @PeterRincker suggère le plugin textobj mot-colonne , qui définit quatre objets de texte (
ic
,ac
,iC
, etaC
) pour les colonnes à base de mots.L'idée derrière cette fonctionnalité est de créer une fonction qui définit un mouvement basé sur une colonne, puis de mapper cette fonction de manière appropriée aux mappages en mode visuel / sélection et aux mappages en attente de l'opérateur. Pour utiliser le plugin mentionné ci-dessus à titre d'exemple, il crée les mappages suivants:
TextObjWordBasedColumn(...)
Définit ici le mouvement de la colonne et est mappé à la fois en mode visuel / sélection avecxnoremap
et en mode opérateur en attente aveconoremap
. Notez que la fonction est légèrement complexe afin de gérer l'indentation et de trouver les limites de mouvement appropriées.la source
C'est possible? Absolument! Cas et point: textobj-word-column.vim .
Comment créer vos propres objets texte
Le mode visuel est généralement utilisé pour créer un nouvel objet texte. Le mode visuel peut être en ligne, en caractère (typiquement) ou en bloc visuel. Voici les bases de ce dont vous aurez besoin:
a{char}
oui{char}
où{char}
est à la fois descriptive et inutilisée. par exemplei/
comme un objet texte d'exemple entre/
.T/
t/
v
xnoremap
.onoremap
et:normal
.Maintenant, pour un exemple de notre simple
i/
qui crée un objet texte entre/
's:Tant que vous suivez les ingrédients de base, vous pouvez créer des objets texte pour toutes sortes de choses.
Création avancée d'objets texte avec vim-textobj-user
Le plugin vim-textobj-user fournit un moyen courant de définir des objets texte personnalisés de manière plus déclarative. Par exemple, voici un objet texte de balise php:
Pour plus d' aide vim-textobj utilisateur voir son aide doc:
:h textobj-user-introduction
.Pour plus d'aide
Ainsi que la page Créer de nouveaux objets texte Vim wiki.
la source