Есть ли способ заставить vim запустить команду make в другом окне терминала?

В основном я использую vim как редактор для программирования на C/C++. К сожалению, я не совсем доволен тем, как работает мой процесс сборки. Я знаю, что можно ввести (или сопоставить с клавишей) :makeдля запуска процесса make. Однако мне не нравится, как работает эта команда, поскольку она запускает процесс сборки в том же окне терминала без надлежащей подсветки.Поэтому я обычно запускаю команду make в другом окне на своем втором мониторе, чтобы у меня была как правильная подсветка, так и возможность просматривать ошибки сборки, которые компилятор показывает мне в одном окне, прокручивая исходный код в моем главном окне vim. Это также довольно утомительно, потому что мне нужно переключить фокус на другое окно, а затем ввести команду make.

Теперь мой вопрос заключается в следующем: можно ли заставить vim запустить команду make в этом другом окне, не меняя фокус? Таким образом, я мог бы просто сопоставить команду «создать в другом окне» с какой-либо клавишей в vim и добиться всего этого одним нажатием клавиши.

Моя система — Manjaro Linux с i3 в качестве DWM.

(Я не знал, публиковать ли это на stackoverflow или здесь, пожалуйста, простите меня, если я ошибся форумом.)

3
20.06.2020, 14:52
2 ответа

С именованными каналами:

  1. Откройте исходный код с помощью Vim в одном терминале.
  2. Откройте второй терминал, куда вы хотите вывести make, и создайте новый канал с помощью mkfifo mypipe.
  3. Во втором терминале запустите watch --color -n 0.3 'cat mypipe', чтобы всегда читать именованный канал.
  4. В первом терминале запустите :!script -q -c "make" mypipe > /dev/nullв Vim после сохранения изменений в исходном коде.

Мы должны использовать script, чтобы обмануть программу, чтобы сохранить цветной вывод . Убедитесь, что ваша версияwatchподдерживает цвет .

1
18.03.2021, 23:25

Вы можете добавить это в свой~/.vimrc:

nnoremap <Space> :vert :term make<CR><C-W><C-w>

Здесь мы переназначаем команду Пробел клавишу :vert :term make<CR><C-W><C-w>, что означает:

  • :vertСделайте вертикальный шпагат;
  • :termЗапустить терминал в новом окне;
  • make<CR>Запустите makeв этом терминале;
  • <C-W><C-w>Вернуть фокус в исходное окно.

Надеюсь, это то, что вам нужно. Конечно, выберите нужную клавишу/комбинацию (, которая не обязательно должна быть Пробел ), и если вы предпочитаете горизонтальное разделение, просто удалите бит :vert.

1
18.03.2021, 23:25

Теги

Похожие вопросы