Visualizza il nome del file corrente per l'edizione nella riga di comando


10

Come posso visualizzare il percorso del file corrente nella riga di comando, in modo da digitare un nome di file simile? Non voglio un'abbreviazione che verrebbe sostituita dal nome del file corrente, voglio modificare il nome del file, completo del suo percorso di directory. Ad esempio, desidero :editun file con un nome simile o in una directory simile, ad es

vim src/submodule/frontend/frobnicate2.c

e ora voglio modificare ../trunk/src/submodule/frontend/frobnicate.c, e voglio solo inserire ../trunke rimuovere il 2, non digitare nuovamente il percorso completo.

Ovviamente posso tornare alla shell e usare la sua cronologia dei comandi, oppure potrei copiare e incollare il percorso attraverso la GUI, ma sto cercando un modo più efficiente che non richiede di lasciare Vim.

Risposte:


11

Oltre a inserire il %registro come ti sei scoperto, puoi anche usare :edit %<Tab>.

Da :help cmdline-special:

In Ex commands, at places where a file name can be used, the following
characters have a special meaning.  These can also be used in the expression
function `expand()`.

        %       Is replaced with the current file name.           :_% c_%

Quindi puoi, ad esempio, usare:

:edit %.orig

da modificare file.txt.orig. Per il tuo esempio, dovresti digitare :e ../trunk/%, premere <Tab>per ottenere il nome del file con il relativo percorso e rimuovere 2prima di premere <Enter>.

È possibile aggiungere alcuni modificatori al percorso per modificarlo; Ho trovato :hparticolarmente utile, ottiene il "dirname" (o "head" in Vim-speak ") del percorso corrente:

:edit file/in/a/deeply/nested/subdirectory/here.txt
:edit %:h/in_same_dir_as_above.txt

Puoi persino usarlo :hpiù volte. Per esempio:

:edit %:h:h:h/file.txt

Aprirà file/in/a/deeply/file.txt

C'è anche quello :pche ti dà il percorso completo e che potrebbe essere utile nel tuo caso: digita :e %:p, premi <Tab>e modifica il percorso come desiderato. È anche possibile utilizzare più modificatori, ad esempio: :e %:p:h.

Vedi :help filename-modifiersl'elenco completo.

Nota: se si <Tab>, Vim espanderà il %. Se usi <C-d>, Vim non espande il %(ma lo sostituisce %mentre completa il percorso).


5

Oh. Cerca "nome file" in :help :! E 'semplice: inserire la speciale r egister , cioè il nome del file corrente.CTRL-R %%


1
Quindi, basandoti sulla tua risposta: per ottenere il percorso completo come richiesto dall'OP, faresti qualcosa di simile Ctrl-r =expand('%:p'). Questo utilizza il registro = .
lcd047,

3

Se hai impostato la tua pathvariabile vim , hai la piena potenza del :findcomando, vale a dire il completamento della scheda dei nomi dei file (senza la necessità di specificare la parte della directory!)

Nel tuo caso, qualcosa del genere

set path=./**

potrebbe essere tutto ciò di cui hai bisogno per :fin frob<tab>lavorare. Per i dettagli cruenti, :help find, :help file-searching.


0

Ecco una mappatura che puoi provare:

cnoremap <a-q> <c-c>:let @a=expand('%')<CR>:<Up><c-r>a

Ciò salva il comando corrente, quindi imposta il registro 'a' sul nome del file corrente. Quindi l'ultimo comando viene richiamato e aggiunto con il contenuto del registro 'a'. Naturalmente se hai qualcosa di utile nel registro 'a' questo lo sovrascriverà.

Potresti voler cambiare i caratteri mappati in qualcos'altro. Mi piace usare il tasto Alt ma non funziona in alcuni terminali.

Come ha sottolineato Carpetsmoker nella sua risposta, è possibile modificare la funzione di chiamata

expand('%:p')

per forzare il percorso completo.


1
Ciò cancellerebbe inutilmente il registro a. Prova invece qualcosa del genere:cnoremap <M-q> <C-r>=fnameescape(expand('%:p'))<CR>
lcd047,
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.