ดำเนินการหลังจากเรียกใช้คำสั่ง <Plug>
ฉันใช้การแมปต่อไปนี้เพื่อส่งรหัสไปยัง REPL โดยใช้ vim-slime และ tmux:
nmap <buffer> <S-CR> <Plug>SlimeLineSend
ฉันจะดำเนินการได้อย่างไรหลังจากเรียกใช้การแมปนี้ ตัวอย่างเช่นฉันต้องการเลื่อนลงหนึ่งบรรทัด ( j
) หลังจาก<Plug>SlimeLineSend
ดำเนินการแล้ว สิ่งนี้ใช้ไม่ได้:
nmap <buffer> <S-CR> <Plug>SlimeLineSend j
คำตอบ
เกือบจะได้ผลสำหรับฉัน:
nmap <buffer> <S-CR> <Plug>SlimeLineSendj
เหตุผลที่มันใช้ไม่ได้จริงก็คือ Vim เทอร์มินัลของฉันไม่รู้จัก<S-CR>
ลำดับที่แตกต่างจากแบบธรรมดา<CR>
ดังนั้นเมื่อใดก็ตามที่ฉันกด<S-CR>
Vim เพียงแค่เลื่อนไปที่บรรทัดถัดไปและไม่ได้เรียกใช้การแมปจริงๆ ... ถ้าฉัน ทำเช่นเดียวกันโดยใช้ทริกเกอร์อื่นมันใช้งานได้ดี:
nmap <buffer> <LocalLeader>s <Plug>SlimeLineSendj
เมื่อใดก็ตามที่ขยายการแม็ปกลุ่มจะมองหาลำดับอักขระที่ยาวที่สุดที่ตรงกับการแม็ป ในกรณีนี้จะเป็น<Plug>SlimeLineSend
เช่นนี้ซึ่งจะทำให้เกิดการดำเนินการ j
ยังอยู่ในบัฟเฟอร์เพื่อให้เป็นกลุ่มจะใช้คำสั่งนี้เป็นความเคลื่อนไหวที่จะไปลงหนึ่งบรรทัด
(ปลั๊กอินจำนวนมากสร้างการ<Plug>
แมปด้วยชุดของ parens รอบ ๆ ส่วน "คำสั่ง" เพื่อให้ชัดเจนว่าสิ้นสุดที่ใดนอกจากนี้ยังช่วยให้สามารถสร้างคำสั่งที่เป็นส่วนนำหน้าของคำสั่งอื่น ๆ ตัวอย่างเช่น emmet.vim มี<Plug>(emmet-toggle-comment)
, Command-T มี<Plug>(CommandT)
ฯลฯ )
ฉันคิดวิธีแก้ปัญหาตามคำตอบนี้: https://stackoverflow.com/a/18547013/1706778
nmap <buffer> <S-CR> :execute "normal \<Plug>SlimeLineSend"<CR>j