Ошибка определения местоположения в Vim Syntastic

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

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

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

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

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

7 ответов

Решение

:lne[xt] а также :lp[revious] правильные ярлыки.

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

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

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

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

Если в списке только одна проблема, :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

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

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

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

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

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

Я думаю, что лучший способ использовать список местоположений - использовать плагин Denite + Unite-Location: https://github.com/chemzqm/unite-location

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

" 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)

положить в свой~/.vimrc:

nnoremap <leader>nn :w<cr>:ll<cr>

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

Другие вопросы по тегам