Per impostazione predefinita, il motore di completamento di zsh cerca solo di aggiungere qualcosa a ciò che scrivi. Lo hai configurato per provare ad aggiungere anche un prefisso. Il semplice motore di configurazione del completamento interattivo ( compinstall
) offre questa opzione sotto "controllo corrispondenza → completamento sottostringa". Questo inserisce una linea come questa nel tuo .zshrc
:
zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'
Il zstyle
builtin imposta (principalmente) le impostazioni di completamento. Lo matcher-list
stile di completamento è un elenco di modi per provare in successione, fermandosi quando c'è almeno una corrispondenza. La stringa vuota indica il completamento predefinito (solo suffissi). L' incantesimo del controllo di corrispondenzal:|=* r:|=*
significa provare una corrispondenza di prefisso *
e una corrispondenza di suffisso *
, vale a dire qualsiasi prefisso e suffisso.
Puoi vietare i prefissi che iniziano con del _
tutto. Ciò consente comunque il completamento delle parole che iniziano con _
e il completamento aggiungendo un prefisso, ma il prefisso potrebbe non iniziare con _
.
zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'
Questo vale per tutti i completamenti, non solo per i completamenti dei nomi dei comandi. Non so come limitare questo ai nomi dei comandi.
Dovrebbe esserci un modo per escludere più precisamente i nomi dei comandi che iniziano con _
, ma non so come. Un primo inizio è con lo ignored-patterns
stile di completamento.
zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'
Questo esclude le partite che iniziano con _
; tuttavia, se non ci sono corrispondenze, zsh riprova senza le regole ignora. Il bello di questo è che se il comando è iniziato con un trattino basso in primo luogo, sarà completato in questo secondo passaggio. La parte cattiva è che zsh proverà quindi ad aggiungere comunque un trattino basso se non ci sono corrispondenze, quindi se hai vi
e view
non vim
premendo poi Tabdopo vi
offrirai vi
e view
ma no _vim
, ma se scrivi vim
allora il completamento offrirà _vim
.