Come posso vedere il percorso completo del file corrente?


123

Quando sto modificando un file in Vim, c'è un comando per vedere il percorso del file corrente? A volte questo è molto utile se ci sono più file con lo stesso nome in un progetto.

Risposte:


143

Puoi premere {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.

La pressione 1seguita da Ctrl+ Gmostra il percorso completo del file corrente. Se {count}è maggiore di 1, verrà mostrato anche il nome del buffer.

(Premendo solo Ctrl+ viene Gmostrato il percorso relativo alla directory di lavoro corrente di Vim, come sottolineato da Jasper nei commenti.)

È possibile utilizzare il comando seguente in .vimrcper aggiungere l'intero percorso alla riga di stato, in modo che sia sempre visibile:

set statusline+=%F

4
Non è Ctrl+Gpiù simile a 'path relativo a vim's cwd'?
Jasper,

@Jasper Buona cattura! Aggiornato la risposta.
Thameera,

4
Sembra C-gessere predefinito 0C-ge 2C-gmostra anche il numero di indice del buffer (a partire da 1).

Sono così felice di essere il centesimo a votare la tua risposta! Grazie per questo 1C-g!
caveau

53

Register %contiene il nome del file corrente.

È possibile immettere i seguenti comandi per visualizzare le informazioni visualizzate:

: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')

Se si desidera solo visualizzare il nome del file corrente, digitare :f/ :lso premere Ctrl- g(per il percorso completo premere 1quindi Ctrl- g).

Nella modalità di inserimento, digitare Ctrl- rquindi %per inserire il nome del file corrente.

I seguenti comandi inseriscono nel buffer righe costituite dal percorso completo dei file correnti e alternativi:

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

Fonte: ottieni il nome del file corrente su vim wikia

Relazionato:


2
Vale la pena notare che è possibile utilizzare anche quelle =expand...espressioni dopo anche Ctrl-Rin modalità inserimento.
dash-tom-bang

22

È possibile utilizzare :!ls %:pper ottenere il percorso completo del file corrente.

A seconda del contesto ex, %significherà il contenuto del file o il nome del file. Quando si esegue il bombardamento, rappresenta il percorso del file relativo alla directory corrente. Il comando ' %:p' aggiungerà il modificatore del nome file del percorso completo a %.

Ci sono alcuni altri modificatori di nome file interessanti come:

  • :~: Ottieni il percorso del file relativo alla home directory (questo non ha funzionato per me per qualche motivo)
  • :.: Ottieni il percorso del file relativo alla directory corrente ( %impostazione predefinita)
  • :r: Nome file root. Il nome del file senza estensione.
  • :e: Estensione del file.
  • :h: Split su /e restituire la metà sinistra (cioè se sto modificando un file in un percorso di /tmp/test.txte corsa %:p:htornerà/tmp
  • :t: Dividi su /e restituisci la metà giusta (cioè se sto modificando un file in un percorso di /tmp/test.txted eseguirò %:p:ttorneràtext.txt

Penso che intendevi%: p: t restituirà text.txt
John O'M.

@ JohnO'M. sì, è vero grazie: D. Fisso.
CharlesL

7

Si può vedere la directory di lavoro corrente con :pwd. Naturalmente, questa è solo la directory e non il nome file. Per ottenere la directory di lavoro e il nome file, possiamo usare il registro speciale %, che contiene informazioni sul file corrente.

Se lo usi :echo @%, otterrai la directory e il nome del file corrente.
Se lo usi :echo expand('%:p'), otterrai il percorso completo e il nome file del file corrente. Questo è molto simile alla risposta di CharlesL .

Mi ricordo di questo, però, perché se si utilizza l'aiuto di vim :h expand, allora ricorda che %e %:ped i loro parenti.



3

Per mostrare il percorso completo di tutti i file, inclusi i collegamenti simbolici risolti, utilizzare quanto segue.

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

3

Ci sono risposte sempre migliori, ma se (per qualche motivo) volessi usare la shell per ottenere il percorso completo del file (questo è più utile se hai intenzione di eseguire qualche altra operazione sul file con la shell), su un sistema simile a Unix potresti eseguire:

:!realpath %

o:

:'<,'>!realpath %

per inserire il percorso nel documento sopra la selezione corrente.

Register %contiene sempre il nome del file. Un esempio del mondo reale potrebbe essere se stai modificando un file di configurazione, ma non hai i permessi di scrittura (e non vuoi che esegua Vim come root), potresti modificare il file, quindi eseguire:

:w ! sudo tee %

per salvare il file (un po 'offtopico lì, ma è un buon esempio di cos'altro si può fare con il %registro).


realpathnon è POSIX, quindi potrebbe essere più semplice da fare:!echo "$PWD/%"
muru

Concordato; buona chiamata.
Sam Whited,

2

Devi impostare la tua linea di stato in modo che sia visualizzabile e anche impostarla sul percorso. L'ho fatto in modo permanente aggiungendo le due righe seguenti al mio ~ / .vimrc

set laststatus=2
set statusline+=%F

Se vuoi eseguirlo solo una volta. Quindi quando VIing un tipo di documento

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

1
Questa è la stessa risposta di quella fatta da Thameera sulla stessa domanda.
statox


1

Puoi mostrare il percorso completo del file che stai modificando nella barra del titolo, che è un modo conveniente per mostrare il percorso del file secondo me.

Per fare ciò, è necessario impostare l' titleopzione e titlestring. Attualmente sto usando le seguenti impostazioni:

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

Mostrerà il nome host di Vim, quindi il percorso completo del file e seguito dall'ultima modifica del file. Vedi la figura sotto per una demo

inserisci qui la descrizione dell'immagine

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.