Scorciatoia per aprire il file in Vim


123

Voglio aprire un file in Vim come in Eclipse usando Ctrl+ Shift+ Ro tramite l' opzione Ctrl+ Ndi riempimento automatico. Richiama una scorciatoia da tastiera, digita il nome / modello del file e scegli tra tutti i nomi dei file corrispondenti.

So di aprirlo normalmente come:

:tabe <filepath>
:new <filepath>
:edit <filepath>

Il problema qui è che devo specificare l'intero percorso del file in questi casi.


1
Nota che i comandi suggeriti hanno un effetto diverso :tabeaprirà il file in una nuova scheda, :newdividerà orizzontalmente la finestra e :editchiuderà il file corrente prima di aprire quello nuovo.
— Skippy le Grand Gourou

Risposte:


61

Di recente mi sono innamorato di fuzzyfinder.vim ... :-)

: FuzzyFinderFile ti consente di aprire i file digitando nomi o modelli parziali.


141

Quello che faccio normalmente è e .(e-spazio-punto) che mi fornisce una directory corrente sfogliabile - quindi posso /- cercare frammenti di nome, proprio come trovare una parola in un file di testo. Lo trovo generalmente abbastanza buono, semplice e veloce.


22
Non hai bisogno di spazio, risparmiando un ulteriore 25% di digitazione. ( :e.).
— Konrad Rudolph,

67
Non hai bisogno del punto se usi la E maiuscola, ad esempio: E <ENTER>
— Andriy Drozdyuk

2
@drozzy Questo accade con vim :-)
— DerMike

7
C'è una differenza nel comportamento tra :e.e :Esebbene: se il file corrente è stato modificato e non ancora salvato, il primo si lamenterà (come :edit) per "nessuna scrittura dall'ultima modifica", mentre il secondo dividerà la finestra orizzontalmente (come :new) per consentire l'apertura di un nuovo file (mentre entrambi sostituiranno il file corrente con il nuovo file se non è stato modificato (come :edit)).
— Skippy le Grand Gourou

1
Se apri un file, quindi lo sostituisci con un secondo file, puoi tornare al primo utilizzando "e #"
— dkretz

33

:find è un'altra opzione.

Apro vim dalla radice del mio progetto e ho il pathset lì.

Quindi, posso aprire i file che si trovano ovunque nell'albero usando:

:find **/filena< tab >

Tab completerà automaticamente le varie partite. (gli **dice di cercare ricorsivamente attraverso il percorso).


Non trovo utile :finddal momento che per ottenere il percorso relativo alla directory di lavoro. Vedere la domanda e @romainl rispondere qui: stackoverflow.com/questions/28224168/... . Trovo più interessante la risposta @strager per ottenere più facilmente il percorso relativo alla directory di lavoro.
— ziiweb

25

È possibile cercare un file nel percorso corrente utilizzando **:

:tabe **/header.h

Premi la scheda per vedere i vari completamenti se c'è più di una corrispondenza.


Ho provato a usarlo ma è così lento. Voglio dire che la mia applicazione è grande e l'editor ha smesso di funzionare per qualche tempo. Conosci qualche impostazione per aumentare le prestazioni e la velocità dell'editor.
— Techmaddy,

1
Bella risposta. Usa qualcosa come :tabe **/*der.hse non ricordi il nome completo del file.
— ziiweb

16

Prendi in considerazione l'utilizzo del plug-in CtrlP .

È incluso in Janus Distributive .

Consente di trovare i file nella directory corrente, i buffer aperti o i file utilizzati più di recente utilizzando la "corrispondenza fuzzy" o un'espressione regolare.


1
in realtà lo uso come parte della distribuzione Janus.
— Alexey

Il repository CtrlP originale è inattivo, ma è presente un fork attivo
— jpyams

12

a meno che non mi manchi qualcosa,: e filename è il modo più veloce che ho trovato.

Puoi usare Tab per completare automaticamente anche il nome del file.


@ dirkgently, lo è. È ancora una scorciatoia, come suggerisce il titolo di questa domanda, ma non credo che sia ciò che l'interrogante sta cercando.
— Strager

Per me il completamento automatico della scheda non funziona per: e. Inoltre non vuoi sempre cercare un nome di file che inizia con qualcosa, ma piuttosto una parola centrale in un nome di file.
— Andriy Drozdyuk


9

Uso un paio di scorciatoie nel mio file .vimrc (sintassi esatta di seguito).

Si basano sul fatto che nel 90% dei casi, voglio aprire un altro file nella stessa directory del file che sto attualmente modificando, o in una directory che è molto vicina nella gerarchia a quel file modificato.

Ecco cosa fanno i comandi:

,cd : Cambia la directory di lavoro corrente nella directory in cui si trova il file corrente che stai modificando.

,e: Apre un file con la directory di lavoro corrente già compilata, quindi è necessario specificare solo il nome del file.

Mettili nel tuo .vimrc:

map ,e :e <C-R>=expand("%:p:h") . "/" <CR>

map ,cd :cd %:p:h <CR>

Ecco una sequenza di eventi:


  1. Stai modificando un file chiamato test.java in "/ home / prog"
  2. ,cd -> La directory di lavoro corrente ora diventa "/ home / prog"
  3. ,e -> Si espande in ": e / home / prog" in modo che tu possa semplicemente inserire il nome del file, ad esempio test.h.

  1. ,e -> Si espande in ": e / home"
  2. tab -> Passa attraverso le sottodirectory di / home
  3. enter-> cdnella directory che vuoi dire / home / prog
  4. ,e -> Si espande in ": e / home / prog"


6

Usa le schede, funzionano quando si inseriscono i percorsi dei file in modalità di fuga di vim!


4

Se hai tag (e dovresti), puoi aprire un file dalla riga di comando semplicemente con il nome della classe o del metodo o della funzione c, con "vim -t DBPlaylist" e all'interno di vim con ": tag ShowList ".


4

Se stai modificando i file in una directory comune, puoi accedere :cda quella directory, quindi utilizzare :esolo il nome del file.

Ad esempio, piuttosto che:

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:sp /big/long/path/that/takes/a/while/to/type/or/tab/complete/other_thingy.c
:vs /big/long/path/that/takes/a/while/to/type/or/tab/complete/one_more_thingy.java

Tu puoi fare:

:cd /big/long/path/that/takes/a/while/to/type/or/tab/complete/
:e thingy.rb
:sp other_thingy.c
:vs one_more_thingy.java

Oppure, se hai già un file nella directory desiderata aperta, puoi usare l' %abbreviazione per il nome del file corrente e ritagliarlo nella directory corrente con il :hmodificatore ( :help :_%:):

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:cd %:h
:sp other_thingy.c
:vs one_more_thingy.java

E, come altri hanno già detto, puoi completare con tabulazione i nomi dei file sulla riga ex (vedi :help cmdline-completionper ulteriori informazioni).


4

Questo non è esattamente quello che stai cercando, ma è buono in molti casi (anche se non tutti).

Se apri VIM e c'è il nome di un file nel buffer, puoi posizionare il cursore su quel nome file e digitare gf. Questo apre il file il cui nome è sotto il cursore nello stesso buffer. È lo stesso di

:e CTRL+r CTRL+w


1
Ho premuto gf e ora ho aperto il nuovo file che si trova sotto il cursore. Ora come tornare al file originale. !!
— vrbilgi

@ user430294: è aperto in un buffer diverso. Usa:b oldname
— Nathan Fellman

@vrbilgi, usa Ctrl + o per tornare al file modificato in precedenza. Usa Ctrl + i per andare di nuovo avanti al file da cui sei tornato.
— Беров

3

Conosco tre plugin che consentono di aprire file, supportano il completamento automatico e non richiedono di inserire il nome completo del percorso dei file da aprire (a condizione che i file si trovino in una delle directory &pathdall'opzione vim) :

Ultimamente ho visto un altro plugin con una funzionalità simile, ma non ricordo il nome.

Presto: find probabilmente supporterà il completamento automatico - le patch su questo argomento stanno circolando sulla mailing-list vim_dev in questi giorni.


1
  • puoi usare (set wildmenu)
  • puoi usare tab per completare automaticamente i nomi dei file
  • puoi anche usare la corrispondenza, ad esempio: e p*.dato qualcosa del genere (come nel vecchio 'dos)
  • potresti anche: sfoglia confermare e (per una finestra grafica)

  • ma dovresti anche probabilmente specificare quale versione di vim stai usando e come funziona quella cosa in emacs. Forse potremmo trovarti un'alternativa esatta a vim.


1

FuzzyFinder è stato menzionato, tuttavia adoro il comportamento simile a textmate del plug-in FuzzyFinderTextmate che estende il comportamento per includere tutte le sottodirectory.

Assicurati di utilizzare la versione 2.16 di fuzzyfinder.vim - Le versioni successive interrompono il plugin.


1

Con Exuberant ctags, puoi creare file di tag con informazioni sui file:

ctags --extra=+f -R *

Quindi, apri il file da VIM con

:tag filename

È inoltre possibile utilizzare <tab>per completare automaticamente il nome del file.


1

In GVIM, il file può essere sfogliato utilizzando la finestra di dialogo di apertura / lettura / scrittura;

:browse {command}

{comando} - apri / leggi / scrivi

apri - Apre il file letto - Aggiunge la scrittura file - Finestra di dialogo Salva con nome


0

Ho installato FuzzyFinder. Tuttavia, la limitazione è che trova solo i file nella directory corrente. Una soluzione alternativa è aggiungere FuzzyFinderTextmate. Tuttavia, in base ai documenti e ai commenti, ciò non funziona in modo affidabile. Hai bisogno della giusta versione di FuzzyFinder e hai bisogno che la tua copia di Vim sia compilata con il supporto Ruby.

Una soluzione alternativa che sto provando ora è aprire tutti i file di cui ho probabilmente bisogno all'inizio della sessione di modifica. Ad esempio, apri tutti i file nelle directory chiave ...

:args app/**
:args config/**
:args test/**
etc...

(Ciò significa che avrei forse decine di file aperti, tuttavia finora sembra funzionare ancora bene.)

Dopodiché, posso usare FuzzyFinder in modalità buffer e funzionerà in qualche modo come la command-oscorciatoia di TextMate ...

:FuzzyFinderBuffer

Sei sicuro? Ho alcune configurazioni nel mio .vimrc, cerca "g: fuf_abbrevMap". Devo aver trovato un esempio nella documentazione. Quando digito il collegamento, digito un'abbreviazione come "web:" e cercherà tutti i file all'interno di una cartella di mia scelta. Il mio problema in realtà è che per qualche motivo non apre più i file, vedo invece [NUOVA DIRECTORY] nella barra di stato. Ma ho lo stesso problema con: o, sembra non correlato a fuf.
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.