Чи можливо створити відображення з параметрами?


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(). Однак, ймовірно, більш нормально використовувати команду замість відображення для чогось, що приймає параметр.
Пітер Рінкер

Я згоден з коментарем Петра; команди краще підходять для завдання, ніж відображення.
romainl

Відповіді:


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 , який спрямований на надання фрагментів, подібних TextMate, до vim. Мені це виявилося дуже корисним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.