2012-05-24 12 views
8

Ich habe in Vim eine Funktion erstellt, die mir ein paar Sachen kompiliert. Es sieht so aus:Vim Dateipfade im Quickfix-Fenster

function! MyFunc(mode) 
    lcd ./build 
    pwd 
    let &makeprg='the_command some_script_file' 
    let &errorformat='some format'.',' 
    let &errorformat.='%-G%.%#' 
    silent make 
    lcd .. 
    cwindow 
endfunction 

ich in der Regel offen vim in einem Projektverzeichnis, dann kann ich diese Funktion ausführen, die CDs in bauen, es baut und Rücken cd so dass ich in meinem Projektverzeichnis bleiben.

Manchmal jedoch, wenn der Build fehlschlägt und das Quickfix-Fenster öffnet, zeigt es Dateinamen relativ zu meinem Projekt Verzeichnis (yay), aber manchmal in der gleichen Datei zeigt es den absoluten Pfad. Die Ausgabe des Erstellungsskripts zeigt immer relative Pfade an und vim behandelt beide korrekt, d. H. Es findet die korrekte Datei.

Ich vermute, dass die Pfadbehandlung verantwortlich ist. Meine Frage ist, was ist das Problem, und gibt es eine bessere Möglichkeit, in das Build-Verzeichnis und zurück zu wechseln? Ich möchte immer relative Pfade angezeigt.

Danke !!

Antwort

3

Ich denke, das hat mit der lcd zu tun. Wenn das Quickfix-Fenster von Ihrer Funktion aus geöffnet wird, übernimmt es das lokale Verzeichnis aus dem aktuellen Fenster. Aber wenn das Quickfix-Fenster von irgendwo anders (oder vor dem Ausführen der Funktion) geöffnet wurde, behält es das globale Arbeitsverzeichnis bei. Wenn eine Abweichung vorliegt, muss Vim absolute Pfade anzeigen.

Wenn Sie wirklich :lcd verwenden müssen, wäre es besser, eine Standortliste (:lmake) zu verwenden, da dies auch lokal für das Fenster sein wird. Aber ich würde zuerst versuchen, ein globales :cd zu verwenden, da der Schalter sowieso nur temporär ist, und du dich nicht darum interessierst, den tatsächlichen ursprünglichen Wert so weit zurückzubringen.

+0

Das stimmt. Ich gebe das eine Chance später und melde mich zurück. – Christoph

0

Wie Ingo darauf hingewiesen hat, sind die Pfade relativ zum aktuellen Verzeichnis des Quickfix-Fensters, das vom vorherigen Fenster übernommen wird.

Sie können autocmd QuickFixCmdPre verwenden, um den korrekten Pfad vor dem Ausführen der Marke festzulegen.

Wenn Sie Project Root plugin fügen Sie folgendes zu Ihrem .vimrc:

augroup changeQfCmdDir 
    au! 
    autocmd QuickFixCmdPre make ProjectRootCD 
augroup END 

, dann ist der Weg der quickfix Fenster korrigiert werden, bevor es von einem :make gefüllt ist (Sie können auch eine Reihe weiterer Befehle angeben, die verwendet quickfix windows: grep,lgrep,cscope).