2013-02-08 4 views
6

Vim에 Syntastic plugin을 사용하기 시작했습니다. 현재 버퍼에서 구문 검사기를 실행 한 다음 오류가있는 줄을 표시합니다. :Errors을 사용하여 위치 목록으로 오류 목록을 연 다음 을 입력하여 주어진 오류 행으로 건너 뛸 수 있습니다.을 입력하면 내 버퍼의 오류가있는 줄로 점프합니다.Vim의 현재 줄에 대한 퀵 픽스 또는 위치 목록의 오류로 건너 뛰십시오 (Syntastic 사용)

나는 그 반대를 어떻게 할 수 있는지 알고 싶습니다. 목록에서 전체 오류 메시지를 읽을 수 있도록 위치 목록의 해당 항목에 구문 오류가있는 것으로 표시된 버퍼에서 줄을 이동하려고합니다. 어떻게해야합니까? 나는 :ll [n]이 목록의 n 번째 오류로 점프 할 것이라고 알고 있지만 종종 어떤 오류 번호가 버퍼의 주어진 행에 해당하는지 정확히 알지 못합니다. 그러나 오류 번호가 아닌 줄 번호를 허용하는 명령을 찾을 수 없습니다.

답변

3

적어도 Vim 명령이나 Syntastic에서는 불가능하다고 생각합니다.

그러나 Syntastic은 명령 줄에서 현재 줄과 관련된 오류 메시지를 실제로 에코합니다. This feature is enabled by default.

+0

Syntastic은 첫 번째 오류 메시지를 명령 줄에 표시하지만 종종 메시지가 잘립니다. 따라서 위치 목록의 오류로 직접 이동하고 싶습니다. Syntastic이 버퍼의 현재 라인을 기반으로 오류 메시지를 검색 할 수 있다는 사실은 버퍼에서 위치 목록의 해당 오류 라인으로 이동할 수 있다는 희망을 제공합니다. – gotgenes

+0

불행히도 그것에 대한 명령이 없습니다. Syntastic의 이슈 트래커에 기능 요청을 게시해야합니다. – romainl

+0

2 줄을 사용하도록 명령 줄을 설정하면 잘리는 데 도움이되는 메시지에 대해 두 줄을 모두 사용합니다. "set cmdheight = 2" –

6

당신이 옳다면 현재의 커서 위치와 그 이후의 오류를 찾을 수있는 방법은 없습니다. 나는 그것에 대해 QuickFixCurrentNumber plugin을 썼다.

g<C-q> 매핑을 사용하면 퀵 픽스/위치 목록의 항목으로 이동하여 현재 커서 위치 (또는 커서 뒤의 다음 항목)를 찾을 수 있습니다. 또한 현재 버퍼의 오류 탐색을 제한하면서 [q/]q 매핑을 제공하여 이전/다음 오류로 건너 뜁니다.

1

방금 ​​만든이 : Man 뷰어에 대해 작성했습니다. 다음을 탐색 할 때 '위치 목록'창의 현재 항목을 추적합니다.

function! s:visibleLoc() 
    return len(filter(getwininfo(), {i,v -> v.loclist})) 
endfunc 

function! s:followLine() 
    let curLine = line(".") 
    if (exists("b:lastLine") && b:lastLine == curLine) || 0 == s:visibleLoc() 
     return 
    endif 
    let b:lastLine = line(".") 
    let ent = len(filter(getloclist("."), {i,v -> v.lnum <= curLine})) 
    if ent < 1 || (exists("b:lastEntry") && b:lastEntry == ent) 
     return 
    endif 
    let b:lastEntry = ent 
    let pos = [ 0, curLine, col("."), 0 ] 
    exe "ll ".ent 
    call setpos(".", pos) 
endfunc 

au CursorMoved <buffer> call <SID>followLine()