Comment puis-je voir le chemin complet du fichier actuel?


123

Lorsque je modifie un fichier dans Vim, existe-t-il une commande permettant de voir le chemin du fichier actuel? Cela est parfois très pratique s'il y a plusieurs fichiers du même nom dans un projet.

Réponses:


143

Vous pouvez appuyer sur {count}Ctrl-G:

{count}CTRL-G       Like CTRL-G, but prints the current file name with
                    full path.  If the count is higher than 1 the current
                    buffer number is also given.

Appuyez sur 1suivi de Ctrl+ pour Gafficher le chemin complet du fichier actuel. Si {count}est supérieur à 1, le nom du tampon sera également affiché.

(Appuyez uniquement sur Ctrl+ pour Gafficher le chemin relatif au répertoire de travail actuel de Vim, comme indiqué par Jasper dans les commentaires.)

Vous pouvez utiliser la commande suivante dans votre .vimrcpour ajouter le chemin complet à la ligne d'état, de sorte qu'il soit toujours visible:

set statusline+=%F

4
N'est-ce pas Ctrl+Gplus comme 'chemin relatif à vim's cwd'?
Jasper

@ Jasper Bonne prise! Mise à jour de la réponse.
thameera

4
Il semble que C-gpar défaut 0C-g, et 2C-gaffiche également le numéro d’index de la mémoire tampon (à partir de 1).

Je suis tellement heureux d'être le 100ème à voter votre réponse! Merci pour ça 1C-g!
voûte

53

Register %contient le nom du fichier en cours.

Les commandes suivantes peuvent être entrées pour afficher les informations affichées:

:echo @%                |" directory/name of file
:echo expand('%:t')     |" name of file ('tail')
:echo expand('%:p')     |" full path
:echo expand('%:p:h')   |" directory containing file ('head')

Si tout ce que vous voulez, c'est afficher le nom du fichier actuel, tapez :f/ :lsou appuyez sur Ctrl- g(pour le chemin complet, appuyez sur 1puis sur Ctrl- g).

En mode insertion, tapez Ctrl- rpuis %pour insérer le nom du fichier actuel.

Les commandes suivantes insèrent dans le tampon des lignes comprenant le chemin d'accès complet des fichiers en cours et des fichiers de remplacement:

:put =expand('%:p')
:put =expand('#:p')

Source: Obtenir le nom du fichier en cours sur vim wikia

Apparenté, relié, connexe:


2
Il peut être intéressant de noter que vous pouvez également utiliser ces =expand...expressions après Ctrl-Ren mode insertion.
dash-tom-bang

22

Vous pouvez utiliser :!ls %:ppour obtenir le chemin complet du fichier actuel.

Selon le contexte ex, %cela signifie soit le contenu du fichier, soit le nom du fichier. Lors du shelling out, il représente le chemin du fichier par rapport au répertoire en cours. La commande ' %:p' ajoutera le modificateur de chemin d'accès complet au modificateur de nom de fichier %.

Il existe quelques autres modificateurs de nom de fichier intéressants, tels que:

  • :~: Récupère le chemin du fichier par rapport au répertoire personnel (celui-ci ne m'a pas fonctionné pour une raison quelconque)
  • :.: Récupère le chemin du fichier par rapport au répertoire courant ( %par défaut)
  • :r: Nom du fichier racine. Le nom du fichier sans l'extension.
  • :e: Extension du fichier.
  • :h: Split sur /et retourner la moitié gauche (si je l' édition d' un fichier dans un chemin de /tmp/test.txtet exécuter %:p:hretournera/tmp
  • :t: Split sur /et retourner la moitié droite ( à savoir si je suis l' édition d' un fichier dans un chemin de /tmp/test.txtet exécuter %:p:tretourneratext.txt

Je pense que vous vouliez dire que%: p: t retournera text.txt
John O'M.

@ JohnO'M. oui, c'est vrai merci: D. Fixé.
CharlesL

7

On peut voir le répertoire de travail actuel avec :pwd. Bien entendu, il ne s'agit que du répertoire et non du nom de fichier. Pour obtenir le répertoire de travail et le nom du fichier, nous pouvons utiliser le registre spécial %, qui contient des informations sur le fichier actuel.

Si vous utilisez :echo @%, vous obtiendrez le répertoire et le nom du fichier actuel.
Si vous utilisez :echo expand('%:p'), vous obtiendrez le chemin d'accès complet et le nom du fichier actuel. Ceci est très similaire à la réponse de CharlesL .

Je me souviens celui - ci, cependant, parce que si vous utilisez l'aide de vim :h expand, il mentionne que %et %:pet leurs proches.


4

J'utilise:

:f[ile]

C'est :fou :file.

Je suis surpris que personne ne mentionne cela dans les réponses, est-ce que je manque quelque chose?


Simple et utile
Morteza Ziyae

3

Pour afficher le chemin complet de tous les fichiers, y compris les liens symboliques résolus, utilisez ce qui suit.

:echo resolve(expand('%:p'))

3

Il existe déjà de meilleures réponses, mais si (pour une raison quelconque) vous souhaitiez utiliser le shell pour obtenir le chemin complet du fichier (cela est plus utile si vous allez effectuer une autre opération sur le fichier avec le shell), sur un système de type Unix, vous pouvez exécuter:

:!realpath %

ou:

:'<,'>!realpath %

pour insérer le chemin dans le document sur la sélection en cours.

Register %contient toujours le nom du fichier. Par exemple, si vous modifiez un fichier de configuration sans disposer de droits en écriture (et ne souhaitez pas exécuter Vim en tant que root), vous pouvez éditer le fichier, puis exécuter:

:w ! sudo tee %

pour sauvegarder le fichier (un petit peu offtopic ici, mais c'est un bon exemple de ce qui peut être fait avec le %registre).


realpathce n'est pas POSIX, donc ça pourrait être plus simple à faire:!echo "$PWD/%"
muru

D'accord; bon appel.
Sam Whited

2

Vous devez définir votre ligne d'état pour qu'elle soit visible et également la définir comme chemin. Je l'ai fait de manière permanente en ajoutant les deux lignes ci-dessous à mon ~ / .vimrc

set laststatus=2
set statusline+=%F

Si vous voulez simplement lancer ça une fois. Puis quand VIing un type de document

:set laststatus=2       <ENTER>
:set statusline+=%F     <ENTER>

1
C'est la même réponse que celle faite par thameera sur la même question.
statox


1

Vous pouvez afficher le chemin complet du fichier que vous modifiez dans la barre de titre, ce qui est un moyen pratique d'afficher le chemin du fichier, à mon avis.

Pour ce faire, vous devez définir l' titleoption et titlestring. Actuel j'utilise les paramètres suivants:

set title
set titlestring=%{hostname()}\ \ %F\ \ %{strftime('%Y-%m-%d\ %H:%M',getftime(expand('%')))}

Il montrera le nom d'hôte de Vim, puis le chemin complet du fichier et suivi de la dernière heure de modification du fichier. Voir la figure ci-dessous pour une démo

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.