Lakukan tindakan setelah menjalankan perintah <Plug>

Aug 20 2020

Saya menggunakan pemetaan berikut untuk mengirim kode ke REPL menggunakan vim-slime dan tmux:

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

Bagaimana saya dapat melakukan tindakan setelah saya meminta pemetaan ini ?. Misalnya, saya ingin turun satu baris ( j) setelah <Plug>SlimeLineSenddieksekusi. Ini tidak bekerja:

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

Jawaban

3 filbranden Aug 20 2020 at 06:14

Ini hampir berhasil untuk saya:

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

Alasan sebenarnya tidak berfungsi adalah karena terminal Vim saya sebenarnya tidak mengenali <S-CR>urutan berbeda dari yang sederhana <CR>, jadi setiap kali saya menekan <S-CR>Vim hanya bergerak ke baris berikutnya dan tidak benar-benar memicu pemetaan ... Jika saya lakukan hal yang sama menggunakan pemicu yang berbeda, ini berfungsi dengan baik:

nmap <buffer> <LocalLeader>s <Plug>SlimeLineSendj

Setiap kali memperluas pemetaan, Vim akan mencari urutan karakter terpanjang yang cocok dengan pemetaan. Dalam kasus ini, ini akan menjadi <Plug>SlimeLineSend, yang akan memicu tindakan. The jmasih di buffer, sehingga Vim akan menggunakan perintah ini sebagai mosi untuk turun satu baris.

(Banyak pengaya membuat <Plug>pemetaan mereka dengan satu set tanda kurung di sekitar bagian "perintah", sehingga jelas di mana itu berakhir. Selain itu, itu memungkinkan mereka membuat perintah yang merupakan awalan dari perintah lain. Misalnya, emmet.vim memiliki <Plug>(emmet-toggle-comment), Command-T punya <Plug>(CommandT), dll.)

mroavi Aug 20 2020 at 06:14

Saya menemukan solusi berdasarkan jawaban ini: https://stackoverflow.com/a/18547013/1706778

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