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é?


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.


6

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

:nnoremap <buffer> <leader> xyz :call SomeFunc(input('Param: '))<CR>

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.