Выполнить действие после вызова команды <Plug>

Aug 20 2020

Я использую следующее сопоставление для отправки кода в REPL с помощью vim-slime и tmux:

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

Как я могу выполнить действие после вызова этого сопоставления ?. Например, я хотел бы переместиться на одну строку вниз ( j) после <Plug>SlimeLineSendвыполнения. Это не работает:

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 будет использовать эту команду как движение для перехода на одну строку вниз.

(Многие подключаемые модули создают свои <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