9

Я установил Syntastic в Vim, и он отлично находит ошибки (в основном в коде Python, над которым я работаю). Если я обычно прыгаю в файле, я вижу ошибки в строке состояния, когда курсор находится над соответствующей строкой.

Что я не могу понять, так это как перемещаться между ошибками.

Я понимаю, что syntastic загружает ошибки в список местоположений Vim, и я могу отобразить их с помощью :lopen , переключиться на это окно, выбрать строку, нажать Enter и перейти в главное окно в правой строке.

Однако я хотел бы не открывать список, просто отредактировать файл с ошибками и нажать сочетание клавиш, чтобы перейти к следующему предупреждению / ошибке.

Это возможно? Документы предполагают, что :lNext и :lprevious релевантны, но они дают мне E553: No more items .

5 ответов5

11

:lne[xt] и :lp[revious] являются правильными сочетаниями клавиш.

Но :lN[ext] - это не то же самое, что :lne[xt]: это альтернатива :lp[revious] .

Полученное сообщение связано с тем, что эти команды не переносятся при достижении последней или первой ошибки.

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

Читайте :h location-list для полного списка команд.

5

Если в списке только одна проблема :ll перейдет к ней.

Вот исправление для вашего .vimrc, из-за которого ключи, сопоставленные с :lnext и :lprev работают корректно в случае только одной проблемы (при переходе к ней). Измените nmappings в конце на предпочитаемую последовательность клавиш.

https://github.com/scrooloose/syntastic/issues/32 )

" Fix syntastic error jumping
function! <SID>LocationPrevious()
  try
    lprev
  catch /^Vim\%((\a\+)\)\=:E553/
    llast
  endtry
endfunction

function! <SID>LocationNext()
  try
    lnext
  catch /^Vim\%((\a\+)\)\=:E553/
    lfirst
  endtry
endfunction

nnoremap <silent> <Plug>LocationPrevious    :<C-u>exe 'call <SID>LocationPrevious()'<CR>
nnoremap <silent> <Plug>LocationNext        :<C-u>exe 'call <SID>LocationNext()'<CR>
nmap <silent> e[  <Plug>LocationPrevious
nmap <silent> e]  <Plug>LocationNext
4

Так как :lnext и т.д. Набирать утомительно (обычно вы хотите быстро выполнить итерации по ним, плагин unimpaired.vim - Pairs для удобных отображений скобок обеспечивает (среди прочих) короткие ]l отображения.

1

Написано 30 октября 2017

Я бы порекомендовал установить плагин vim-unimpaired

Это также отличная ссылка на списки vim в целом.

Syntastic использует список locations . Команды ниже (отображения, отмеченные звездочкой, взяты из плагина unimpaired.vim упомянутого выше).

0

Разрешить переход от первого до последнего местоположения ошибки (и наоборот):

" Allow :lprev to work with empty location list, or at first location
function! <SID>LocationPrevious()
  try
    lprev
  catch /:E553:/
    lfirst
  catch /:E\%(42\|776\):/
    echo "Location list empty"
  catch /.*/
    echo v:exception
  endtry
endfunction

" Allow :lnext to work with empty location list, or at last location
function! <SID>LocationNext()
  try
    lnext
  catch /:E553:/
    lfirst
  catch /:E\%(42\|776\):/
    echo "Location list empty"
  catch /.*/
    echo v:exception
  endtry
endfunction

Это ловит следующие ошибки:

E42: No Errors
E776: No location list

И покорно говорит: Location list empty

(Кредит lcd074)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .