ดำเนินการหลังจากเรียกใช้คำสั่ง <Plug>

Aug 20 2020

ฉันใช้การแมปต่อไปนี้เพื่อส่งรหัสไปยัง REPL โดยใช้ vim-slime และ tmux:

nmap <buffer> <S-CR> <Plug>SlimeLineSend

ฉันจะดำเนินการได้อย่างไรหลังจากเรียกใช้การแมปนี้ ตัวอย่างเช่นฉันต้องการเลื่อนลงหนึ่งบรรทัด ( j) หลังจาก<Plug>SlimeLineSendดำเนินการแล้ว สิ่งนี้ใช้ไม่ได้:

nmap <buffer> <S-CR> <Plug>SlimeLineSend j

คำตอบ

3 filbranden Aug 20 2020 at 06:14

เกือบจะได้ผลสำหรับฉัน:

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)ฯลฯ )

mroavi Aug 20 2020 at 06:14

ฉันคิดวิธีแก้ปัญหาตามคำตอบนี้: https://stackoverflow.com/a/18547013/1706778

nmap <buffer> <S-CR> :execute "normal \<Plug>SlimeLineSend"<CR>j