Error de navegación de ubicación en Vim Syntastic

11

Tengo Syntastic instalado en Vim y está encontrando errores perfectamente (principalmente en el código Python en el que estoy trabajando). Si salto normalmente en el archivo, veo los errores en la barra de estado cuando el cursor está sobre una línea relevante.

Lo que no puedo entender es cómo navegar directamente entre los errores.

Entiendo que fantástico es cargar los errores en una lista de ubicaciones de Vim y puedo hacer que aparezca con eso :lopen, cambiar a esa ventana, elegir una línea y presionar Entery ser llevado a la ventana principal en la línea derecha.

Sin embargo, lo que me gustaría hacer es no tener la lista abierta, simplemente estar editando en el archivo con errores y presionar un atajo de teclado para saltar a donde esté la próxima advertencia / error.

¿Es eso posible? Los documentos sugieren eso :lNexty :lpreviousson relevantes, pero me entienden E553: No more items.

Chris Jones
fuente

Respuestas:

12

:lne[xt]y :lp[revious]son los atajos correctos.

Pero :lN[ext]no es lo mismo que :lne[xt]: es una alternativa a :lp[revious].

El mensaje que recibe se debe al hecho de que estos comandos no se ajustan cuando llega al último o al primer error.

Los comandos que enumeró en su pregunta saltan al error anterior, pero es probable que ya esté en el primer error y no haya nada antes . usa los comandos correctos, ten en cuenta que no se ajustan y serás bueno.

Lea :h location-listpara obtener una lista completa de comandos.

romainl
fuente
¿Hay alguna manera de hacer que se envuelvan?
BallpointBen
No, no hay forma de hacer que se envuelvan. Sin embargo, hay varias soluciones basadas en envoltorios en este hilo y más en forma de complementos. Mi propio complemento vim-qf tiene esos . La implementación está aquí si no desea un complemento completo solo para un par de asignaciones.
romainl
6

Si solo hay un problema en la lista, :llnavegará a él.

Aquí hay una solución para su .vimrc que hará que las teclas se asignen :lnexty :lprevfuncionen correctamente en el caso de un solo problema (saltando a él). Cambie los nmappings al final a su secuencia de teclas preferida.

(de 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
Greg Bell
fuente
Esto es feo si se ejecuta antes de que la lista de ubicaciones se complete por primera vez, o después de la población sin errores. Vea mi respuesta para una solución.
Tom Hale
4

Dado que :lnextetc. son tediosos de escribir (por lo general, desea iterar rápidamente sobre ellos, el unimpaired.vim: pares de útiles complementos de mapeo de parches proporciona (entre otros) ]lmapeos cortos .

Ingo Karkat
fuente
1

Escrito el 30 de octubre de 2017

Yo recomendaría instalar el complemento vim-intacto

Esta es también una gran referencia en las listas vim de manera más general.

Syntastic usa la locationslista. Comandos a continuación (las asignaciones marcadas con asterisco provienen del unimpaired.vimcomplemento mencionado anteriormente).

ingrese la descripción de la imagen aquí

arcseldon
fuente
0

Permita el ajuste desde la primera hasta la última ubicación del error (y viceversa):

" 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

Esto detecta los siguientes errores:

E42: No Errors
E776: No location list

Y mansamente dice: Location list empty

(Crédito a lcd074 )

Tom Hale
fuente
En realidad, hay una solución menos repetitiva, pero podría hacerlo con el `echo" Lista de ubicaciones vacía "`.
Tom Hale