Est-il possible de créer des mappages avec des paramètres?

11

J'ai créé quelques mappages comme ceci:

:nnoremap <buffer> <leader>xyzABC   :call SomeFunc('ABC')<CR>
:nnoremap <buffer> <leader>xyzDE    :call SomeFunc('DE')<CR>
:nnoremap <buffer> <leader>xyzFoo18 :call SomeFunc('Foo18')<CR>
:nnoremap <buffer> <leader>xyzBar22 :call SomeFunc('Bar22')<CR>

qui fonctionne comme vous le souhaitez.

Je cherche maintenant une possibilité de créer un modèle de carte qui me permettrait de supprimer les parties redondantes évidentes de mes mappages, quelque chose comme

:nnoremap <buffer> <leader> xyz? :call SomeFunc(?)<CR>

afin que je puisse passer n'importe quelle valeur comme paramètre à SomeFunc.

Y a-t-il une telle possibilité?

René Nyffenegger
la source
7
Vous pouvez utiliser input()ou getchar(). Cependant, il est probablement plus normal d'utiliser une commande au lieu d'un mappage pour quelque chose qui prend un paramètre.
Peter Rincker
Je suis d'accord avec le commentaire de Peter; les commandes sont mieux adaptées au travail que les mappages.
romainl

Réponses:

6

Comme l'a dit @ peter-rinckler, il est probablement plus facile de le faire avec une commande:

command! -nargs=* Xyz :call SomeFunc(<q-args>)

Permet de faire (en mode normal)

:Xyz ABC

Je n'aime pas vraiment ça input()parce que vous ne pouvez pas répéter ce genre de choses facilement.

edi9999
la source
6

Grâce au commentaire de Peter Rincker, j'ai trouvé la réponse:

:nnoremap <buffer> <leader> xyz :call SomeFunc(input('Param: '))<CR>
René Nyffenegger
la source
Voici un autre exemple: nnoremap <silent> <leader>tn :exe "tabn" nr2char(getchar())<cr> . L'idée est de taper <leader>tn2pour accéder à l'onglet 2.
Jasha
1

Vous voudrez peut-être jeter un œil à SnipMate , qui vise à donner des extraits de type TextMate à vim. Cela m'a été très utile de toute façon.

Bet Lamed
la source