Vim Syntastic의 오류 위치 탐색


11

Vim에 Syntastic이 설치되어 있으며 오류를 완벽하게 발견하고 있습니다 (주로 작업중 인 Python 코드에서). 파일에서 정상적으로 돌아 다니면 커서가 관련 줄 위에있을 때 상태 표시 줄에 오류가 표시됩니다.

내가 알 수없는 것은 오류 사이를 직접 탐색하는 방법입니다.

syntastic이 오류를 Vim 위치 목록에로드하고 있음을 이해하고로 표시하고 :lopen해당 창으로 전환 한 다음 줄을 선택 Enter하고 오른쪽 줄의 기본 창으로 가져갈 수 있습니다.

내가하고 싶은 것은 목록을 열어 두지 않고 단순히 오류가있는 파일에서 편집하고 키보드 단축키를 눌러 다음 경고 / 오류가있는 곳으로 건너 뛰는 것입니다.

가능합니까? 워드 프로세서는 제안 :lNext:lprevious관련,하지만 그들은 저를 얻을 E553: No more items.

답변:


12

:lne[xt]그리고 :lp[revious]올바른 바로 가기입니다.

그러나 :lN[ext]다음과 동일하지 않습니다 :lne[xt]:의 대안 :lp[revious]입니다.

당신이 얻는 메시지는 마지막 또는 첫 번째 오류에 도달했을 때 이러한 명령이 둘러싸이지 않기 때문입니다.

명령은 당신은 당신의 질문에 이전 오류에 모두 점프를 나열하지만, 기회는 당신이 첫 번째 오류에 이미와 아무것도 있습니다 전에 . 올바른 명령을 사용하고 둘러 싸지 않으면 잘 될 것입니다.

:h location-list전체 명령 목록을 읽으십시오 .


포장하는 방법이 있습니까?
BallpointBen

아니요, 포장을 할 수있는 방법이 없습니다. 이 스레드에는 다양한 래퍼 기반 솔루션이 있으며 플러그인 형태도 있습니다. 내 자신의 플러그인 VIM-QF는사람들을 . 몇 가지 매핑을위한 본격적인 플러그인을 원하지 않는 경우 구현이 여기에 있습니다.
romainl

6

목록에 문제가 하나만 있으면 해당 문제로 :ll이동합니다.

여기에 키를 만들 것입니다 귀하의 .vimrc에 대한 수정이 매핑의 :lnext:lprev(그것에 점프에서) 하나의 문제의 경우 제대로 작동합니다. 마지막에있는 nmapping을 원하는 키 순서로 변경하십시오.

( 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

위치 목록이 처음으로 채워지기 전에 또는 채우기없이 오류없이 실행 된 경우에는 추악합니다. 수정에 대한 내 답변 을 참조하십시오 .
Tom Hale


1

2017 년 10 월 30 일 작성

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에 신용 )


실제로는 덜 반복적 인 해결책이 있지만 echo "Location list empty"와 관련이 있습니다.
Tom Hale

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.