2012-05-24 4 views
8

Hice una función en Vim que compila algunas cosas para mí. Se ve así:Vim rutas de archivos en la ventana de quickfix

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 

I vim normalmente abierto en un directorio del proyecto, a continuación, se puede ejecutar esta función, que cds en la acumulación, la construye y la espalda de cd así que me quedo en mi directorio del proyecto.

Sin embargo, a veces, cuando falla la compilación y aparece la ventana de revisión, mostrará los nombres de los archivos relativos a mi proyecto dir (yay), pero otras veces en el mismo archivo muestra la ruta absoluta. El resultado del script de compilación siempre muestra rutas relativas, y vim maneja ambos correctamente, es decir, encuentra el archivo correcto.

Sospecho que el manejo de la ruta es responsable. Mi pregunta es, ¿cuál es el problema, y ​​hay una mejor manera de manejar el cambio al directorio de compilación y viceversa? Siempre quiero que se muestren caminos relativos.

Gracias!

Respuesta

3

Creo que esto tiene que ver con el lcd. Cuando la ventana de revisión se abre desde su función, heredará el directorio local de la ventana actual. Pero cuando la ventana de revisión se haya abierto desde cualquier otro lugar (o antes de ejecutar su función), mantendrá el directorio de trabajo global. Cuando hay una falta de coincidencia, Vim tiene que mostrar rutas absolutas.

Si realmente necesita usar :lcd, sería mejor usar una lista de ubicación (:lmake), porque eso también será local para la ventana. Pero primero trataría de usar un :cd global, ya que el interruptor es solo temporal, de todos modos, y no le importa restaurar el valor original real hasta el momento.

+0

Eso es cierto. Le daré una oportunidad más tarde e informaré. – Christoph

0

Como señaló Ingo, las rutas son relativas al directorio actual de la ventana quickfix, que se hereda de la ventana anterior.

Puede usar autocmd QuickFixCmdPre para establecer la ruta correcta antes de ejecutar la marca.

Si utiliza Project Root plugin añadir lo siguiente a su .vimrc:

augroup changeQfCmdDir 
    au! 
    autocmd QuickFixCmdPre make ProjectRootCD 
augroup END 

, entonces el camino de la ventana quickfix será corregido antes de ser llenado por un :make (también se puede especificar un número de otros comandos que utiliza ventanas quickfix: grep,lgrep,cscope).

Cuestiones relacionadas