Có thể tạo ánh xạ với các tham số?


11

Tôi đã tạo ra một vài ánh xạ như vậy:

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

mà hoạt động như mong muốn.

Bây giờ tôi đang tìm kiếm một khả năng để tạo một mẫu bản đồ cho phép tôi loại bỏ các phần dư thừa rõ ràng trên bản đồ của mình, đại loại như

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

để tôi có thể chuyển bất kỳ giá trị nào dưới dạng tham số SomeFunc.

Có khả năng như vậy không?


7
Bạn có thể sử dụng input()hoặc getchar(). Tuy nhiên, có lẽ bình thường hơn khi sử dụng lệnh thay vì ánh xạ cho thứ gì đó có tham số.
Peter Rincker

Tôi đồng ý với nhận xét của Peter; các lệnh phù hợp với công việc hơn ánh xạ.
romainl

Câu trả lời:


6

Như @ peter-rinckler đã nói, có thể dễ dàng thực hiện nó hơn bằng một lệnh:

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

Làm cho nó có thể làm (trong chế độ bình thường)

:Xyz ABC

Tôi không thực sự thích input()vì bạn không thể lặp lại những điều đó một cách dễ dàng.


6

Nhờ nhận xét của Peter Rincker, tôi đã tìm thấy câu trả lời:

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

Đây là một ví dụ khác : nnoremap <silent> <leader>tn :exe "tabn" nr2char(getchar())<cr> . Ý tưởng là gõ <leader>tn2để điều hướng đến tab 2.
Jasha

1

Bạn có thể muốn xem SnipMate , nhằm mục đích đưa các đoạn giống như TextMate cho vim. Nó đã chứng minh rất hữu ích cho tôi, dù sao.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.