Czy można tworzyć odwzorowania z parametrami?

11

Stworzyłem kilka takich mapowań:

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

który działa zgodnie z życzeniem.

Teraz szukam możliwości stworzenia szablonu mapy, który pozwoliłby mi usunąć oczywiste zbędne części moich mapowań, coś w rodzaju

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

żebym mógł przekazać dowolną wartość jako parametr do SomeFunc.

Czy jest taka możliwość?

René Nyffenegger
źródło
7
Możesz użyć input()lub getchar(). Jednak prawdopodobnie bardziej normalne jest użycie polecenia zamiast mapowania dla czegoś, co wymaga parametru.
Peter Rincker,
Zgadzam się z komentarzem Piotra; polecenia lepiej pasują do zadania niż mapowania.
romainl

Odpowiedzi:

6

Jak powiedział @ peter-rinckler, prawdopodobnie łatwiej jest to zrobić za pomocą polecenia:

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

Umożliwia zrobienie tego (w trybie normalnym)

:Xyz ABC

Nie podoba mi się to, input()ponieważ nie można łatwo powtarzać tego rodzaju rzeczy.

edi9999
źródło
6

Dzięki komentarzowi Petera Rinckera znalazłem odpowiedź:

:nnoremap <buffer> <leader> xyz :call SomeFunc(input('Param: '))<CR>
René Nyffenegger
źródło
Oto kolejny przykład: nnoremap <silent> <leader>tn :exe "tabn" nr2char(getchar())<cr> . Chodzi o to, aby <leader>tn2przejść do zakładki 2.
Jasha
1

Możesz rzucić okiem na SnipMate , który ma na celu udostępnienie vimowi fragmentów podobnych do TextMate. W każdym razie okazało się to bardzo pomocne.

Bet Lamed
źródło