Quand je passe en mode commande et tape
:!mycommand %
Je fais exécuter ma commande sur le fichier courant (%
est étendu au nom de fichier actuel). Existe-t-il une construction similaire qui développe le nom de fichier complet (avec le chemin d'accès complet)?
J'utilise Windows.
:!mycommand %:p
En relation:
:!cd %:p:h
Les deux autres réponses n'ont pas fonctionné pour moi (pour une raison quelconque). Cependant, j'ai trouvé que ce combo affiche le chemin complet lorsqu'il est tapé en mode Normal:
Presse 1 puis CtrlG
Source: " Obtenez le nom du fichier actuel " sur le wiki Vim Tips. Voir aussi le {count}CTRL-G
section de :help CTRL-G
.
Ajouter :p
, par exemple.
:!mycommand %:p
Et %:p:h
vous donnera le chemin du répertoire dans lequel réside le fichier.
Pour imprimer le nom de fichier vim actuel:
: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
Par exemple (avec une fonction vim), vers resolve()
et expand()
tout lien symbolique vers le chemin absolu du script actuel <sfile>:p
(Au lieu de %:p
), puis exec
à source
le nom de fichier fnameescape
- contenu dans une variable de fonction locale vim 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")
Remarques:
:help fnamemodify
%:p
(fichier tampon)/<sfile>:p
(fichier de script)expand('<sfile>')
ne fonctionne pas à l'intérieur d'une fonctionl:varname
ne fonctionne pas; donc, exec
- concaténation de chaînes - et fnameescape
:messages
Imprime les 200 derniers messages d'erreur [vim]Les références
Obtenez le nom du fichier actuel http://vim.wikia.com/wiki/Get_the_name_of_the_current_file
Set_working_directory_to_the_current_file http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file
Si vous souhaitez utiliser le chemin complet dans votre vimrc
, vous pouvez utiliser quelque chose comme ceci:
let vimFiles = '$HOME/.vim'
let absPath = expand(vimFiles . '/subDir')
Cela vous donnera un chemin avec des barres obliques inverses sous Windows.