Come posso modificare il completamento della cronologia di bash per completare ciò che è già in linea?


133

Ho trovato un comando un paio di mesi fa che ha completato automaticamente la mia cronologia di bash su ciò che è già in linea quando si preme la freccia su:

$ vim fi

stampa

$ vim file.py

Mi piacerebbe installarlo sul mio nuovo computer, perché fa risparmiare molto tempo quando si tiene una grande storia. Il problema è che non riesco a ricordare per la vita di me dove sia stato menzionato e sfortunatamente non ho aiutato a leggere infiniti riferimenti bash e tutorial.

Qualcuno conosce il comando?

Risposte:


223

Probabilmente qualcosa del genere

# ~ / .inputrc
"\ e [A": storia-ricerca-indietro
"\ e [B": storia-ricerca-avanti

o equivalentemente,

# ~ / .bashrc
se [[$ - == * i *]]
poi
    associare '"\ e [A": storia-ricerca-indietro'
    bind '"\ e [B": history-search-forward'
fi

(l'istruzione if verifica la modalità interattiva)

Normalmente, su e giù sono legati alle funzioni Readline previous-historye next-historyrispettivamente. Preferisco associare PgUp / PgDn a queste funzioni, invece di sostituire il normale funzionamento di Su / Giù.

# ~ / .inputrc
"\ e [5 ~": storia-ricerca-indietro
"\ e [6 ~": history-search-forward

Dopo aver modificato ~/.inputrc, riavvia la shell o usa Ctrl+ X, Ctrl+ Rper dirlo di rileggere ~/.inputrc.


A proposito, se stai cercando documentazione pertinente:

Bash utilizza la libreria GNU Readline per il prompt e la cronologia della shell.


Grazie per la tua risposta. Sembra familiare, ma sfortunatamente non funziona per me. Inserirlo in .inputrc non cambia nulla e inserirlo in .bashrc impedisce alle frecce di fare qualsiasi cosa. Qualche idea?
Blokkie,

Non importa. history-complete- * non esiste; esistono solo le funzioni history-search- *. Grazie!
Blokkie,

Ah, ho chiaramente scritto male i primi due esempi lì ... l'ultimo, però, era corretto. Lo aggiusterò.
effimero

@ user1037114: questa è una domanda in sé, dovresti chiederla da solo.
kamaradclimber,

Questo risolto le frecce su / giù per me usando la modalità vi in ​​bash. Nota, devo premere "Esc" (modalità comando) per farlo funzionare.
Chris,

5

Aggiorna .inputrc con il seguente:

"\C-[OA": history-search-backward
"\C-[[A": history-search-backward

"\C-[OB": history-search-forward
"\C-[[B": history-search-forward

4
Quali sono quelle chiavi?
Chris,

Non so quali siano questi tasti in particolare, ma questa risposta mi ha risolto questa funzionalità quando i tasti su e giù non facevano la ricerca della cronologia mentre usavo tmux e il terminale st su X11.
razzintown,

1
@razzintown per st probabilmente hai set enable-keypad onla delchiave per funzionare correttamente ( faq ). Quando la tastiera è attiva, i tasti freccia sono "\C-[OA"e "\C-[OB"(e "\C-[OC"e "\C-[OD"). Ho postato una risposta qui sotto per chiarire questo.
MauricioRobayo

@Chris Questi sono i tasti freccia su e giù della modalità tastiera e i tasti freccia su e giù della modalità ANSI. Vedi la mia risposta qui sotto.
MauricioRobayo,

3

Se set enable-keypad onè nel tuo, ~/.inputrccome potrebbero fare alcuni utenti st ( terminale semplice senza succhiare ), tieni presente che i tasti freccia sono in modalità tastiera. Ubuntu viene fornito con questo utile /usr/share/doc/bash/inputrc.arrows:

# This file controls the behaviour of line input editing for
# programs that use the Gnu Readline library.
#
# Arrow keys in keypad mode
#
"\C-[OD"        backward-char
"\C-[OC"        forward-char
"\C-[OA"        previous-history
"\C-[OB"        next-history
#
# Arrow keys in ANSI mode
#
"\C-[[D"        backward-char
"\C-[[C"        forward-char
"\C-[[A"        previous-history
"\C-[[B"        next-history
#
# Arrow keys in 8 bit keypad mode
#
"\C-M-OD"       backward-char
"\C-M-OC"       forward-char
"\C-M-OA"       previous-history
"\C-M-OB"       next-history
#
# Arrow keys in 8 bit ANSI mode
#
"\C-M-[D"       backward-char
"\C-M-[C"       forward-char
"\C-M-[A"       previous-history
"\C-M-[B"       next-history

Quindi non sono sicuro se avrai bisogno di tutto, ma potrebbe non far male avere nel tuo ~/.inputrc:

# Arrow keys in keypad mode
"\C-[OA": history-search-backward
"\C-[OB": history-search-forward
"\C-[OC": forward-char
"\C-[OD": backward-char

# Arrow keys in ANSI mode
"\C-[[A": history-search-backward
"\C-[[B": history-search-forward
"\C-[[C": forward-char
"\C-[[D": backward-char

Questo è anche sullo stesso argomento: i miei tasti cursore non funzionano e anche questo xterm: tasti speciali


1

Con ohmyzsh, usa questo nel tuo .zshrc :

bindkey '^[OA' history-search-backward
bindkey '^[OB' history-search-forward

Per ricaricare, source ~/.zshrc o riavviare il terminale.

Fonte: https://superuser.com/a/418299/71680


Quello che ha funzionato per me su zsh è stata l'opzione data nel link sorgente: bindkey '\ e [A' storia-ricerca-indietro bindkey '\ e [B' storia-ricerca-avanti
Michael Massey

-3

Potrebbe essere necessario abilitare il completamento bash.

Dai un'occhiata

  • /etc/profile
  • /etc/bash.bashrc
  • ~/.bashrc

per vedere se uno dei file di cui sopra fonte /etc/bash_completion. vale a dire

. / Etc / bash_completion

Se /etc/bash___completionnon proviene da nessuno dei file sopra, sarà necessario aggiungerlo a uno di essi.

Se vuoi che tutti gli utenti bash sul tuo computer abbiano il completamento bash, procedi /etc/bash_completionda /etc/bash.bashrc.

Se sei solo tu che vuoi il completamento bash, fonte /etc/bash_completiondal tuo ~/.bashrc.


2
Il completamento della scheda è bello, ma non è lo stesso del ricordo della storia, che è ciò che il poster originale stava chiedendo.
effimero
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.