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.