Come può zsh essere configurato per completare automaticamente il nome della directory con la corrispondenza camelcase?


9

Eclipse e Resharper hanno un buon modo di navigare tra i file.

Se ho le seguenti cartelle (o file) nella mia directory corrente

MyReallyLongName
MyReallyLongAndFunName
MyReallyLongAndNotReallyFunName

In eclissi posso navigare verso di loro usando solo le lettere maiuscole. Di conseguenza in zsh voglio essere in grado di digitare:

cd MRLAFN (Tab) (Invio)

Per entrare in MyReallyLongAndFunNameun passo

Se voglio farlo adesso con zsh, devo digitare My(Tab)Fun(Tab)(Enter)

Risposte:


6

Questo funziona per me:

zstyle ':completion:*' matcher-list 'r:[^A-Z0-9]||[A-Z0-9]=** r:|=*' 

Quindi posso farlo in una directory di test:

touch MyReallyLongName MyReallyLongAndFunName MyReallyLongAndNotReallyFunName
ls MRLANRFN<TAB>
ls MyReallyLongAndNotReallyFunName

L'ho messo insieme dai suggerimenti nella Guida per l'utente di Zshell .


Puoi descrivere dove devo posizionare questa estensione (file, cartella)? Potresti anche essere interessato ad aggiungerlo al progetto zsh-completions .
JJD,

aggiungilo al tuo ~ / .zshrc
Cody

Questo non funziona come previsto, con AbcAde AdFg HlAkAd, ls AA<TAB>completa Ad, mentre mi aspetto AbcAde.
Arekolek,

@arekolek "Annuncio" è un completamento parziale. Se premi di nuovo TAB (a seconda della configurazione di zsh) vedrai tutti i file corrispondenti. Dovrebbe includere tutti e tre i file. Quindi puoi sceglierne uno con la selezione del menu o digitando un po 'di più del nome del file per guidare il completatore.
phord,

@arekolek Siamo spiacenti, ho letto male. Non sono sicuro di come tu abbia ottenuto l'annuncio da lì. Ho pensato che fosse una partita parzialmente ambigua, ma è difficile da dire dal tuo esempio. Un 2 ° TAB produce altri risultati?
phord,

2

Ho ottenuto che funzioni "abbastanza bene" aggiungendo un file _camel_caseal mio personale ~/.zsh/functions folder(prendi qualsiasi cartella che si trova nella tua $fpathvariabile) con il seguente contenuto:

#autoload

[[ -z "$PREFIX" ]] && return 1

relpath=$(dirname $PREFIX)

[[ -e $relpath ]] || return 1

files=$(ls $relpath)

regex=$(echo $(basename $PREFIX) | sed -e 's/\([A-Z][^A-Z]*\)/\1[^A-Z]+/g')

correctedfiles=($(echo $files | grep -P $regex | sed -e :a -e '$!N;s/\n/ /;ta'))

results=($(for file in $correctedfiles; do echo "$relpath/$file"; done))

compadd -U -f -- $results

Quindi, ho aggiunto la seguente riga al mio ~ / .zshrc

zstyle ':completion:*' completer _complete _correct _path_files _camel_case

Si noti che questa probabilmente non è una soluzione "buona" in quanto non ho troppa conoscenza del sistema di completamento di zsh (solo poche persone lo hanno, immagino), ma fa esattamente quello che hai descritto nella tua domanda.


Questo funziona solo in qualche modo .. mkdir AaBbCcDd cd ABCD (tab) => cd ./ ie. Il completamento automatico non riesce
Rohit Manokaran,
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.