Erro na navegação de localização no Vim Syntastic

9

Eu tenho o Syntastic instalado no Vim e ele está encontrando erros perfeitamente (principalmente no código Python em que estou trabalhando). Se eu pular normalmente no arquivo, vejo os erros na barra de status quando o cursor está sobre uma linha relevante.

O que não consigo descobrir é como navegar diretamente entre os erros.

Eu entendo que syntastic está carregando os erros em uma lista de locais do Vim e posso fazer isso aparecer com :lopen , mudar para aquela janela, escolher uma linha e teclar Enter e ser levado ao janela principal na linha direita.

O que eu gostaria de fazer, porém, não é ter a lista aberta, simplesmente editando o arquivo com erros e apertando um atalho de teclado para pular para onde quer que o próximo aviso / erro ocorra.

Isso é possível? Os documentos sugerem que :lNext e :lprevious são relevantes, mas me obtêm E553: No more items .

    
por Chris Jones 15.03.2013 / 20:47

5 respostas

11

:lne[xt] e :lp[revious] são os atalhos corretos.

Mas :lN[ext] não é o mesmo que :lne[xt] : é uma alternativa para :lp[revious] .

A mensagem que você recebe se deve ao fato de que esses comandos não se encaixam quando você atinge o último ou o primeiro erro.

Os comandos listados em sua pergunta saltam para o erro anterior, mas provavelmente você já está no primeiro erro e não há nada antes . use os comandos corretos, lembre-se de que eles não se encaixam e você será bom.

Leia :h location-list para uma lista completa de comandos.

    
por 15.03.2013 / 21:08
5

Se houver apenas um problema na lista, :ll irá navegar para ele.

Aqui está uma correção para o seu .vimrc que fará com que as chaves mapeadas para :lnext e :lprev funcionem corretamente no caso de apenas um problema (saltando para ele). Altere os nmappings no final para sua sequência de teclas preferida.

(de link )

" 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
    
por 23.10.2015 / 06:40
4

Como :lnext etc. é tedioso para digitar (você geralmente deseja iterar rapidamente sobre eles, o unimpaired.vim - Pares de mapeamentos de braquetes úteis fornece (entre outros) curtas ]l mappings.

    
por 15.03.2013 / 21:36
1

Escrito em 30 de outubro de 2017

Eu recomendaria a instalação do plug-in não danificado pelo vim

Esta também é uma grande referência nas listas do vim de forma mais geral.

O Syntastic usa a lista locations . Comandos abaixo (mapeamentos marcados com asterix vêm do plugin unimpaired.vim mencionado acima).

    
por 29.10.2017 / 18:14
0

Permitir contorno do primeiro ao último local de erro (e vice-versa):

" 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

Isso detecta os seguintes erros:

E42: No Errors
E776: No location list

E humildemente diz: Location list empty

(Crédito para lcd074 )

    
por 25.09.2016 / 11:51

Tags