En supposant que le tampon actuel est un fichier ouvert pour modification, il :e
ne s'affiche donc pas E32: No file name
.
Je voudrais retirer un ou tous:
- Le nom du fichier exactement comme indiqué sur la ligne d'état, par exemple
~\myfile.txt
- Un chemin complet vers le fichier, par exemple
c:\foo\bar\myfile.txt
- Juste le nom du fichier, par exemple
myfile.txt
Réponses:
TL; DR
:let @" = expand("%")
>cela copiera le nom du fichier dans le registre sans nom , vous pourrez alors utiliser du bon vieux
p
pour le coller. et bien sûr, vous pouvez mapper cela à une clé pour une utilisation plus rapide.:nmap cp :let @" = expand("%")<cr>
vous pouvez également l'utiliser pour le chemin complet
:let @" = expand("%:p")
Explication
Vim utilise le registre sans nom pour stocker le texte qui a été supprimé ou copié (arraché), de même lorsque vous le collez, il lit le texte de ce registre.
En utilisant,
let
nous pouvons stocker manuellement du texte dans le registre en utilisant,:let @" = "text"
mais nous pouvons également stocker le résultat d'une expression.Dans l'exemple ci-dessus, nous utilisons la fonction
expand
qui développe les caractères génériques et les mots-clés. dans notre exemple, nous utilisonsexpand('%')
pour développer le nom du fichier actuel. Nous pouvons le modifier commeexpand('%:p')
pour le nom complet du fichier.Voir
:help let
:help expand
:help registers
pour plus de détailsla source
unnamedplus
comme presse-papierslet @+ = expand("%")
"%:h"
pour obtenir le chemin complet sans le nom de fichier.Presque ce que vous demandez, et cela pourrait le faire:
Ctrl+R %
extrait le nom de fichier actuel là où vous vous trouvez (invite de commande, tampon d'édition, ...). Consultez cette astuce Vim pour en savoir plus.la source
Ctrl+R %
fonctionne eninsert
mode - mais enedit
mode,Ctrl+R
signifie refaire.Si vous souhaitez mettre le nom de fichier du tampon actuel dans votre presse-papiers au niveau du système, essayez de changer le registre en @ +:
Edit 20140421: Je les utilise couramment, j'ai donc créé des raccourcis. Linux Vims fonctionne apparemment légèrement différemment de Mac Vims , il existe donc un cas particulier pour cela également. Si vous mettez ce qui suit dans votre
~/.vimrc
:Ensuite, par exemple
<leader>cf
, copiera le chemin relatif du tampon actuel (le leader par défaut est la barre oblique inverse (\
)). Je les utilise souvent pour exécuter des commandes sur un fichier ou pour faire d'autres choses sur la ligne de commande. Je n'utilise pas souvent le dernier nom de fichier / nom de répertoire.Vous pouvez envisager des mappages plus intuitifs comme
<leader>cfr
pour relatif,<leader>cfa
pour absolu,<leader>cff
pour juste nom de fichier,<leader>cfd
pour répertoire.la source
"*
et"+
sont équivalents, vous pouvez donc vous passer des vérifications de la plate-forme et simplement les utiliser@+
Si vous le faites,
:reg
vous verrez le nom du fichier actuel dans le%
registre. Vous pouvez le coller avec"%p
, par exemple.Si, comme moi, vous passez souvent au tampon «alternatif», il est très pratique que son chemin complet et son nom de fichier soient mis dans le
#
registre. Vous pouvez le coller avec"#p
, par exemple.Remarque (juste au cas où il s'agirait d'un comportement spécifique à ma configuration): j'utilise VIM 7.4.52 sur Ubuntu 14.04.4 LTS.
la source
Combiner les informations de quelques autres réponses: Si vous voulez extraire le chemin complet actuel d'un fichier et le mettre dans le tampon de commande dans une autre fenêtre, faites d'abord
:let @" = expand("%:p")
, puis passez à une autre fenêtre et tapezCtrl+R "
.Utile pour copier un fichier tout en restant dans le même répertoire et en gardant l'ancien ouvert. Par exemple:
la source
Voici ma solution:
la source
J'utilise xclip pour accéder au presse-papiers de X, donc j'utilise:
la source