<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