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

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()потому что вы не можете легко повторять такие вещи.

edi9999
источник
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. В любом случае, это оказалось очень полезным для меня.

Бет Ламед
источник