Apakah mungkin membuat pemetaan dengan parameter?

11

Saya telah membuat beberapa pemetaan seperti:

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

yang berfungsi seperti yang diinginkan.

Sekarang saya sedang mencari kemungkinan untuk membuat templat-peta yang memungkinkan saya untuk menghapus bagian-bagian yang jelas dari pemetaan saya, sesuatu seperti

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

sehingga saya bisa meneruskan nilai apa pun sebagai parameter ke SomeFunc.

Apakah ada kemungkinan seperti itu?

René Nyffenegger
sumber
7
Anda bisa menggunakan input()atau getchar(). Namun mungkin lebih normal menggunakan perintah daripada pemetaan untuk sesuatu yang mengambil parameter.
Peter Rincker
Saya setuju dengan komentar Peter; perintah lebih cocok untuk pekerjaan daripada pemetaan.
romainl

Jawaban:

6

Seperti yang dikatakan @ peter-rinckler, mungkin lebih mudah melakukannya dengan perintah:

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

Memungkinkan untuk melakukan (dalam mode normal)

:Xyz ABC

Saya tidak terlalu suka input()karena Anda tidak dapat mengulangi hal-hal seperti itu dengan mudah.

edi9999
sumber
6

Berkat komentar Peter Rincker, saya telah menemukan jawabannya:

:nnoremap <buffer> <leader> xyz :call SomeFunc(input('Param: '))<CR>
René Nyffenegger
sumber
Berikut ini adalah contoh lain: nnoremap <silent> <leader>tn :exe "tabn" nr2char(getchar())<cr> . Idenya adalah mengetik <leader>tn2untuk menavigasi ke tab 2.
Jasha
1

Anda mungkin ingin melihat SnipMate , yang bertujuan memberikan potongan seperti TextMate ke vim. Itu terbukti sangat membantu saya.

Taruhan Lamed
sumber