salir por editar consola comandos borrar archivo vim

por - ¿Cómo puedo expandir la ruta completa del archivo actual para pasar a un comando en Vim?



salir del editor vi (6)

Adjuntar :p , por ejemplo

:!mycommand %:p

Y %:p:h le dará la ruta del directorio en el que reside el archivo.

Cuando voy al modo de comando y escribo

:!mycommand %

Obtengo mi comando ejecutado en el archivo actual ( % se expande al nombre del archivo actual). ¿Existe una construcción similar que expanda el nombre completo del archivo (con la ruta completa)?

Estoy usando Windows.


Las otras dos respuestas no funcionaron para mí (por alguna razón). Sin embargo, descubrí que este combo muestra la ruta completa cuando se escribe en modo Normal:

Presione 1 luego Ctrl G

Fuente: " Obtener el nombre del archivo actual " en la Wiki de consejos de Vim. Consulte también la sección {count}CTRL-G de :help CTRL-G .



Para imprimir el nombre de archivo vim actual:

:help expand :echo expand("%:p") " absolute path :echo expand("%:p:h") " absolute path dirname :echo expand("%:p:h:h")" absolute path dirname dirname :echo expand("%:.") " relative path :echo expand("%:.:h") " relative path dirname :echo expand("%:.:h:h")" relative path dirname dirname :echo expand("<sfile>:p") " absolute path to [this] vimscript :help filename-modifiers

Por ejemplo (con una función vim), para resolve() y expand() cualquier enlace simbólico a la ruta absoluta a la secuencia de comandos actual <sfile>:p (en lugar de %:p ), y luego fnameescape a la source fnameescape -ed nombre de archivo contenido en una variable vim local de función l:vimrcfilename :

" g:__sfile__dirname -- directory containing this vimrc script " after symlinks " ~dirname(abspath(realpath(__file__))) let g:__sfile__dirname=fnamemodify(resolve(expand("<sfile>:p")), ":h") " Source_dotvim(filename) -- source dirname(this_vimrc)/filename function Source_dotvim(filename) let l:vimrcfilename=g:__sfile__dirname . "/" . a:filename if filereadable(l:vimrcfilename) && !empty(l:vimrcfilename) "source s:vimrcfilename "this doesn''t work, so exec: exec "source " . fnameescape(l:vimrcfilename) else echo l:vimrcfilename . " empty or not found." endif endfunction call Source_dotvim("vimrc.local.01-env.vimrc")

Notas:

  • :help fnamemodify
  • "archivo actual": %:p (archivo de almacenamiento intermedio) / <sfile>:p archivo de <sfile>:p (archivo de script)
  • expand(''<sfile>'') no funciona desde dentro de una función
  • fuente l:varname no funciona; entonces, exec - concatenación de cadenas - y fnameescape
  • :messages imprime los :messages más recientes de 200 vim [error,]

Referencias

  • La respuesta de annika-backstrom
  • respuesta de la férula de umber
  • la respuesta de tito-11

Si desea usar la ruta completa en su vimrc , puede usar algo como esto:

let vimFiles = ''$HOME/.vim'' let absPath = expand(vimFiles . ''/subDir'')

Esto le dará un camino con barras diagonales inversas en Windows.


:!mycommand %:p

Relacionado:

:!cd %:p:h