Y a-t-il un objet texte pour la ligne actuelle?

Réponses:

13

Voici un texte brut "ligne":

xnoremap il g_o0
onoremap il :normal vil<CR>
xnoremap al $o0
onoremap al :normal val<CR>

Et un objet texte "tampon" grossier:

xnoremap i% GoggV
onoremap i% :normal vi%<CR>

---ÉDITER---

Un « opérateur » est une commande qui ne fait rien par lui - même: d, y, etc.

L'appui sur ces touches vous met en "mode en attente de l'opérateur", où Vim attend que vous lui disiez sur quoi vous voulez qu'il opère ... avec un "mouvement en attente de l'opérateur".

Vous pouvez utiliser :omapou :onoremappour définir des mouvements personnalisés en attente de l'opérateur. La technique utilisée ici est inspirée par :help omap-info:

  1. vous définissez une cartographie du mode visuel qui couvre la zone souhaitée,
  2. vous utilisez ce mappage dans un mappage en attente d'opérateur.

Notez que j'ai utilisé :onoremapparce que il, alet i%n'existent pas déjà. Si vous surchargez un mouvement existant ou texte-objet - dire ip- vous devez utiliser un mappage récursif: :omap.

:help :map-operator décrit une méthode légèrement plus avancée.

Voir :help v_opour oen mode visuel.

romainl
la source
Cool. Pourriez-vous en expliquer quelques morceaux? Qu'est-ce que o(mode opérateur en attente) dans onoremap? Que fait ole mode visuel? Je suppose que c'est "de l'autre côté", car il semble sauter de l'autre côté d'une sélection ... Comment puis-je le trouver :h? Je ne le trouve pas avec :h x_oou :h o.
lindhe
Explication ajoutée.
romainl
1

Je suggérerais une solution supplémentaire, d'utiliser ^ au lieu de 0 (donc la ligne commence au début du premier caractère:

xnoremap il g_o^
onoremap il :normal vil<CR>
xnoremap al $o^
onoremap al :normal val<CR>

De cette façon, si nous changeons de ligne, cela respectera le niveau de retrait.

Blasco
la source
Il existe également un plugin fournissant cette fonctionnalité par vim master kana: github.com/kana/vim-textobj-line/blob/master/doc/…
Blasco