Придушити вихід з автокоманди vim


13

У моєму vimrc визначено автокоманду:

au BufWritePost * !./make.sh

Сценарій make.shзбирає .texфайл 3 рази, і я не хочу, щоб результат відображався.

Чи є спосіб придушити вихід?

Я намагався додати silentодин рядок перед auкомандою, але це не вийшло. Я також пробував цей спосіб без успіху.

Відповіді:


20

Мовчки повинні йти раніше !./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 тут .

Відповідні теми довідки

  • :help :execute
  • :help :silent
  • :help :!
  • :help :bar

Друга команда спрацювала, хоча вона все ще друкує вихід на екрані. Крім того, мені не потрібно натискати 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буде виконувати програму грим, 'makeprg'. Потім проаналізуйте вихід 'errorformat'і додайте кожен запис до списку швидких виправлень.

Зазвичай 'makeprg'за замовчуванням для makeкоманди, яка виконує a Makefile. Однак ви можете змінити свою команду 'makeprg'за допомогою :compilerкоманди або встановити її безпосередньо.

Ви також можете передавати додаткові аргументи :make. напр:make clean

Примітка: біг :makeчасто показує вихід команди в нижній частині екрана із запитом натиснути клавішу Enter. Просто натисніть клавішу Enter, оскільки весь вихід буде доступний у списку швидких виправлень. Ви можете придушити це через :silent, напр :silent make.

Загальна спеціальна команда для безшумного виготовлення:

command -nargs=* -bar Smake silent make <args> <bar> cwindow

список виправлень

Після запуску :makeсписку швидких виправлень буде проведено вихід компілятора.

За допомогою наступної команди перейдіть до списку швидких виправлень.

  • :copen щоб відкрити вікно швидкого виправлення
  • :cclose щоб закрити вікно швидкого виправлення
  • :cnext/ :cprevдля переходу до наступного / попереднього пункту
  • :ccроздрукувати внизу поточну помилку або :cc 3показати конкретну помилку в цьому прикладі 3

Особисто я використовую безперешкодний плагін Тіма Попа для навігації по списку швидких виправлень.

А що робити :makeавтоматично і безшумно?

Ви можете це зробити так :autocmdсамо, як і ви, де.

augroup auto_make
    autocmd!
    autocmd BufWritePost * silent make
    autocmd QuickFixCmdPost *make* cwindow
augroup END

Як бонус я додав у відкритті вікна швидкого :cwindowвиправлення через наявність будь-яких помилок.

Примітка. Має бути більш конкретним із тим шаблоном файлу на BufWritePostautocmd, щоб не пов'язані файли, що не пов'язані.

Там ще більше ?!

Для переконання використовується лише декілька вбудованих команд Vim плюс кілька autocmd. Звичайно, є плагіни та інструменти, які можуть вам допомогти

  • Dispatch.vim можна використовувати для :makeасинхронного виконання завдань.
  • Синтаксичний синтаксис плагіну перевіряє файл після :write.
  • Ale.vim (Asynchronous Lint Engine) - плагін для забезпечення зв’язок у NeoVim та Vim 8 під час редагування текстових файлів.
  • Unimpaired.vim полегшує керування списком швидких виправлень .
  • Прості старі макіяжі. Якщо ваш склад ./script.shне дуже складний, ви, можливо, захочете вивчити використання make. Пізніше він може масштабувати виконання більше завдань і є загальним інструментом побудови.
  • Ви можете використовувати Vim Awesome для пошуку додаткових плагінів, які можуть допомогти.

Висновок

Особисто я інтегрую :makeі виправлення в свій робочий процес. Я вважаю, що отримання результатів вашого процесу збирання та відображення помилок є вартими інвестицій. Як додатковий бонус, можливо, вам стане зручніше зі списком швидких виправлень і ви можете використовувати цей список для інших програм, таких як :grep.

Докладнішу інформацію див.

:h :make
:h quickfix
:h 'makeprg'
:h 'errorformat'
:h :compiler
:h :copen
:h :cwindow
:h :cnext
:h :cc

Я думав про те, :makeпоки відповідав на це, але не включав. Краще використовувати ідею складання речей.
EvergreenTree

як змінити autocmd для запуску makeprg лише для певного файлу.
Ібн Саїд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.