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ść?


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.


6

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

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

Oto kolejny przykład: nnoremap <silent> <leader>tn :exe "tabn" nr2char(getchar())<cr> . Chodzi o to, aby <leader>tn2przejść do zakładki 2.
Jasha

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.