Comment insérer le nom de fichier actuel dans le contenu de Vim?


39

Après quelques recherches, j'ai appris à connaître :echo @%le nom du fichier actuel dans la dernière ligne de vim-screen.

Je voudrais vider le nom de fichier (avec et sans chemin complet) dans le contenu du fichier sans quitter vim.

Est-ce qu'il y a un moyen de faire ça?

Réponses:


28

Je suis sûr qu'il existe d'autres moyens de le faire ... mais la commande principale que vous voulez est celle :r[ead]qui insère le résultat d'une commande dans le tampon.

Donc, pour insérer uniquement le nom du fichier:

:r! echo %

Et pour inclure le chemin complet:

:r! echo %:p

Pour plus d'informations:

:help read
:help filename-modifiers 

37

Le nom de fichier actuel est dans le "%registre, vous pouvez donc l'insérer (en mode insertion) avec <c-r>%; le chemin complet peut être inséré avec <c-r>=expand("%:p"). Vous pouvez en faire une macro si vous l'utilisez souvent. Pour plus d’astuces similaires, voir :h expandet :h "=.


Peut-être que je me trompe, mais <c-r>la commande redo n'est-elle pas mappée?
JC Yamokoski

10
En mode insertion, <c-r>spécifie que le caractère suivant est un registre.
Kevin

Righto, merci. Totalement oublié de passer en mode insertion ...
JC Yamokoski

Vous pouvez également le faire "%pen mode normal ou visuel.
naught101

15

Comme on peut le voir :h registers, le "%registre contient le nom du fichier actuel. La :pu[t]commande insère le contenu d'un registre dans le texte.

Donc, pour insérer le nom de fichier actuel, vous pouvez taper l'un de ces éléments en mode commande:

:put %

ou

"%p

Pour insérer le nom de fichier avec le chemin complet, tapez

:put=expand('%:p')

en mode commande.


Plus d'informations:

:h pu[t]

En tapant, "rpvous pouvez coller le contenu du registre "r.


3
Le :put "%:p"ne semble pas fonctionner pour moi. Cela semble fonctionner uniquement avec expand () , comme dans:: :put =expand('%:p'), ce qui ne le rend pas moins encombrant que <c-r>=expand('%:p')malheureusement.
akavel

@akavel Vous avez raison, je vais mettre à jour la réponse. Merci! ;) Et, en effet, les deux sont également verbeux.
Braunmagrin

5

Un moyen simple consiste à exécuter:

!!echo %
  • !! remplace la ligne en cours par le résultat de la commande qui la suit.

  • % est remplacé par le nom du fichier modifié dans la commande, de sorte que ce nom sera effectivement inséré dans le fichier modifié.

Le nom de fichier est celui que vous avez transmis à la commande vi (m) et peut contenir un chemin relatif ou absolu. Si vous souhaitez le supprimer et ne conserver que le nom du fichier, exécutez

!!basename %

1

Si vous devez le faire fréquemment, il peut être utile de lier une séquence de clés à votre choix, comme indiqué à l' adresse http://vim.wikia.com/wiki/Insert_current_filename.

insère le nom de fichier actuel sans l'extension à la position du curseur, lorsque vous êtes en mode insertion.

:inoremap \fn <C-R>=expand("%:t:r")<CR>

Pour conserver l'extension utiliser:

:inoremap \fn <C-R>=expand("%:t")<CR>

Pour insérer le chemin absolu du répertoire dans lequel le fichier est utilisé:

:inoremap \fn <C-R>=expand("%:p:h")<CR>

Pour insérer le chemin relatif du répertoire dans lequel le fichier est utilisé:

:inoremap \fn <C-R>=expand("%:h")<CR>

Les précédents fonctionnent tous directement vimpour la session, ou vous pouvez les mettre dans le .vimrc(où le signe deux-points sur la ligne est facultatif).


0

Je cherchais dans Google un moyen simple d'insérer le nom du fichier actuel (sans chemin ni extension) dans la position actuelle (pas de nouvelle ligne, pas de remplacement de la ligne actuelle). Donc, en combinant les réponses précédentes et ce lien , voici ce que je cherchais.

En mode insertion :

<C-R>=expand("%:t:r")

Puis la prochaine fois (avec la commande déjà dans l'historique):

<C-R>=<UP>
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.