E34: Нет предыдущей команды
Таким образом, ответ на ваш вопрос скрывался в поле зрения под :help E34
, что перенаправляет на команду :!
.
(Vim pro-tip: всякий раз, когда вы получаете сообщение от Vim, попросите :help
в коде ошибки, чтобы получить больше информации об этом.)
Раздел :!
включает в себя этот отрывок:
Любой !
в {cmd}
заменяется предыдущей внешней командой . Но не тогда, когда перед '!' Стоит обратная косая черта sh, тогда эта обратная коса sh удаляется.
У вас действительно есть !
в вашей команде , как часть регулярного выражения grep
, ^!.*
, так что это вызывало поведение «истории», пытаясь заменить ранее выполненную команду. Но так как ни одна команда не была выполнена в тот момент, команда завершилась неудачно с ошибкой.
Вы можете решить ее, выбрав !
с обратным слэ sh, который Vim удалит перед передачей команды shell:
:! pdflatex -halt-on-error src.tex | grep '^<b>\!</b>.*' -A200 --color=always
Но учтите, что есть более эффективные способы решения этой проблемы! Позвольте мне рассказать о некоторых из них.
Использование systemlist ()
Одним из отличных способов запуска внешних команд в Vim является использование функции systemlist()
, которая запускает Команда на оболочке, захватывает ее выходные данные, разбивает его на строки и возвращает список с результирующими выходными строками.
Таким образом, вы можете начать с:
let latex_output = systemlist('pdflatex -halt-on-error src.tex')
И затем использовать команды Vimscript для проверьте строки, начинающиеся с !
, для отчета пользователю.
Обратите внимание, что в отличие от :!
, вывод systemlist()
никогда не отображается для пользователя (что означает, что вы не переключаетесь обратно чтобы увидеть терминал, возможно, пустой, и после выполнения у вас нет запроса «Hit enter». Это здорово!
Но это означает, что вам нужно представить эту информацию пользователю, когда Есть ошибки. Отличный способ сделать это - использовать окно быстрого исправления !
Вы можете использовать функцию setqflist()
для установки содержимого быстрого исправления окно.
(Для достижения наилучших результатов следует t 'errorformat'
соответственно, подробнее об этом позже.)
Использование vim-dispatch
Если вам не нравится часть выполнения внешней команды (через :!
или * 1068) *) у него есть блок Vim до завершения выполнения команды, затем рассмотрите возможность установки плагина vim-dispatch .
Он может выполнить команду за вас в фоновом режиме или в отдельном терминале, так что вы не заблокированы от редактирования. Он также интегрируется с командой :make
и окном быстрого исправления.
Конфигурация компилятора в vim-latex
Наконец, плагин vim-latex (также известный как как latex-suite) имеет конфигурации, которые помогут вам запустить pdflatex
и сообщить об ошибках.
Включает конфигурацию Vim :compiler
, которая будет запускать pdflatex для вас как :make
программа. Также установит 'errorformat'
для распознавания строки ! LaTeX Error
и распознавания номера строки ошибок, поэтому вы можете перейти к ним прямо из списка быстрых исправлений.
Обратите внимание, что vim -latex также имеет много других функций, которые помогут вам писать документы LaTeX в Vim (помимо управления генерацией вывода через поддержку компилятора.) Возможно, вы захотите проверить и эти другие функции.
(Поскольку плагин имеет довольно много функций, я рекомендую прочитать всю документацию, чтобы начать с него работать.)
Также обратите внимание, что этот плагин совместим с vim-dispatch (поскольку vim-latex предоставляет интерфейс компилятора и vim- отправка потребляет его), так что вы можете использовать оба вместе, если вам нравятся оба!