2013-03-23 5 views
17

In Zsh, posso utilizzare il completamento del nome file con barre per indirizzare un file in profondità nella struttura dei sorgenti. Per esempio, se si digita:Come completare automaticamente i percorsi dei file in Vim, proprio come in zsh?

vim s/w/t/u/f >TAB< 

zsh sostituisce il modello con:

vim src/wp-contents/themes/us/functions.php 

Quello che mi piacerebbe è quello di essere in grado di indirizzare i file nello stesso modo nella riga di comando Vim, in modo che digitando

:vi s/w/t/u/f >TAB< 

sarà completamento automatico:

:vi src/wp-contents/themes/us/functions.php 

Sto provando ad analizzare i documenti Vim per wildmode, ma non vedo quali impostazioni possano darmi questo. Sta facendo il completamento automatico per i nomi dei file individuali, ma non i percorsi dei file. Vim supporta questo in modo nativo? O come posso personalizzare l'algoritmo di completamento automatico per i file?

Grazie per qualsiasi consiglio! -mykle-

+0

Avevo risposto in modo errato in base alla lettura errata della domanda. Non conosco un modo per farlo in Vim. Non è assolutamente possibile con qualsiasi opzione di Vim da solo, e nulla di relativo a 'wildmode' sarà d'aiuto. È possibile implementare con un plugin. Non so se esiste. All'improvviso lo voglio ora che lo hai sollevato, quindi se non riesco a trovare un plug-in, ne scriverò uno. –

risposta

8

Impossibile trovare un plug-in per eseguire questa operazione, quindi ne ho scritto uno. Si chiama vim-zsh-path-completion. Fa quello che stai cercando, anche se tramite <C-s> anziché <Tab>. Puoi usarlo con <Tab> per un controllo ancora maggiore su quali corrispondenze, però.

Ha degli errori, ma per i percorsi di base senza spazi/caratteri speciali, dovrebbe funzionare. Penso che sia abbastanza utile nel suo stato attuale per essere utile. Spero di appianare i bug e ripulire il codice, ma ho pensato che avrei iniziato a sollecitare il feedback ora.

Grazie per l'idea!

Risposta originale (errata), ma con alcune informazioni utili sulla modalità Wild di Vim.

Inserire il seguente nella vostra .vimrc:

set wildmenu 
set wildmode=list:longest 

che completerà alla più lunga corrispondenza univoca sul <Tab>, tra cui l'aggiunta di un / e scendendo in directory, se del caso. Se ci sono più corrispondenze, mostrerà un elenco di corrispondenze per ciò che hai inserito finora. Quindi puoi digitare di nuovo più caratteri e <Tab> per completare.

preferisco la seguente impostazione, che completa la prima partita unica sul <Tab>, e quindi si apre un menu se si colpisce <Tab> ancora una volta, che è possibile navigare con i tasti freccia e premere invio per scegliere tra:

set wildmode=list:longest,list:full 

Check out :help wildmenu e :help wildmode. Si potrebbe anche voler impostare wildignore in un elenco di modelli da ignorare durante il completamento. Il mio è il seguente:

set wildignore=.git,*.swp,*/tmp/* 
+0

erhegerd! quanto è radicale? grazie mille! –

+0

Sto ancora provando a farlo funzionare ... è elencato nel mio: scriptnames ma non sto ottenendo alcuna azione con Ctrl-S. Sembra fare qualcosa con gvim, ma non con plain old vim. Esistono requisiti specifici per la versione di Vim? –

+0

È in uno stato di flusso, mi dispiace. Lavorava principalmente quando l'ho postato per la prima volta, ma era un pretesto prematuro. Sto elaborando bug e test-guidandolo adesso. Controlla GitHub tra qualche giorno e sentiti libero di presentare bug in questo sito. Pubblicherò un altro commento qui quando sono sicuro che ci sia una versione stabile, ma questo non è il forum giusto per gli aggiornamenti di stato. –

5

Vim non dispone di tale funzionalità per impostazione predefinita. La funzione buil-in più vicina è la combo wildmenu/wildmode, ma è ancora molto diversa.

A quick look at the script section of vim.org non ha restituito nulla, ma non ho guardato troppo lontano: si dovrebbe scavare ulteriormente. Forse è lì, da qualche parte.

Hai provato Command-T, LustyExplorer, FuzzyFinder, CtrlP o uno dei tanti plug-in simili?

Io uso CtrlP e la corrispondenza fuzzy può essere eseguita su filepath o nomefile. Una volta fatto il percorso del file, posso usare il keysequence qui sotto per aprire src/wp-contents/themes/us/functions.php (assumendo functions.php è l'unico file sotto us che inizia con un f):

,f " my custom mapping for the :CtrlP command 
swtuf<CR> 

modificare

In pensando a un possibile soluzione temo di essere un po 'miope. Mi sono concentrato sui tuoi requisiti esatti, ma Vim ha trucchi interessanti quando si tratta di aprire i file!

Il comando :e[dit] accetta due tipi di caratteri jolly: * è come il * si usa nella shell e ** significa "qualsiasi sottodirectory".

Quindi è del tutto possibile fare:

:e s*/w*/t*/u*/f*<Tab> 

o qualcosa di simile:

:e **/us/f<Tab> 

o anche:

:e **/fun<Tab> 

In combinazione con le impostazioni wildmode in risposta di Jim, credo hai uno strumento di navigazione dei file piuttosto potente, qui.

+0

CtrlP è roba buona. Mi chiedo se c'è un modo semplice per collegarsi alla riga di comando. –

+0

Ovviamente sono d'accordo. Intendi "utilizzare una funzione da CtrlP per fornire il completamento della riga di comando"? – romainl

+1

Ho effettivamente cancellato la mia risposta perché non ho letto male la domanda. Ma poi sono andato e ho scritto un plugin standalone per farlo. Vedi la mia nuova risposta per i dettagli. Inserisco i commenti 'wildmode' nella nuova risposta per un'altra opzione. –