Недавно появилось дополнение к NeoVim, которое позволяет открывать терминал в буфере vim. Это имеет привлекательные возможности для отправки текста из одного окна vim в другое, например, в режиме REPL.
В прошлом я использовал tmux для такой конфигурации. Однако теперь я хотел бы попробовать это, используя только NeoVim.
У меня вопрос - как я могу отправить блок текста из одного VIM-сплит в другой? Или, может быть, скорее - как я могу автоматизировать последовательность выделения текста, его восстановления, изменения разбиения и вставки?
источник
p
в буфере терминала не входит в режим терминала, поэтому следующее<C-\><C-N>
не должно быть необходимым. (Тем не менее, это также совершенно безвредно.)Терминальные буферы Neovim всегда имеют связанный идентификатор задания, поэтому одним из способов является использование API управления заданиями для отправки текста. Добавьте это к вашему vimrc:
Который сохранит идентификатор задания последнего созданного терминала в
g:last_terminal_job_id
переменную. Затем вы можете создать некоторые функции / команды / отображения, которые будут отправлять данные, используяjobsend
функцию, вот пример:Выше будет посылать текущую строку, но вы можете расширить ее, чтобы отправить визуальный выбор.
источник
Neoterm - это плагин для neovim, который разработан для этой цели. Он реализует новую команду,
:TREPLSend
которая возьмет текущую строку и отправит ее в окно терминала. Прекрасно работает для базового Bash и любого языка, который имеет режим REPL.источник
В дополнение к ответам здесь я реализовал плагин для этой цели: vim-sendtowindow .
Он предоставляет оператор send-to-window, который можно комбинировать с любым движением vim для выбора текста для отправки в соседнее окно. Кроме того, он удобно позиционирует курсор после отправляемого текста и является точечно повторяемым.
Небольшой пример ниже:
источник