Zsh auto complete suggerisce funzioni complete (_git _vim ecc.)


9

Ho un piccolo fastidio su come zshstia dando suggerimenti completi per i miei comandi.

Se digito l'inizio di un comando che non ho installato e premo tab, suggerirò la funzione di completamento che è installata.

Diciamo che voglio eseguire vimma non è installato, suggerirà _vim.

C'è un modo per spegnerlo? O ho fatto qualcosa di sbagliato nella mia configurazione?

Tutti i miei dotfile sono pubblici a github.com/henrikbjorn/castle.


Ho già visto questo comportamento prima, ma nella mia configurazione attuale non sembra essere presente. Purtroppo, non ho idea di quale delle mie impostazioni abbia cambiato quel comportamento.
Personalizzatore

Risposte:


8

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 zstylebuiltin imposta (principalmente) le impostazioni di completamento. Lo matcher-liststile 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-patternsstile 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 vie viewnon vimpremendo poi Tabdopo vioffrirai vie viewma no _vim, ma se scrivi vimallora il completamento offrirà _vim.


Grazie sembra funzionare facendo una delle soluzioni che hai specificato, inoltre ho imparato un sacco di come funziona.
Henrik Bjørnskov,

2
La soluzione con ignore-patternsfunziona perfettamente per me, anche se non ci sono corrispondenze. Dovevo solo assicurarmi che completernon contenga _ignored.
Adaephon,
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.