Тишина должна идти раньше !./make.sh, а не раньше au. Если поставить silentперед, auзначит просто, он автоматически зарегистрирует автокоманду. Это должно выглядеть так:
au BufWritePost * silent! !./make.sh
Одна из проблем, связанных с запуском такой внешней команды с :silentкомандой, заключается в том, что экран не перерисовывается, и у вас остается пустой экран. Тем не менее, vim имеет команду, которая перерисовывает экран, которую можно использовать так:
au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!
Причина, по которой мне нужно использовать команду execute, заключается в том, что :!команда использует любые символы, найденные после нее, а это значит, что я не мог просто сделать это, silent! !./make.sh | redraw!потому что bash попытался бы интерпретировать все символы после !.
Примечания
Обратите внимание, что :silent!игнорирует сообщения об ошибках, а :silentне. Кроме того, >/dev/null 2>&1часть перенаправляет весь вывод !./make.shв /dev/null. Вы можете прочитать больше о перенаправлении ввода / вывода в bash здесь .
Вторая команда сработала, хотя она все еще печатает вывод на экран. Кроме того, мне не нужно нажимать Enter, когда скрипт больше не заканчивается, и это хорошо. Но мне интересно, есть ли способ полностью подавить вывод.
Андре Герман Безерра
1
Есть ли замена execute "!./make.sh"с execute "!./make.sh >/dev/null 2>&1"помощью? Это перенаправляет весь вывод команды на /dev/null. Прочтите tldp.org/LDP/abs/html/io-redirection.html для получения дополнительной информации о перенаправлении в bash.
EvergreenTree
Я должен был подумать об этом! Оно работает. Благодарность!
Андре Герман Безерра
7
Ответ на ваш прямой вопрос так же, как @EvergreenTree опубликовал. Однако я чувствую, что вам не хватает некоторых встроенных инструментов Vim для создания / компиляции / линтинга проектов. В частности, :makeсписок быстрых исправлений.
Что дает :makeнам использование?
Использование :makeпозволяет собирать ошибки в список, известный как список быстрых исправлений. Используя быстрое исправление, вы можете перемещаться между ошибками в ваших файлах, поэтому вы переходите прямо туда, где компилятор говорит об ошибке (удобно, правда?).
:сделать
Запуск :makeвыполнит программу make 'makeprg'. Затем проанализируйте вывод с помощью 'errorformat'и поместите каждую запись в список быстрых исправлений.
Обычно по 'makeprg'умолчанию используется makeкоманда, которая запускает Makefile. Однако вы можете изменить свой с 'makeprg'помощью :compilerкоманды или установить его непосредственно.
Вы также можете передать дополнительные аргументы :make. например:make clean
Примечание: во время выполнения :makeчасто вывод команды выводится внизу экрана с приглашением нажать клавишу ввода. Просто нажмите Enter, поскольку все выходные данные будут доступны в списке быстрых исправлений. Вы можете подавить это через :silent, например :silent make.
Обычная настраиваемая команда для автоматической сборки:
command -nargs=* -bar Smake silent make <args> <bar> cwindow
список быстрых исправлений
После того, как вы запустите :makeваш список быстрых исправлений, будет храниться вывод компилятора.
Используйте следующую команду для навигации по списку быстрых исправлений.
:copen открыть окно быстрого исправления
:cclose закрыть окно быстрого исправления
:cnext/ :cprevдля перехода к следующему / предыдущему элементу
:ccраспечатать внизу текущую ошибку или :cc 3показать конкретную ошибку в этом примере 3
Лично я использую Тима папы неразделенного плагин для перемещения по списку QuickFix.
А как насчет :makeавтоматического и бесшумного запуска ?
Вы можете сделать это с таким :autocmdже, как вы, где.
augroup auto_make
autocmd!
autocmd BufWritePost * silent make
autocmd QuickFixCmdPost *make* cwindow
augroup END
В качестве бонуса я добавил при открытии окна быстрого исправления через, :cwindowесли есть какие-либо ошибки присутствуют.
Примечание: должен быть более конкретным с этим шаблоном файла на BufWritePostautocmd, чтобы не связанные файлы не создавались.
Там еще больше ?!
Это использует только несколько встроенных команд Vim плюс несколько autocmd для убеждения. Есть, конечно, плагины и инструменты, которые могут помочь вам
Dispatch.vim может использоваться для :makeасинхронного запуска заданий.
Ale.vim (Asynchronous Lint Engine) - это плагин для обеспечения линтинга в NeoVim и Vim 8 во время редактирования текстовых файлов.
Unimpaired.vim упрощает управление списком быстрых исправлений.
Обычные старые Makefiles. Если вы ./script.shне очень сложны, вы можете попробовать использовать make. Он может масштабировать и выполнять больше задач позже и является распространенным инструментом построения.
Вы можете использовать Vim Awesome для поиска дополнительных плагинов, которые могут помочь.
Вывод
Лично я интегрирую :makeи быстрое исправление в свой рабочий процесс. Я считаю, что захват результатов вашего процесса сборки и фиксация ошибок окупаются. В качестве дополнительного бонуса вам, возможно, станет удобнее использовать список быстрых исправлений, и вы сможете использовать этот список для других приложений, например :grep.
execute "!./make.sh"
сexecute "!./make.sh >/dev/null 2>&1"
помощью? Это перенаправляет весь вывод команды на/dev/null
. Прочтите tldp.org/LDP/abs/html/io-redirection.html для получения дополнительной информации о перенаправлении в bash.Ответ на ваш прямой вопрос так же, как @EvergreenTree опубликовал. Однако я чувствую, что вам не хватает некоторых встроенных инструментов Vim для создания / компиляции / линтинга проектов. В частности,
:make
список быстрых исправлений.Что дает
:make
нам использование?Использование
:make
позволяет собирать ошибки в список, известный как список быстрых исправлений. Используя быстрое исправление, вы можете перемещаться между ошибками в ваших файлах, поэтому вы переходите прямо туда, где компилятор говорит об ошибке (удобно, правда?).:сделать
Запуск
:make
выполнит программу make'makeprg'
. Затем проанализируйте вывод с помощью'errorformat'
и поместите каждую запись в список быстрых исправлений.Обычно по
'makeprg'
умолчанию используетсяmake
команда, которая запускаетMakefile
. Однако вы можете изменить свой с'makeprg'
помощью:compiler
команды или установить его непосредственно.Вы также можете передать дополнительные аргументы
:make
. например:make clean
Примечание: во время выполнения
:make
часто вывод команды выводится внизу экрана с приглашением нажать клавишу ввода. Просто нажмите Enter, поскольку все выходные данные будут доступны в списке быстрых исправлений. Вы можете подавить это через:silent
, например:silent make
.Обычная настраиваемая команда для автоматической сборки:
список быстрых исправлений
После того, как вы запустите
:make
ваш список быстрых исправлений, будет храниться вывод компилятора.Используйте следующую команду для навигации по списку быстрых исправлений.
:copen
открыть окно быстрого исправления:cclose
закрыть окно быстрого исправления:cnext
/:cprev
для перехода к следующему / предыдущему элементу:cc
распечатать внизу текущую ошибку или:cc 3
показать конкретную ошибку в этом примере 3Лично я использую Тима папы неразделенного плагин для перемещения по списку QuickFix.
А как насчет
:make
автоматического и бесшумного запуска ?Вы можете сделать это с таким
:autocmd
же, как вы, где.В качестве бонуса я добавил при открытии окна быстрого исправления через,
:cwindow
если есть какие-либо ошибки присутствуют.Примечание: должен быть более конкретным с этим шаблоном файла на
BufWritePost
autocmd, чтобы не связанные файлы не создавались.Там еще больше ?!
Это использует только несколько встроенных команд Vim плюс несколько autocmd для убеждения. Есть, конечно, плагины и инструменты, которые могут помочь вам
:make
асинхронного запуска заданий.:write
../script.sh
не очень сложны, вы можете попробовать использовать make. Он может масштабировать и выполнять больше задач позже и является распространенным инструментом построения.Вывод
Лично я интегрирую
:make
и быстрое исправление в свой рабочий процесс. Я считаю, что захват результатов вашего процесса сборки и фиксация ошибок окупаются. В качестве дополнительного бонуса вам, возможно, станет удобнее использовать список быстрых исправлений, и вы сможете использовать этот список для других приложений, например:grep
.Для получения дополнительной помощи см .:
источник
:make
когда отвечал на это, но я не включил это. Лучше использовать команду make fore compiling.