Скрипт Vim: как легко передать данные в окно - PullRequest
4 голосов
/ 16 августа 2011

Я использую пользовательскую функцию (в настоящее время находящуюся в .vimrc), а не: make или другой инструмент командной строки для компиляции / проверки моего редактируемого в настоящее время файла на наличие ошибок. Как это:

function! CompileMyCode(...)
    set errorformat=Error:\ %m\\,\ in\ line\ %l
    let l:output = "Error: bad code!, in line 9"
    return l:output
endfunction
command! -nargs=* CompileMyCode :call CompileMyCode(<f-args>)

при использовании новой команды в командном режиме окно ошибок не отображается.

:CompileMyCode | cwindow

Что я делаю не так?

Edit: Я теперь попробовал следующее, которое также не открывает никакое окно.

function! CompileMyCode(...)
    set errorformat=Error:\ %m\\,\ in\ line\ %l
    let l:output = "Error: bad code!, in line 9"
    " I tried both of the following lines separately
    cexpr l:output 
    call setqflist([l:output])
endfunction

Предлагаемые команды cexpr и setqflist() неправильно открывают окно в моем примере. Может быть, кто-нибудь может предложить полное решение?

Редактировать 2:

Основная проблема решена. Вот мой текущий код:

    let l:result = expand("%").'|8| errortext'
    cexpr [ l:result, l:result ]
    caddexpr ''
    cwindow

В этом примере соблюдается формат ошибок по умолчанию, который, похоже, поддерживает vim. Когда cexpr выводит фактическую ошибку и использует errorformat, cwindow, похоже, игнорирует это.

Тем не менее, я все равно хотел придерживаться формата ошибок по умолчанию в выводе, не полагаясь на пользовательский errorformat

Спасибо за ваши ответы!

Ответы [ 2 ]

3 голосов
/ 16 августа 2011

Я сделал нечто подобное, используя cexpr l:output вместо возврата строки, и это поместило вывод компиляции в окно быстрого исправления.Вы можете увидеть мою функцию vim здесь: http://www.zenskg.net/wordpress/?p=199

Обновление

Добавление пустой строки в список быстрых исправлений, кажется, позволяет появиться окну cwindow.Например:

function! MyCompile()
  let l:output = "Error: line 1"
  cexpr l:output
  caddexpr ""
  cwindow
endfunction
2 голосов
/ 16 августа 2011

Если у вас уже есть доступ к информации об ошибке в виде структурированных данных в Vim (или вы можете легко ее получить), вы можете использовать setqflist().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...