Extension des mappages Vim à Exécuter N fois

2

Je veux être capable de taper quelque chose comme 'Ncom' en mode normal qui commentera les lignes actuelles, puis les N-1 suivantes. Un mappage de touches que j'ai fait pour le faire est, :nmap com ^i#<ESC>j. En fait, cela met en commentaire la ligne actuelle, mais cela ne fonctionne pas pour N lignes d'une manière similaire aux commandes vim intégrées. Qu'est-ce que j'ai besoin de savoir sur vim pour expliquer l'écart entre ce que je veux et ce qui se passe? Aussi, comment pourrais-je implémenter correctement ce que je veux?

seewalker
la source

Réponses:

2
:nnoremap com :normal! I#<CR>

Explication…

  • I est le même que ^i mais mieux. Généralement, vous devriez faire ce qui suit au lieu de ^i#<Esc>:

    I#<Esc>
    

    Pareil pour $a, au fait.

  • :normal est une commande Ex qui vous permet d’exécuter une commande en mode normal à partir de la ligne de commande. Il est utilisé comme ça, suivi de <CR>:

    :normal! I#
    
  • Lorsqu'une commande en mode normal est précédée d'un count: 6w, la commande est exécutée 6 fois. Cependant, le count n'est pas propagé aux commandes suivantes: 6wifoo n'ajoute pas foo avant chacun des 6 mots suivants. Les règles peuvent varier en fonction de la commande: consultez la documentation en cas de doute.

  • Quand une commande Ex est ajoutée à un count: 6:command, Vim ajoute automatiquement une plage commençant à la ligne actuelle et se terminant par count-1 ligne en dessous. Si tu fais 6:normal! I#, la commande devient:

    :.,.+5normal! I#
    

    ce qui signifie "insérer un # avant le premier caractère imprimable de cette ligne et les 5 lignes ci-dessous ".

  • Quand Vim rencontre une commande Ex dans un mapping, avec un :, il ajoute toujours la plage pertinente. C'est pourquoi il vaut mieux utiliser :normal dans les mappages qui sont destinés à être utilisés sur plusieurs lignes ou avec un count.

Voir :help range et :help :normal.

romainl
la source