Comment puis-je ajouter un mappage ex-mode dans Vim?

4

Je viens de créer une fonction Vim pour remplacer les sauts de ligne Windows par des sauts Unix. Maintenant, je veux pouvoir taper :linebreaket le faire fonctionner. Voici ma première tentative:

function UseUnixLineBreaks()
  :%s/^M/\r/g
endfunction

cmap linebreak :call UseUnixLineBreaks()<CR>

(Au fait, c’est ^Mun caractère de contrôle - tapez-le avec Ctrl+v Ctrl+m)

Lorsque j'essaie d'exécuter ceci en le tapant :linebreak, il s'exécute, mais il se comporte étrangement: chaque lettre de la commande apparaît dans l'ordre, effaçant la précédente. Par exemple, je vois :l, puis :i, puis :n, etc. Lorsque je tape la dernière lettre, elle s’exécute immédiatement.

Je veux que toute la commande apparaisse, afin que je puisse voir que je l'ai tapée correctement, puis appuyez sur Entrée pour l'exécuter.

Comment puis-je faire ceci?

Nathan Long
la source

Réponses:

5

Deviner

Apparemment, ce que je veux, ce n’est pas du tout un mapping, mais une commande. Donc, la dernière ligne devrait être remplacée par:

command Linebreak call UseUnixLineBreaks()

Notez la majuscule "L" - les commandes définies par l'utilisateur doivent commencer par une lettre majuscule. Voir :help command.

Nathan Long
la source
2

C'est ainsi que fonctionnent les mappages: le remplacement a lieu après la saisie de l'intégralité du mappage.

Pour créer des alias de commande, essayez le script cmdalias.vim .

Sur une note connexe, :setl ff=unix.

Grawity
la source