2009-06-23 11 views
114

Ho trovato un comando un paio di mesi fa, che ha reso la mia storia bash completamento automatico su ciò che è già in prima linea quando si preme la freccia:Come cambio il completamento della cronologia di bash per completare ciò che è già in linea?

$ vim fi 

Press

$ vim file.py 

I "Mi piacerebbe installarlo sul mio nuovo computer, perché consente di risparmiare un sacco di tempo quando mantiene una grande storia. Il problema è che non posso per la vita di me ricordare dove è stato menzionato e la lettura attraverso infiniti riferimenti bash e tutorial purtroppo non ha aiutato neanche.

Qualcuno conosce il comando?

risposta

193

probabilmente qualcosa come

 
# ~/.inputrc 
"\e[A": history-search-backward 
"\e[B": history-search-forward 

o equivalentemente,

 
# ~/.bashrc 
if [[ $- == *i* ]] 
then 
    bind '"\e[A": history-search-backward' 
    bind '"\e[B": history-search-forward' 
fi 

(l'istruzione if verifica per la modalità interattiva)

Normalmente, su e giù sono vincolati alle funzioni Readline previous-history e next-history rispettivamente. Preferisco legare PgUp/PgDn a queste funzioni, invece di spostare il normale funzionamento di Su/Giù.

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

Dopo aver modificato ~/.inputrc, riavviare la shell o utilizzare Ctrl +X, Ctrl +R per dirgli di rileggere ~/.inputrc.


A proposito, se siete alla ricerca di documentazione rilevante:

Bash utilizza The GNU Readline Library per il prompt della shell e la storia.

+0

Grazie per la risposta. Questo suona familiare, ma sfortunatamente non funziona per me. Inserirlo in .inputrc non cambia nulla e inserendolo in .bashrc impedisce alle frecce di fare qualsiasi cosa. Qualche idea? – blokkie

+0

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

+0

Ah, ho chiaramente digitato male i primi due esempi ... l'ultimo era corretto, però. Lo aggiusterò. – ephemient

-3

Potrebbe essere necessario abilitare il completamento di bash.

check

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

per vedere se uno qualsiasi dei file sopra Fonte /etc/bash_completion. vale a dire

 
. /etc/bash_completion 

Se /etc/bash___completion non proviene da uno qualsiasi dei file di cui sopra sarà necessario aggiungerlo a uno di loro.

Se si desidera che tutti gli utenti bash sulla macchina eseguano il completamento bash, fonte /etc/bash_completion da /etc/bash.bashrc.

Se sei solo tu a volere il completamento di bash, fonte /etc/bash_completion dal tuo ~/.bashrc.

+2

Il completamento del tab è bello, ma non identico al richiamo cronologico, che è quello che il poster originale chiedeva. – ephemient

1

Con ohmyzsh, utilizzare questo nella vostra .zshrc:

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

per ricaricare, source ~/.zshrc o rilanciare terminale.

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

+0

Ciò che ha funzionato per me su zsh era l'opzione indicata nel link sorgente: bindkey '\ e [A' storia-ricerca-indietro bindkey '\ e [B' cronologia ricerca-forward –

3

Aggiornamento .inputrc con il seguente:

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

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

Quali sono quelle chiavi? – Chris

+0

Non so quali siano questi tasti in particolare, ma questa risposta ha risolto questa funzionalità per me quando i tasti su e giù non eseguivano la ricerca cronologica mentre si utilizzava tmux e st su X11. – razzintown

+0

@razzintown per st probabilmente hai 'set enable-keypad on' perché il tasto' del' funzioni correttamente ([faq] (http://git.suckless.org/st/tree/FAQ)). Quando la tastiera è sui tasti freccia sono '" \ C- [OA "' e '" \ C- [OB "' (e '" \ C- [OC "' e '" \ C- [OD "'). Ho postato una risposta qui sotto per chiarire questo. – archemiro

0

Se set enable-keypad on è nel vostro ~/.inputrc come alcuni st (suckless simple terminal) gli utenti possono, essere consapevoli del fatto che le chiavi le frecce sono nel modo tastiera . Ubuntu è 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 male avere nella vostra ~/.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 il stesso argomento: My cursor keys do not work e anche questo xterm: special keys

Problemi correlati