Completamento con tabulazione simile a Zsh di percorsi parziali


11

Relativo alla tabulazione parziale simile a Bash per i nomi di file in Vim

Una delle caratteristiche davvero fantastiche di zshè che puoi digitare, ad esempio ls /u/s/m/m/who.1, premere Tabe farlo completare ls /usr/share/man/man1/who.1.gz. Una volta che ti ci abitui, è davvero fastidioso tornare indietro /u<tab>/s<tab>/m<tab>/m<tab>..., specialmente quando l'intero percorso parziale può risolversi in un solo percorso effettivo, ma ogni singolo componente può avere più completamenti. Ciò può essere ottenuto in Vim, ad esempio, quando si utilizza :eo :cd?

Ci sono altre utili funzioni relative al percorso in zsh, come l'uso cd foo barper spostarsi su un percorso equivalente con foosostituito con bar(cioè, /blah/foo/baz/yadadiventa /blah/bar/baz/yada). Se c'è una soluzione che porta anche questi (essenzialmente consegnando le attività relative alla shell a una shell che fa quelle molto bene), sarebbe fantastico.


1
Non sono a conoscenza di nulla che raggiunga esattamente ciò che stai chiedendo, ma ci sono vari cercatori di file fuzzy che ti consentono di aprire i file in modo simile. Io preferisco CtrlP, ma c'è anche Command-T e sono sicuro che ce ne sono altri di cui sto dimenticando il nome.
Ricco del

1
@Rich Finché non dovrò schiacciare Tab una dozzina di volte, sarei felice.
Muru,

C'è già una domanda simile su SO.
romainl,

Risposte:


6

Prima usavo CtrlP e altri plugin correlati molto prima di scoprire veramente i poteri nativi di VIM. Lascia che ti spieghi alcuni modi per farlo senza richiedere un plug-in esterno:

  1. :e, la cosa bella di: e è che puoi fare qualcosa di simile :e /u*/s*/m*/m*/<Tab>e Vim lo espanderà automaticamente per te :e /usr/share/man/man. Questo è molto più breve e semplice di quello che hai pubblicato, ma un modo ancora migliore è farlo :e /usr/**/man<Tab>, in questo modo sembrerà ricorsivamente sotto /usred elencerà tutti i percorsi corrispondenti, questo può richiedere del tempo anche se dipende da quanto è grande il set, ma in un progetto funziona meravigliosamente perché puoi fare qualcosa del genere :e ap**/jav**/user<Tab>e completerà tutti i percorsi incompleti e ti darà un elenco di percorsi corrispondenti e funziona alla grande.
  2. :b, Per aprire i buffer esistenti. Questo è davvero potente perché accetta i parziali per impostazione predefinita, quindi puoi semplicemente fare qualcosa di simile :b usr*man<Tab>e completerà il nome del file se è già stato caricato nell'elenco dei buffer. Questo è particolarmente buono perché è quasi istantaneo e molto veloce. Inoltre uso pesantemente le sessioni di vim, con l'aiuto di tpope / vim-obsession e dhruvasagar / vim-prosession , che mantiene tutti i file che apro nell'elenco buffer e sono disponibili anche se esisto vim e torno ad esso dal directory di progetto.

1
/u*/s*/m*/m*/<Tab>è come lavoravo intorno a bash. Non è un sostituto di zsh di un miglio. /usr/**/man<Tab>è terribilmente lento quando hai l'intero file system aperto, ma potrebbe essere utile per piccoli progetti. A meno che non fraintenda :b, non è per l'apertura di nuovi file.
Muru,

@muru hai ragione, non è un sostituto di zsh ma è ancora meglio che dover scrivere tutto da solo, si tratta di renderlo più semplice, **è orrendamente lento, ma funziona bene per progetti regolari. :bè per il buffer aperto esistente, ecco perché l'utilizzo delle sessioni aiuta.
Dhruva Sagar,

5

vim-zsh-path-completamento pretende di fare esattamente quello che stai chiedendo (almeno la prima parte), ma non l'ho mai provato. (Non ne avevo mai sentito parlare fino a quando Romainl non si è collegato a una risposta SO del suo autore , sebbene la sua documentazione menzioni anche alcune limitazioni.

Oltre a questo, ci sono vari cercatori di file fuzzy che ottengono qualcosa di simile per l'apertura dei file.

Il mio plugin preferito per questo è CtrlP . Quando viene utilizzato per aprire i file, cerca tutti i file i cui percorsi completi contengono i caratteri digitati nell'ordine corretto, non è necessario digitare parti di ogni componente del percorso (e tutti i separatori di percorso) come nel tuo esempio, ma funziona perfettamente se lo fai. Utilizza anche la stessa interfaccia per l'apertura di file utilizzati di recente e buffer aperti, e altro ancora.

Per impostazione predefinita, esegue il mapping <c-p>in modalità normale per aprire il prompt CtrlP. Il prompt visualizza un elenco di file, che viene ridotto durante la digitazione dei caratteri. È possibile premere Enterin qualsiasi momento per aprire il file attualmente selezionato o utilizzare <c-k>e <c-j>per spostare la selezione su e giù nell'elenco dei file attualmente corrispondenti.

Un'altra alternativa popolare è Command-T , ma preferisco CtrlP perché è implementato in VimScript; Command-T ha un componente Ruby.

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.