Effectuer une action après avoir appelé une commande <Plug>
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
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.)
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