Wie verwenden Sie die Quickfix-Funktion von vim?

125

Ich bin ein ziemlich neuer Vim-Benutzer und habe festgestellt, dass die Lernkurve (zumindest für mich) ziemlich steil ist. Ich habe gerade dieses vim-Skript für die JavaScriptLint-Fehlerprüfung installiert , das Fehler im Quickfix-Fenster von vim anzeigt, sobald ich einen Puffer speichere.

Ich weiß jedoch nicht, was ich als nächstes tun soll. Wie scrolle ich durch alle Fehler? Wie schließe ich das Quickfix-Fenster? Wie kann ich es auf Fehler überprüfen lassen, nachdem ich Änderungen an meinem Code vorgenommen habe?

Ich habe mir die vim-Quickfix-Dokumente angesehen, aber die Anzahl der Befehle ist überwältigend und ich kann anscheinend nicht finden, was ich will. Jede Hilfe wäre dankbar.

Eine Nebenfrage: Gibt es eine Möglichkeit, Javascriptlint auf js-Fehler für Code in einer HTML-Datei prüfen zu lassen?

Vielen Dank!

hora
quelle

Antworten:

148

Wie Sie gesagt haben, gibt es viele Befehle für Quickfix, aber ich finde, dass ich nur eine kleine Teilmenge davon verwende:

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

Ich neige dazu, dies mit :makeund zu verwenden :vimgrep, daher kann ich den Javascript-Flusenprüfer nicht kommentieren, aber dies sollte Ihnen etwas geben, um loszulegen.

In Bezug auf die allgemeine Verwendung von JavascriptLint bin ich kein Javascript-Programmierer, aber es sieht so aus, als ob das Skript eine Funktion namens "JavascriptLint" verfügbar macht. Wenn Sie es also manuell aufrufen möchten, können Sie es verwenden :call JavascriptLint(). Es funktioniert jedoch auf der Festplattenkopie der Datei, sodass es zuerst gespeichert werden muss. Wenn (und nur wenn) die Befehlszeile jslfür HTML-Dateien funktioniert, sollten Sie in der Lage sein, :call JavascriptLint()für eine HTML-Datei das interne Javascript zu überprüfen. Sie könnten auch tun:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

um es zu automatisieren. Wenn jslHTML-Dateien nicht unterstützt werden (ohne die Anwendung zu patchen oder den Autor zu bitten, sie zu ändern), ist dies wahrscheinlich eine verlorene Ursache ...

DrAl
quelle
Danke, diese Befehle sind ein guter Anfang, ich muss nur ein bisschen herumspielen und mich daran gewöhnen, wie es funktioniert. Wenn ich: cn verwende, um zu einem Fehler im qf-Fenster zu gelangen, kann ich dann mit meinem Code zum Fenster springen, ohne das qf-Fenster zu verlassen? Kann es zu der fehlerhaften Zeile springen? Und Ihr Vorschlag,: call zu verwenden, funktioniert, es folgen jedoch <script src> -Links, die ich nicht möchte.
Hora
@hora: :cnsollte das qf-Fenster nicht schließen, aber es wechselt zu dem Fenster, das den Fehler enthält: meinst du das mit "springen"? Sie können schnell mit Ctrl-W poder zurückschalten :wincmd p, damit Sie :command! CN :cn | wincmd p<CR>oder so etwas tun können (ungetestet). Dies sollte Ihnen einen :CNBefehl geben, der zum nächsten Fehler führt, ohne das Quickfix-Fenster zu verlassen. Alternativ können Sie etwas tun :au BufWinEnter quickfix nmap <buffer> <Enter> :.cc | wincmd p<CR>(erneut nicht getestet) und mit Enter einen Fehler auswählen, ohne das Quickfix-Fenster zu verlassen.
DrAl
1
Für einen Anfänger bedeutet "Sie könnten auch: 'somecodehere', um es zu automatisieren" nicht viel. Dies bedeutet, dass die angezeigte Codezeile in ~ / .vimrc (_VIMRC unter Windows AFAIK) platziert werden muss und ab dem nächsten Start von VIM jedes Mal, wenn die Datei gespeichert wird, dieser Befehl aufgerufen wird. Richtig?
28еров
63

Der einfachste Weg, um in der Quickfix-Liste (oder der Standortliste) zu navigieren, ist das unimpairedPlugin .

Sobald das quickfix Fenster bevölkert, [qund ]qgeht nach vorne und hinten (jeweils) in der Quickfix - Liste. [Qund ]Qgehe zum Anfang und Ende (was besonders praktisch ist, wenn du nur einen Punkt in der Liste hast; dies bringt vim dazu, sich über [qund zu beschweren ]q). Der Workflow lautet also:

  1. Führen Sie einen beliebigen Befehl aus, der die Quickfix-Liste auffüllt
  2. Geben Sie ein [Q, um zum ersten Element zu gelangen
  3. Scrollen Sie mit [qund durch nachfolgende Elemente (falls vorhanden)]q

Wenn Sie Syntastic verwenden, erhalten Sie die Standortliste anstelle der Quickfix-Liste. Kein Problem; nur Gebrauch [L, ]L, [l, und ]lin der gleichen Weise.

unimpairedhat auch viele andere praktische Zuordnungen - [eund ]e"Blasen" -Linien nach oben und unten [<Space>und ]<Space>leere Zeilen oben und unten usw. Ich war überrascht, dass es hier noch niemand erwähnt hat; Das liegt wahrscheinlich daran, dass es erst im Januar 2010 existierte, obwohl die Frage 2009 gestellt wurde.

Chip Hogg
quelle
27

Fügen Sie die folgenden zwei Zeilen in Ihre .vimrc-Datei ein:

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

Jetzt können Sie mit Strg-j und Strg-k durch die Fehler navigieren, wodurch die Standard-Abwärts- und Aufwärtsbewegungsbefehle j und k nachgeahmt werden.

Amit Moscovich
quelle
1
<c-j>Manchmal (hängt vom Terminal ab?!) ist fehlerhaft oder funktioniert überhaupt nicht, weil es dasselbe bedeutet wie <NL> // das am einfachsten zu verwendende <c-n>und <c-p>stattdessen // ansonsten: stackoverflow.com/questions/8304421/…
Eli
Ich habe mich für F8 und F9 entschieden: noremap <F7> :cprevious<CR>und noremap <F8> :cnext<CR>in.vimrc
Flimm
Ich benutze <C-j>und <C-k>navigiere bereits mit vim tmux navigator zwischen vim splits und tmux panes . Die Kombinationen <C-M-j>und <C-M-k>könnten eine Alternative sein.
Paul Rougieux
24

Sie können auch :cc 2(oder eine andere Zahl) verwenden, um in diesem Fall zum zweiten Fehler im Quickfix-Fenster zu springen. Navigieren mit :cn, :cc 4usw. wird der Cursor auf der Linie in Frage gestellt.

Andy Stewart
quelle
8

Die bewährte Methode zur Integration der JavaScript-Syntaxprüfung ist die Verwendung des Syntastic Vim-Plugins , das das Fenster mit der Standortliste von Vim (parallel zum Quickfix ) verwendet.

Ich habe Antworten auf diese Frage und diese Frage geschrieben, in denen erklärt wird, wie es geht und wie man Quellcode-Browsing / Tag-Liste für Vim mithilfe der Community-gesteuerten Datei jshint.com (die weitaus besser ist als JSLint IMO) und Mozillas DoctorJS (früher jsctags ).

Ory Band
quelle
8

Vielleicht gab es diese Option nicht, als diese Frage geschrieben wurde (oder ich schäme mich, weil etwas in mir ist .vimrc, das dies ermöglicht), aber wenn ich eine bekomme Quickfix List, navigiere ich einfach mit jund drücke kdann <CR>(dh die Eingabetaste) um zu dieser Stelle in der Datei zu springen.

Um dann zu Quickfix ListI zurückzukehren, tippe ich Ctrl+ W jfür "Fenster runter" und ich bin zurück.

Wenn ich fertig bin, tippe ich einfach so :q, als würde ich ein normales Fenster schließen.

LondonRob
quelle
Das würde ich gerne tun, aber ich bekomme "Kann keine Änderungen vornehmen, 'änderbar' ist aus".
RTF
1
Sie haben wahrscheinlich Ihre Eingabetaste überschrieben. Ich hatte zum Beispiel nmap <CR> o<Esc>, damit ich im normalen Modus neue Zeilen hinzufügen konnte.
Taavi Ilves
6

Das Quickfix-Fenster wird meistens wie jedes andere VIM-Fenster betrieben: j eine Zeile nach unten, k eine Zeile nach oben ,: cn, um zum nächsten Fehler / zur nächsten Warnung zu springen usw.

Experiment!

nur jemand
quelle
1
+1 zum Experimentieren, so habe ich so ziemlich alles gelernt.
Hora
4

Zusätzlich zu der großartigen Antwort von @DrAl zum Öffnen und Schließen des Schnellfensters und zum Navigieren zwischen Einträgen habe ich ein Bild erstellt, um einige der anderen Schnellkorrektur-Navigationsbefehle anzuzeigen.

Jede Gruppe von 3 Dateien unten repräsentiert eine Reihe von Quickfix-Ergebnissen, z. B. von einem Vimgrep. cnewer und kälter dienen zum Durchlaufen historischer Ergebnismengen. Geben Sie hier die Bildbeschreibung ein

run_the_race
quelle