Можно ли создавать сопоставления с параметрами?


11

Я создал несколько отображений примерно так:

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

который работает как хотелось бы.

Сейчас я ищу возможность создать шаблон карты, который позволил бы мне удалить очевидные избыточные части моих отображений, что-то вроде

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

чтобы я мог передать любое значение в качестве параметра SomeFunc.

Есть ли такая возможность?


7
Вы можете использовать input()или getchar(). Однако, вероятно, более нормально использовать команду вместо отображения для чего-то, что принимает параметр.
Питер Ринкер

Я согласен с комментарием Питера; Команды лучше подходят для работы, чем отображения.
Ромен

Ответы:


6

Как сказал @ peter-rinckler, это, вероятно, проще сделать с помощью команды:

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

Делает это возможным (в обычном режиме)

:Xyz ABC

Мне не очень нравится, input()потому что вы не можете легко повторять такие вещи.


6

Благодаря комментарию Питера Ринкера я нашел ответ:

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

Вот еще один пример: nnoremap <silent> <leader>tn :exe "tabn" nr2char(getchar())<cr> . Идея заключается в том , чтобы набрать , <leader>tn2чтобы перейти на вкладку 2.
Яша

1

Возможно, вы захотите взглянуть на SnipMate , целью которого является предоставление vim-подобных фрагментов TextMate. В любом случае, это оказалось очень полезным для меня.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.