Comment utilisez-vous la fonction de correction rapide de vim?

125

Je suis un nouvel utilisateur de Vim et j'ai trouvé que sa courbe d'apprentissage est assez raide (du moins pour moi). Je viens d'installer ce script vim pour la vérification des erreurs JavaScriptLint, qui montre les erreurs dans la fenêtre de correction rapide de vim une fois que j'ai enregistré un tampon.

Cependant, je ne sais pas quoi faire ensuite. Comment faire défiler toutes les erreurs? Comment fermer la «fenêtre» du correctif rapide? Comment puis-je le faire vérifier les erreurs après avoir modifié mon code?

J'ai regardé la documentation de vim quickfix mais la quantité de commandes est écrasante et je n'arrive pas à trouver ce que je veux. Toute aide serait appréciée.

Une question secondaire: est-il possible que javascriptlint vérifie les erreurs js pour le code résidant dans un fichier .html?

Merci!

hora
la source

Réponses:

148

Il y a beaucoup de commandes pour quickfix comme vous l'avez dit, mais j'ai tendance à trouver que je n'en utilise qu'un petit sous-ensemble:

: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)

J'ai tendance à utiliser cela avec :makeet :vimgrep, donc je ne peux pas faire de commentaire sur le vérificateur de charpie Javascript, mais cela devrait vous donner quelque chose pour commencer.

Concernant l'utilisation générale de JavascriptLint, je ne suis pas un programmeur javascript, mais il semble que le script expose une fonction appelée "JavascriptLint", donc si vous voulez l'appeler manuellement, vous pouvez l'utiliser :call JavascriptLint(). Cependant, cela fonctionne sur la copie disque du fichier, il devra donc d'abord être enregistré. Si (et seulement si) la ligne de commande jslfonctionne sur des fichiers html, vous devriez pouvoir l'utiliser :call JavascriptLint()sur un fichier html pour vérifier le javascript interne. Vous pouvez également faire:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

pour l'automatiser. Si jslne prend pas en charge les fichiers html, alors (à moins de patcher l'application ou de demander à l'auteur de la modifier), c'est probablement une cause perdue ...

DrAl
la source
Merci, ces commandes sont un bon début, je vais juste devoir jouer un peu et m'habituer à son fonctionnement. Si j'utilise: cn pour accéder à une erreur dans la fenêtre qf, puis-je accéder à la fenêtre avec mon code sans quitter la fenêtre qf? Peut-il sauter à la ligne qui contient une erreur? Et votre suggestion d'utiliser: call fonctionne, mais elle suit les liens <script src>, ce qui n'est pas ce que je veux.
hora
@hora: :cnne devrait pas fermer la fenêtre qf, mais elle basculera vers la fenêtre contenant l'erreur: est-ce ce que vous entendez par "sauter"? Vous pouvez rapidement revenir en arrière avec Ctrl-W pou :wincmd p, donc vous pouvez faire :command! CN :cn | wincmd p<CR>ou quelque chose comme ça (non testé). Cela devrait vous donner une :CNcommande qui va à l'erreur suivante sans quitter la fenêtre de correction rapide. Sinon, vous pouvez faire quelque chose comme :au BufWinEnter quickfix nmap <buffer> <Enter> :.cc | wincmd p<CR>(encore une fois non testé) et utiliser Entrée pour sélectionner une erreur sans quitter la fenêtre de correction rapide.
DrAl
1
Pour un débutant, "Vous pouvez aussi faire:" un code ici "pour l'automatiser" ne veut pas dire grand-chose. Cela signifie que la ligne de code affichée doit être placée dans ~ / .vimrc (_VIMRC sur Windows AFAIK) et à partir du prochain démarrage de VIM chaque fois que le fichier est enregistré, cette commande sera appelée. Droite?
Беров
63

Le moyen le plus simple de naviguer dans la liste des correctifs rapides (ou la liste des emplacements, d'ailleurs) est le unimpairedplugin .

Une fois la fenêtre de quickfix est peuplée, [qet ]qaller de l' avant et à l' arrière (respectivement) dans la liste des quickfix. [Qet ]Qallez au début et à la fin (ce qui est particulièrement pratique si vous n'avez qu'un seul élément dans la liste; cela fait que vim se plaint de [qet ]q). Le flux de travail est donc:

  1. Exécutez la commande qui remplit la liste des correctifs rapides
  2. Tapez [Qpour accéder au premier élément
  3. Faites défiler les éléments suivants (le cas échéant) avec [qet]q

Si vous utilisez Syntastic, vous obtiendrez la liste des emplacements au lieu de la liste des correctifs rapides. Aucun problème; tout usage [L, ]L, [let ]lde la même manière.

unimpaireda des tas d'autres mappages pratiques aussi - [eet ]edes lignes "bulle" de haut en bas, [<Space>et ]<Space>insérer des lignes vierges au-dessus et en dessous, etc. J'ai été surpris que personne ne l'ait mentionné ici auparavant; c'est probablement parce qu'il n'existait qu'en janvier 2010, bien que la question ait été posée en 2009.

Chip Hogg
la source
27

Mettez les deux lignes suivantes dans votre fichier .vimrc:

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

Vous pouvez maintenant parcourir les erreurs à l'aide de ctrl-j et ctrl-k, qui imite les commandes de mouvement standard vers le bas et vers le haut j et k.

Amit Moscovich
la source
1
<c-j>parfois (dépend du terminal?!) est erroné ou ne fonctionne pas du tout, car cela signifie la même chose que <NL> // le plus simple, à utiliser <c-n>et à la <c-p>place // sinon: stackoverflow.com/questions/8304421/…
eli
J'ai décidé d'utiliser F8 et F9, comme ceci: noremap <F7> :cprevious<CR>et noremap <F8> :cnext<CR>dans.vimrc
Flimm
J'utilise déjà <C-j>et <C-k>pour naviguer entre les divisions vim et les volets tmux avec le navigateur vim tmux . Les combinaisons <C-M-j>et <C-M-k>pourraient être une alternative.
Paul Rougieux
24

Vous pouvez également utiliser :cc 2(ou tout autre nombre) pour accéder, dans ce cas, à la deuxième erreur dans la fenêtre de correction rapide. Navigation avec :cn, :cc 4, etc mettra le curseur sur la ligne en question.

Andy Stewart
la source
8

La meilleure façon d'intégrer la vérification de la syntaxe JavaScript consiste à utiliser le plugin Syntastic Vim , qui utilise la fenêtre de liste d' emplacement de Vim (qui est parallèle à la correction rapide ).

J'ai écrit des réponses à cette question et à cette question expliquant comment le faire, ainsi que comment obtenir la navigation du code source / la liste de balises pour Vim en utilisant le jshint.com géré par la communauté (ce qui est bien meilleur que JSLint IMO) et DoctorJS de Mozilla (anciennement jsctags ).

Bande d'Ory
la source
8

Peut - être que cette option n'existait pas lorsque cette question a été écrit (ou je suis peut - être moi - même embarrassant parce qu'il ya quelque chose dans mon .vimrcqui fait cela arrive) , mais quand je reçois Quickfix List, je navigue juste avec jet kpuis appuyez sur <CR>(la touche Entrée) pour accéder à cet endroit du fichier.

Ensuite, pour revenir au Quickfix Listje tape Ctrl+ W jpour "descendre une fenêtre" et je suis de retour.

Enfin, lorsque j'ai terminé, je tape simplement :q, comme je le ferais pour fermer n'importe quelle fenêtre normale.

LondresRob
la source
C'est ce que j'aimerais faire, mais j'obtiens "Impossible de faire des modifications," modifiable "est désactivé".
rtf
1
Vous avez probablement écrasé votre touche Entrée. J'avais par exemple nmap <CR> o<Esc>, donc je pourrais ajouter de nouvelles lignes en mode normal.
Taavi Ilves
6

la fenêtre de correction rapide fonctionne principalement comme n'importe quelle autre fenêtre vim: j en bas d'une ligne, k en haut d'une ligne,: cn pour passer à l'erreur / avertissement suivant, etc.

expérience!

juste quelqu'un
la source
1
+1 pour l'expérimentation, c'est à peu près comme ça que j'ai tout appris.
hora
4

En plus de l'excellente réponse @DrAl sur la façon d'ouvrir et de fermer la fenêtre rapide et de naviguer entre les entrées, j'ai créé une image pour montrer certaines des autres commandes de navigation de correction rapide.

Chaque groupe de 3 fichiers ci-dessous représente un ensemble de résultats de correction rapide, par exemple à partir d'un vimgrep. cnewer et plus froid sont pour passer par des ensembles de résultats historiques. entrez la description de l'image ici

run_the_race
la source