Sé que el registro % contiene la ruta completa del búfer actual. Pero, ¿cómo obtener la ruta completa de otro búfer por su número?
¿Existe tal función/comando en VIM?
Quiero explicar cómo llegué a esta pregunta...
Había 2 buffers abiertos. El primero era un archivo XML en la ventana izquierda y el otro era un archivo XSD en la ventana derecha. Los edité a ambos. Durante la edición quería validar el XML con el esquema.
Sin embargo el comando
!xmllint --schema /tmp/schema.xsd %
Por supuesto, funcionó bien sólo si el búfer actual era el que tenía el XML. Entonces tenía curiosidad sobre si sería posible reemplazarlo /tmp/schema.xsd
con algún comando o llamada de función que determinara la ruta completa por el número de búfer. Algo como:
!xmllint --schema getBufferPath(3) %
Respuesta1
Puedes utilizar la expand()
llamada. Por ejemplo
:echo expand("#2:p")
Imprimirá la ruta completa del archivo en el búfer n.° 2; puede enumerar todos los búferes con:ls
Puede utilizar otros modificadores y otras palabras clave (para ver la página de información completa, consulte :help expand()
)
Aquí hay un breve extracto:
When {expr} starts with '%', '#' or '<', the expansion is done like for the cmdline-special variables with their associated modifiers. Here is a short overview: % current file name # alternate file name #n alternate file name n <cfile> file name under the cursor <afile> autocmd file name <abuf> autocmd buffer number (as a String!) <amatch> autocmd matched name <sfile> sourced script file name <slnum> sourced script file line number <cword> word under the cursor <cWORD> WORD under the cursor <client> the {clientid} of the last received message server2client() Modifiers: :p expand to full path :h head (last path component removed) :t tail (last path component only) :r root (one extension removed) :e extension only Example: :let &tags = expand("%:p:h") . "/tags" Note that when expanding a string that starts with '%', '#' or '<', any following text is ignored. This does NOT work: :let doesntwork = expand("%:h.bak") Use this: