Ошибка определения местоположения в 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
приведет вас к первой записи в вашем списке ошибок и к следующей, если вы только что исправили первую.