Effectuer une action après avoir appelé une commande <Plug>

Aug 20 2020

J'utilise le mappage suivant pour envoyer du code à un REPL en utilisant vim-slime et tmux:

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

Comment puis-je effectuer une action après avoir appelé ce mappage?. Par exemple, je voudrais descendre d'une ligne ( j) après l' <Plug>SlimeLineSendexécution de. Cela ne fonctionne pas:

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

Réponses

3 filbranden Aug 20 2020 at 06:14

Cela fonctionne presque pour moi:

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

La raison pour laquelle cela ne fonctionne pas est que mon terminal Vim ne reconnaît en fait pas la <S-CR>séquence comme différente d'une simple <CR>, donc chaque fois que j'appuie sur <S-CR>Vim, je passe simplement à la ligne suivante et ne déclenche pas vraiment le mappage ... Si je faites de même en utilisant un déclencheur différent, cela fonctionne bien:

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

Chaque fois que vous développez un mappage, Vim recherchera la plus longue séquence de caractères correspondant à un mappage. Dans ce cas, ce sera <Plug>SlimeLineSend, ce qui déclenchera l'action. Le jest toujours sur le tampon, donc Vim utilisera cette commande comme un mouvement pour descendre d'une ligne.

(De nombreux plug-ins créent leurs <Plug>mappages avec un ensemble de parenthèses autour de la partie "commande", de sorte qu'il soit clair où elle se termine. De plus, cela leur permet de créer des commandes qui sont des préfixes d'autres commandes. Par exemple, emmet.vim a <Plug>(emmet-toggle-comment), Command-T a <Plug>(CommandT), etc.)

mroavi Aug 20 2020 at 06:14

J'ai trouvé une solution basée sur cette réponse: https://stackoverflow.com/a/18547013/1706778

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