Ricerca di completamento di argomenti simili a pesci in ZSH


8

Stavo scherzando con il pesce e ho notato questo comportamento utile

Se ho digitato wget -<tab><tab><tab>, sono stato inserito in un menu interattivo. Tuttavia, quando ho digitato, ho cercato le descrizioni degli argomenti stessi. Ho provato questo in zsh e digitando questo menu mi è sembrato di riportare al mio prompt interattivo. C'è un modo per ottenere funzionalità simili in zsh?


Volevo sapere come farlo da molto tempo. Quando si tratta di completamento di parole chiave standard (non opzioni) lo fa vim consentendoti di configurare il completamento per mantenere attivo il buffer di linea, in questo modo, se l'elenco di completamento è troppo lungo, continui a digitare e l'elenco naturalmente filtra verso il basso. Ma zsh sposta immediatamente l'attenzione sul widget di selezione dei menu
the_velour_fog

Non capisco il comportamento che stai descrivendo. Si tratta di cercare le descrizioni delle opzioni piuttosto che i nomi delle opzioni? O si tratta del modo di navigare tra le scelte? A quale menu ti riferisci (zsh ha molte impostazioni diverse per il completamento)?
Gilles 'SO- smetti di essere malvagio'

@Gilles Sì, puoi usarlo per cercare le descrizioni delle opzioni o anche i nomi delle opzioni stesse. Il menu a cui mi riferisco appare quando si digita un comando, un trattino, quindi si preme due volte tab. Ad esempio, digitando ls -<tab><tab>mi si accede a un menu in cui posso scorrere su e giù le diverse opzioni. Nel pesce, sono in grado di digitare, che quindi cercherà queste opzioni e le loro descrizioni. Spero di ottenere funzionalità simili in zsh.
Ollien,

Non sono ancora sicuro di cosa intendi esattamente. È l'interattività che vuoi? cioè essere in grado di selezionare dall'elenco con le frecce e le opzioni di evidenziazione? Dici che In fish, I'm able to type, which will then search these options and their descriptions.puoi "cercare queste opzioni e le loro descrizioni" in zsh. ad es. ls --h<tab>cerca le opzioni che iniziano con --hed elenca quattro corrispondenze.
Sparhawk,

Dai un'occhiata a questo screenshot . Se ls -size<tab>scrivo ottengo ls --block-size e ls --size come opzioni in zsh. Tuttavia, fish mi consiglia --size, --tabsize, -k, -S, --block-size e --human-readable. Speravo di ottenere funzionalità simili in zsh. Non solo cerca i nomi dei comandi, ma cerca anche le descrizioni
ollien,

Risposte:


1

Penso che questo faccia quello che vuoi:

  zmodload zsh/complist
  setopt menucomplete
  zstyle ':completion:*' menu select=0 search

Ciò causerà la visualizzazione dell'elenco quando si preme la scheda, quindi se si continua a digitare cercherà le opzioni disponibili, comprese le descrizioni, con una ricerca incrementale.

Potresti anche essere interessato alla stessa configurazione, ma con interattivo anziché ricerca. In tal caso, mentre digiti, filtrerà i completamenti solo per quelli che corrispondono a ciò che hai digitato finora.


Hmm ... se scrivo wget -<tab>noquesto non filtra l'elenco di completamento. Questo continua a digitare 'no' nel terminale dopo --accept-regex=, che è la prima opzione nell'elenco di completamento.
Ollien,

1
eh, non è quello che succede per me. Ma in realtà non si adatta all'opzione di ricerca, fa solo una ricerca incrementale attraverso le possibilità
Thayne

1

Prova a metterlo nel tuo .zshrcfile:

 # load module for list-style selection
 zmodload zsh/complist

 # use the module above for autocomplete selection
 zstyle ':completion:*' menu yes select

 # now we can define keybindings for complist module
 # you want to trigger search on autocomplete items
 # so we'll bind some key to trigger history-incremental-search-forward function
 bindkey -M menuselect '?' history-incremental-search-forward

Ora se si digita il wget -<tab>menu con i completamenti automatici appare. Abbiamo definito la combinazione di tasti per questo menu, quindi se premi ?la riga di ricerca appare nella parte superiore dei completamenti:

davidsykora~%wget --referer
isearch: refe

Alcuni consigli aggiuntivi:

  • puoi anche definire bindkey -M menuselect '/' history-incremental-search-backwardper la ricerca all'indietro
  • se si preme di nuovo ?durante una ricerca, la selezione passerà al risultato di ricerca successivo. Utilizzare /per passare al risultato precedente
  • ci vuole un sacco di modifiche per farlo funzionare come vuoi, quindi dai un'occhiata alla complist documentazione per trovare funzioni e opzioni aggiuntive
  • per me di solito è molto più veloce usare la vi-insertfunzione complist: filtra i completamenti in base a ciò che scrivi.
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.