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?


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.


6

Berkat komentar Peter Rincker, saya telah menemukan jawabannya:

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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.