Come inserisco il nome file corrente nel contenuto di Vim?


39

Dopo alcune ricerche, ho scoperto che :echo @%visualizza il nome del file corrente nella riga inferiore dello schermo di VIM.

Vorrei scaricare il nome del file (con e senza percorso completo) nel contenuto del file senza uscire vim.

C'è un modo per fare questo?

Risposte:


28

Sono sicuro che ci sono altri modi per farlo ... ma il comando principale che vuoi è :r[ead]che inserisce l'output di un comando nel buffer.

Quindi, per inserire solo il nome del file:

:r! echo %

E, per includere il percorso completo:

:r! echo %:p

Per maggiori informazioni:

:help read
:help filename-modifiers 

37

Il nome file corrente si trova nel "%registro, quindi è possibile inserirlo (in modalità inserimento) con <c-r>%; il percorso completo può essere inserito con <c-r>=expand("%:p"). Potresti farne una macro se la usi spesso. Per ulteriori, trucchi simili, vedi :h expande :h "=.


Forse sto leggendo male quello, ma non è <c-r>mappato come il comando redo?
JC Yamokoski il

10
Nella modalità di inserimento, <c-r>specifica che il carattere successivo è un registro.
Kevin,

Grazie, grazie. Totalmente dimenticato di passare alla modalità di inserimento ...
JC Yamokoski il

Puoi anche farlo "%pin modalità normale o visiva.
naught101

15

Come si può vedere :h registers, il "%registro contiene il nome del file corrente. Il :pu[t]comando inserisce il contenuto di un registro nel testo.

Quindi, per inserire il nome del file effettivo è possibile digitare uno di questi, in modalità di comando:

:put %

o

"%p

Per inserire il nome file con il percorso completo, digitare

:put=expand('%:p')

in modalità comando.


Ulteriori informazioni:

:h pu[t]

Digitando "rpè possibile incollare il contenuto del registro "r.


3
Il :put "%:p"non sembra funzionare per me. Sembra funzionare solo con expand () , come in :put =expand('%:p'):, il che lo rende non meno ingombrante di <c-r>=expand('%:p')sfortunatamente.
Akavel,

@akavel Hai ragione, aggiornerò la risposta. Grazie! ;) E, in effetti, entrambi sono ugualmente prolissi.
braunmagrin,

5

Un modo semplice è eseguire:

!!echo %
  • !! sta sostituendo la riga corrente con il risultato del comando che la segue.

  • % viene sostituito dal nome del file modificato nel comando in modo che questo inserisca effettivamente quel nome nel file modificato.

Il nome file è quello passato al comando vi (m) e potrebbe contenere un percorso relativo o assoluto. Se si desidera eliminarlo e conservare solo il nome del file, eseguire

!!basename %

1

Se è necessario farlo frequentemente, potrebbe essere utile associare una sequenza di tasti a ciò che si desidera, come da http://vim.wikia.com/wiki/Insert_current_filename

inserisce il nome file corrente senza l'estensione nella posizione del cursore, quando si è in modalità inserimento.

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

Per mantenere l'estensione utilizzare:

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

Per inserire il percorso assoluto della directory in uso il file:

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

Per inserire il percorso relativo della directory in uso il file:

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

Soprattutto funzionano direttamente vimper la sessione, oppure puoi metterlo nel .vimrc(dove i due punti iniziali sulla linea sono opzionali).


0

Stavo cercando su Google un modo più semplice per inserire il nome del file corrente (senza percorso o estensione) nella posizione corrente (nessuna nuova riga, nessuna sostituzione della riga corrente). Quindi, combinando le risposte precedenti e questo link , questo è quello che stavo cercando.

In modalità inserimento :

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

Quindi la prossima volta (con il comando già nella cronologia):

<C-R>=<UP>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.