È possibile creare mappature con parametri?


11

Ho creato alcune mappature in questo modo:

: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>

che funziona come desiderato.

Ora sto cercando la possibilità di creare un modello di mappa che mi consenta di rimuovere le parti ridondanti ovvie delle mie mappature, qualcosa come

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

in modo da poter passare qualsiasi valore come parametro aSomeFunc .

C'è una tale possibilità?


7
Puoi usare input()o getchar(). Tuttavia è probabilmente più normale usare un comando invece di una mappatura per qualcosa che accetta un parametro.
Peter Rincker,

Sono d'accordo con il commento di Peter; i comandi sono più adatti al lavoro rispetto ai mapping.
Romainl,

Risposte:


6

Come diceva @ peter-rinckler, probabilmente è più facile farlo con un comando:

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

Rende possibile fare (in modalità normale)

:Xyz ABC

Non mi piace molto input()perché non puoi ripetere facilmente questo tipo di cose.


6

Grazie al commento di Peter Rincker, ho trovato la risposta:

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

Ecco un altro esempio: nnoremap <silent> <leader>tn :exe "tabn" nr2char(getchar())<cr> . L'idea è quella di digitare <leader>tn2per passare alla scheda 2.
Jasha

1

Potresti dare un'occhiata a SnipMate , che ha lo scopo di fornire a Vim frammenti simili a TextMate. Mi è stato di grande aiuto, comunque.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.