Come eseguo una ricerca cronologica inversa nella modalità vi di ZSH?


47

Uso vimessenzialmente per tutte le mie esigenze di editing, quindi ho deciso di provare ancora una volta la modalità vi per la mia shell (attualmente ZSH w / oh-my-zsh su OS X), ma mi ritrovo a provare (e non riesco) a usarla Ctrl-Rcostantemente. Qual è l'associazione chiave equivalente? E per riferimento futuro, come potrei capirlo da solo? Sono abbastanza sicuro che potrei usare bind -Pin bash.


2
Secondo 'man zshzle', la storia-incrementale-ricerca-indietro non è vincolata nelle modalità Vi (vicmd, viins) per impostazione predefinita.
paul

Risposte:


56

È possibile eseguire bindkeysenza argomenti per ottenere un elenco di associazioni esistenti, ad esempio:

# Enter vi mode
chopper:~> bindkey -v

# Search for history key bindings
chopper:~> bindkey | fgrep history
"^[OA" up-line-or-history
"^[OB" down-line-or-history
"^[[A" up-line-or-history
"^[[B" down-line-or-history

Nella modalità emacs, l'associazione desiderata è history-incremental-search-backward, ma non è vincolata per impostazione predefinita nella modalità vi. Per associare Ctrl-R da solo, puoi eseguire questo comando o aggiungerlo a ~/.zshrc:

bindkey "^R" history-incremental-search-backward

La zshzlemanpage ( man zshzle) contiene maggiori informazioni sull'editor di linea di zsh, sulle modalità bindkey e emacs / vi.


3
Grazie, in particolare per zshzle. Questo è abbastanza informativo e utile.
Hank Gay,

Ti amo. Sul serio. Dopo l'aggiornamento a OSX El Capitan la ricerca inversa era sparita e l'ho persa più di ogni altra cosa nel mio flusso di lavoro quotidiano.
Christian,

24

Questa è una domanda antica, ma l'unica (e accettata) risposta sostanzialmente dice a uno come trapiantare la modalità "emacs-like" history-incremental-search-backwardin vi. Mentre questo è perfettamente fattibile e può essere la soluzione giusta per te, è un po 'strano che nessuno abbia menzionato il "modo vi" di cercare la storia.

La modalità vi in ​​zsh supporta la cronologia delle ricerche usando i tasti vi / vim standard: /e ?, entrambi disponibili in modalità comando. (Premi <Esc>per passare dalla modalità di inserimento alla modalità di comando, proprio come in vi o vim.)

Il loro senso è invertito, però: poiché di solito si desidera cercare la cronologia della shell al contrario, /esegue una ricerca inversa mentre si ?esegue una ricerca in avanti.

Una volta visualizzato il primo hit, puoi (proprio come in vi / vim) utilizzare nper continuare a trovare più hit nella stessa direzione o Nper invertire la direzione della ricerca.

Le combinazioni di tasti predefinite rilevanti nella vicmdmappa dei tasti sono:

"/" vi-history-search-backward
"?" vi-history-search-forward
"n" vi-repeat-search
"N" vi-rev-repeat-search

2
È anche buono da usare "^P" history-beginning-search-backwarde "^N" history-beginning-search-forwardper il completamento automatico simile a vim (inizi a digitare, quindi premi ctrl+po ctrl+n).
cprn,

Per me, ?solleva bck-i-search, che è esattamente quello che stavo cercando. Grazie.
geowa4,

Il vantaggio di history-incremental-search-backward è che supporta i modelli glob. L'impostazione predefinita /o `? ' non fa: coderwall.com/p/-jvcag/zsh-reverse-history-search-with-regex
alpha_989

@ alpha_989 Il post sul blog a cui fai riferimento non è corretto. È possibile che l'autore abbia qualche "framework" zsh installato che sovraccarica il ^Rkeybinding. L'unico carattere "regex-like" supportato da entrambi history-search-backwarded history-incremental-search-backwardè ^, per ancorare la stringa di ricerca all'inizio della riga. Il vero potere di history-incremental-search-backwardè che fa una ricerca incrementale, come suggerisce il nome. Posso immaginare che uno potrebbe voler legarlo nella vicmdkeymap per quel motivo.
wjv,

@wjv, hai ragione .. avrei dovuto scrivere history-incremental-pattern-search-backwardno history-incremental-search-backward. history-incremental-pattern-search-backwardsforse un widget .. ma penso che sia installato di default in zsh. Supporta globschemi non regexcome hai correttamente sottolineato: zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Operators . C'è davvero un errore nel post.
alpha_989,
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.