<Plug>コマンドを呼び出した後にアクションを実行します
Aug 20 2020
次のマッピングを使用して、vim-slimeとtmuxを使用してコードをREPLに送信します。
nmap <buffer> <S-CR> <Plug>SlimeLineSend
このマッピングを呼び出した後、どうすればアクションを実行できますか?たとえばj
、<Plug>SlimeLineSend
が実行された後、1行下()に移動したいと思います。これは動作しません:
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
マッピングを展開するときはいつでも、Vimはマッピングに一致する文字の最長シーケンスを探します。この場合、これはになり<Plug>SlimeLineSend
、アクションがトリガーされます。j
バッファに残っているので、Vimは1行下に行くための運動として、このコマンドを使用します。
(多くのプラグイン<Plug>
は、「コマンド」部分の周りに一連の親を使用してマッピングを作成するため、どこで終了するかが明確になります。また、他のコマンドのプレフィックスであるコマンドを作成できます。たとえば、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