2012-05-24 12 views
8

Ho creato una funzione in Vim che compila alcune cose per me. Sembra così:Percorsi di file Vim nella finestra di aggiornamento rapido

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 

ho vim solito apre in una directory del progetto, allora posso eseguire questa funzione, che cd in costruzione, costruisce, e la schiena di CD in modo rimango nella mia directory del progetto.

Tuttavia, a volte, quando la compilazione fallisce e apre la finestra del quickfix, mostrerà i nomi dei file relativi alla mia dir del progetto (yay), ma altre volte nello stesso file, mostra il percorso assoluto. L'output dello script di build mostra sempre i percorsi relativi, e vim gestisce entrambi correttamente, cioè trova il file corretto.

Sospetto che la gestione del percorso sia responsabile. La mia domanda è, qual è il problema, e c'è un modo migliore per gestire il passaggio alla directory di costruzione e viceversa? Voglio sempre mostrare percorsi relativi.

Grazie !!

risposta

3

Penso che questo abbia a che fare con lo lcd. Quando la finestra di quickfix viene aperta dalla tua funzione, erediterà la directory locale dalla finestra corrente. Ma quando la finestra del quickfix è stata aperta da qualsiasi altra parte (o prima di eseguire la tua funzione), manterrà la directory di lavoro globale. Quando c'è una discrepanza, Vim deve mostrare percorsi assoluti.

Se è davvero necessario utilizzare :lcd, sarebbe preferibile utilizzare un elenco di posizioni (:lmake), perché anche questo sarà locale alla finestra. Ma per prima cosa proverei ad usare un valore globale :cd, poiché lo switch è solo temporaneo, comunque, e non ti interessa ripristinare l'attuale valore originale finora.

+0

È vero. Darò uno scatto dopo e riferirò. – Christoph

0

Come sottolineato da Ingo, i percorsi sono relativi alla directory corrente della finestra di aggiornamento rapido, che viene ereditata dalla finestra precedente.

È possibile utilizzare autocmd QuickFixCmdPre per impostare il percorso corretto prima di eseguire la marca.

Se si utilizza Project Root plugin aggiungere quanto segue al vostro .vimrc:

augroup changeQfCmdDir 
    au! 
    autocmd QuickFixCmdPre make ProjectRootCD 
augroup END 

, allora il percorso della finestra di quickfix sarà corretto prima di essere riempito da un :make (è anche possibile specificare una serie di altri comandi che utilizza le finestre di aggiornamento rapido: grep,lgrep,cscope).

Problemi correlati