¿Cómo se usa la función de corrección rápida de vim?

125

Soy un usuario de Vim bastante nuevo y he descubierto que su curva de aprendizaje es bastante empinada (al menos para mí). Acabo de instalar este script vim para la comprobación de errores de JavaScriptLint, que muestra errores en la ventana de corrección rápida de vim una vez que guardo un búfer.

Sin embargo, no sé qué hacer a continuación. ¿Cómo puedo "desplazarme" por todos los errores? ¿Cómo cierro la 'ventana' de corrección rápida? ¿Cómo consigo que verifique si hay errores después de haber realizado cambios en mi código?

He visto los documentos de corrección rápida de vim, pero la cantidad de comandos es abrumadora y parece que no puedo encontrar lo que quiero. Cualquier ayuda sería apreciada.

Una pregunta paralela: ¿hay alguna forma de que javascriptlint verifique errores js para el código que reside en un archivo .html?

¡Gracias!

hora
fuente

Respuestas:

148

Hay muchos comandos para la corrección rápida como ha dicho, pero tiendo a encontrar que solo uso un pequeño subconjunto de ellos:

:copen " Open the quickfix window
:ccl   " Close it
:cw    " Open it if there are "errors", close it otherwise (some people prefer this)
:cn    " Go to the next error in the window
:cp    " Go to the previous error in the window
:cnf   " Go to the first error in the next file
:.cc   " Go to error under cursor (if cursor is in quickfix window)

Tiendo a usar esto con :makey :vimgrep, por lo que no puedo comentar sobre el verificador de pelusas de Javascript, pero esto debería darte algo para comenzar.

Con respecto al uso general de JavascriptLint, no soy un programador de JavaScript, pero parece que el script expone una función llamada "JavascriptLint", por lo que si desea llamarlo manualmente, puede usar :call JavascriptLint(). Sin embargo, funciona en la copia en disco del archivo, por lo que primero deberá guardarse. Si (y solo si) la línea de comando jslfunciona en archivos html, debería poder usarla :call JavascriptLint()en un archivo html para verificar el javascript interno. También puedes hacer:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

para automatizarlo. Si jslno es compatible con archivos html, entonces (salvo parchar la aplicación o pedirle al autor que la cambie), probablemente sea una causa perdida ...

DrAl
fuente
Gracias, esos comandos son un buen comienzo, solo tendré que jugar un poco y acostumbrarme a cómo funciona. Si uso: cn para ir a un error en la ventana qf, ¿puedo saltar a la ventana con mi código sin salir de la ventana qf? ¿Puede saltar a la línea que tiene un error? Y su sugerencia de usar: call funciona, sin embargo, sigue los enlaces <script src> que no es lo que quiero.
hora
@hora: :cnno debería cerrar la ventana qf, pero cambiará a la ventana que contiene el error: ¿es esto lo que quiere decir con "saltar"? Puede volver a cambiar rápidamente con Ctrl-W po :wincmd p, para que pueda hacer :command! CN :cn | wincmd p<CR>o algo así (no probado). Esto debería darle un :CNcomando que va al siguiente error sin salir de la ventana de corrección rápida. Alternativamente, puede hacer algo como :au BufWinEnter quickfix nmap <buffer> <Enter> :.cc | wincmd p<CR>(nuevamente sin probar) y usar Enter para seleccionar un error sin salir de la ventana de corrección rápida.
DrAl
1
Para un principiante "También puede hacer: 'somecodehere' para automatizarlo" no significa mucho. Significa que la línea de código mostrada debe colocarse en ~ / .vimrc (_VIMRC en Windows AFAIK) y desde el próximo inicio de VIM cada vez que se guarde el archivo se invocará este comando. ¿Correcto?
Беров
63

La forma más fácil de navegar por la lista de arreglos rápidos (o la lista de ubicaciones, para el caso) es el unimpairedcomplemento .

Una vez que se completa la ventana quickfix, [qy ]qvaya hacia adelante y hacia atrás (respectivamente) en la lista quickfix. [Qy ]Qvaya al principio y al final (lo cual es especialmente útil si solo tiene un elemento en la lista; esto hace que vim se queje [qy ]q). Entonces el flujo de trabajo es:

  1. Ejecute cualquier comando que complete la lista de arreglos rápidos
  2. Escriba [Qpara ir al primer elemento
  3. Desplácese por los elementos siguientes (si los hay) con [qy]q

Si está utilizando Syntastic, obtendrá la lista de ubicaciones en lugar de la lista de corrección rápida. No hay problema; uso justo [L, ]L, [l, y ]lde la misma manera.

unimpairedtambién tiene muchas otras asignaciones útiles - [ey ]elíneas de "burbuja" hacia arriba y hacia abajo, [<Space>e ]<Space>inserta líneas en blanco arriba y abajo, etc. Me sorprendió que nadie lo mencionara aquí antes; probablemente se deba a que no existió hasta enero de 2010, aunque la pregunta se hizo en 2009.

Chip Hogg
fuente
27

Pon las siguientes dos líneas en tu archivo .vimrc:

map <C-j> :cn<CR>
map <C-k> :cp<CR>

Ahora puede navegar a través de los errores usando ctrl-j y ctrl-k, que imita los comandos estándar de movimiento hacia abajo y hacia arriba j y k.

Amit Moscovich
fuente
1
<c-j>en algún momento (depende del terminal ?!) es errónea o no trabajar en conjunto, porque significa lo mismo que <NL> // el ist más fácil, a utilizar <c-n>y <c-p>en lugar de lo contrario //: stackoverflow.com/questions/8304421/...
eli
Decidí usar F8 y F9, así: noremap <F7> :cprevious<CR>y noremap <F8> :cnext<CR>en.vimrc
Flimm
Ya uso <C-j>y <C-k>para navegar entre divisiones de vim y paneles tmux con el navegador vim tmux . Las combinaciones <C-M-j>y <C-M-k>podrían ser una alternativa.
Paul Rougieux
24

También puede usar :cc 2(o cualquier otro número) para saltar, en este caso, al segundo error en la ventana de corrección rápida. Navegando con :cn, :cc 4, etc. pondrá el cursor en la línea en cuestión.

Andy Stewart
fuente
8

La mejor forma de integrar la verificación de sintaxis de JavaScript es usar el complemento Syntastic Vim , que usa la ventana de lista de ubicaciones de Vim (que es paralela a la corrección rápida ).

He escrito las respuestas para esta pregunta y esta pregunta explicando cómo hacerlo, además de cómo obtener una lista de etiquetas / exploración de código fuente para Vim usando jshint.com impulsado por la comunidad (que es mucho mejor que JSLint IMO) y DoctorJS de Mozilla (anteriormente jsctags ).

Banda Ory
fuente
8

Tal vez esta opción no existía cuando se escribió esta pregunta (o tal vez me estoy avergonzando porque hay algo en mi .vimrcque hace que esto suceda) pero cuando obtengo una Quickfix List, simplemente la navego con jy kluego presiono <CR>(es decir, la tecla Enter) para saltar a ese lugar en el archivo.

Luego, para volver a Quickfix List, escribo Ctrl+ W jpara "bajar una ventana" y estoy de vuelta.

Finalmente, cuando termino, simplemente escribo :q, como lo haría para cerrar cualquier ventana normal.

LondresRob
fuente
Eso es lo que me gustaría hacer, pero aparece "No se pueden realizar cambios, 'modificable' está desactivado".
rtf
1
Probablemente haya anulado su tecla Enter. Tenía, por ejemplo nmap <CR> o<Esc>, para poder agregar nuevas líneas en modo normal.
Taavi Ilves
6

la ventana de corrección rápida se opera principalmente como cualquier otra ventana de vim: j hacia abajo una línea, k hacia arriba una línea,: cn para saltar al siguiente error / advertencia, etc.

¡experimentar!

solo alguien
fuente
1
+1 para la experimentación, así es como aprendí todo.
hora
4

Además de la excelente respuesta de @DrAl sobre cómo abrir y cerrar la ventana rápida y navegar entre las entradas, hice una imagen para mostrar algunos de los otros comandos de navegación de solución rápida.

Cada grupo de 3 archivos a continuación representa un conjunto de resultados de corrección rápida, por ejemplo, de un vimgrep. más fríos y más fríos son para pasar por conjuntos de resultados históricos. ingrese la descripción de la imagen aquí

run_the_race
fuente