В основном я использую vim как редактор для программирования на C/C++. К сожалению, я не совсем доволен тем, как работает мой процесс сборки. Я знаю, что можно ввести (или сопоставить с клавишей) :make
для запуска процесса make. Однако мне не нравится, как работает эта команда, поскольку она запускает процесс сборки в том же окне терминала без надлежащей подсветки.Поэтому я обычно запускаю команду make в другом окне на своем втором мониторе, чтобы у меня была как правильная подсветка, так и возможность просматривать ошибки сборки, которые компилятор показывает мне в одном окне, прокручивая исходный код в моем главном окне vim.
Это также довольно утомительно, потому что мне нужно переключить фокус на другое окно, а затем ввести команду make.
Теперь мой вопрос заключается в следующем: можно ли заставить vim запустить команду make в этом другом окне, не меняя фокус? Таким образом, я мог бы просто сопоставить команду «создать в другом окне» с какой-либо клавишей в vim и добиться всего этого одним нажатием клавиши.
Моя система — Manjaro Linux с i3 в качестве DWM.
(Я не знал, публиковать ли это на stackoverflow или здесь, пожалуйста, простите меня, если я ошибся форумом.)
С именованными каналами:
make
, и создайте новый канал с помощью mkfifo mypipe
. watch --color -n 0.3 'cat mypipe'
, чтобы всегда читать именованный канал. :!script -q -c "make" mypipe > /dev/null
в Vim после сохранения изменений в исходном коде. Мы должны использовать script
, чтобы обмануть программу, чтобы сохранить цветной вывод . Убедитесь, что ваша версияwatch
поддерживает цвет .
Вы можете добавить это в свой~/.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
.