Подтвердить что ты не робот

vim перенаправить вывод в quickfix

Можно ли перенаправить вывод команды в окно быстрого исправления?

Команда, которую я запускаю, - это

:!java %:r

и надеялся, что выход перейдет в окно быстрого исправления

4b9b3361

Ответ 1

Обратите внимание, что окно quickfix предназначено для конкретного вывода (например, инструментов компилятора или синтаксиса), который включает в себя ссылки (то есть строки и номера столбцов) в текущий буфер. Там есть много инфраструктуры: 'makeprg', 'errorformat' и т.д., Обычно встраиваемые в плагин компилятора.

Несмотря на то, что вы можете перенаправить произвольный вывод в окно быстрого исправления, он дает небольшую выгоду (и имеет недостаток от 'makeprg') по чтению вывода внешней программы в новый буфер нуля, например:

:new|0read !java #:r

Ответ 2

Я бы предложил один из двух вариантов: настроить makeprg для запуска java, как вы хотите, или создать сопоставление или команду, чтобы заполнить список quickfix без изменения чего-либо еще.

Вариант 1: Использование makeprg и компилятора

Как правило, для этого я обычно устанавливал параметр makeprg, как говорили другие. Это не взлом, это именно то, для чего предназначен makeprg.

Единственная проблема заключается в том, что у вас есть другой скрипт сборки, который вы хотите запустить. Более общее решение - создать простой плагин компилятора. Например, где-то на вашем runtimepath вы можете создать файл под compiler/java.vim и установить его примерно так:

if exists("current_compiler")
  finish
endif
let current_compiler = "java"

CompilerSet makeprg=java

Теперь, когда вы работаете с java, вы можете :compiler java а затем ваш makeprg будет установлен по желанию в текущем окне. Если вы хотите использовать его для всех окон, используйте :compiler! java :compiler! java, с треском. Не все плагины компилятора устанавливают параметр makeprg, но вы всегда можете сбросить его с помощью :set makeprg&. Попробуйте :help write-compiler-plugin для получения дополнительной информации.

Вариант 2. Создайте команду для этого.

Кроме того, вы можете также использовать cexpr для заполнения списка quickfix. Например:

:cexpr system('java ' . shellescape(expand('%:r')))

expand необходимо расширить '%:r' в выражении, а shellescape избегает его, чтобы он мог быть использован в качестве аргумента команды оболочки. Затем строка 'java ' добавляется к экранированному пути, и результат вызывается в качестве команды оболочки system. Вывод этой команды используется для загрузки списка быстрого обновления.

Самое приятное в этом заключается в том, что он не изменяет makeprg или какие-либо другие параметры, но все же позволяет легко заполнять список quickfix. Конечно, вы, вероятно, захотите сопоставить это или определить для него пользовательскую команду.

Ответ 3

Попробуй это:

  1. set makeprg=java
  2. make %:r

Это немного взломать и, конечно же, предполагает, что вы еще не используете makeprg для своего реального скрипта сборки.

Ответ 4

Я сопоставил лидер + j + r, чтобы запустить мой Java-код и отобразить его в окне quickfix, выполнив

map <leader>jr :set makeprg=java <CR>:make %:r<CR>:copen<CR>