เป็นไปได้หรือไม่ที่จะสร้างการแมปด้วยพารามิเตอร์?


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()อย่างไรก็ตามอาจเป็นเรื่องปกติที่จะใช้คำสั่งแทนการจับคู่กับสิ่งที่ใช้พารามิเตอร์
Peter Rincker

ฉันเห็นด้วยกับความคิดเห็นของปีเตอร์; คำสั่งเหมาะสมกับงานมากกว่าการแม็พ
romainl

คำตอบ:


6

ดังที่ @ peter-rinckler กล่าวว่าอาจเป็นเรื่องง่ายที่จะทำด้วยคำสั่ง:

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

ทำให้เป็นไปได้ที่จะทำ (ในโหมดปกติ)

:Xyz ABC

ฉันไม่ชอบinput()เพราะคุณไม่สามารถทำซ้ำสิ่งเหล่านั้นได้อย่างง่ายดาย


6

ขอบคุณที่ความคิดเห็นของ Peter Rincker ฉันได้พบคำตอบ:

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

นี่เป็นอีกตัวอย่าง: nnoremap <silent> <leader>tn :exe "tabn" nr2char(getchar())<cr> . ความคิดคือการพิมพ์<leader>tn2เพื่อนำทางไปยังแท็บ 2
Jasha

1

คุณอาจต้องการดูSnipMateซึ่งมีจุดมุ่งหมายที่จะให้ตัวอย่างข้อความ TextMate เพื่อเป็นกลุ่ม มันพิสูจน์แล้วว่าเป็นประโยชน์กับฉันมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.