Halihazırda olanları tamamlamak için bash geçmişi tamamlamayı nasıl değiştirebilirim?


133

Birkaç ay önce, yukarı ok tuşuna basarken bash geçmişimi zaten satırda olana göre otomatik olarak tamamlayan bir komut buldum:

$ vim fi

Basın

$ vim file.py

Bunu yeni bilgisayarımda kurmak istiyorum, çünkü büyük bir geçmişi saklarken çok zaman kazandırıyor. Sorun şu ki, hayatım boyunca nerede bahsedildiğini hatırlayamıyorum ve sonsuz bash referansları ve öğreticiler aracılığıyla okumak ne yazık ki de yardımcı olmadı.

Komutu bilen var mı?

Yanıtlar:


223

Muhtemelen şöyle bir şey

# ~ / .inputrc
"\ e [A": geçmiş-geriye arama
"\ e [B": geçmiş-ileri arama

Veya eşdeğer olarak,

# ~ / .bashrc
eğer [[$ - == * i *]]
sonra
    bind '"\ e [A": geçmiş-geriye arama'
    bind '"\ e [B": geçmiş-ileri arama'
fi

(if ifadesi etkileşimli modu kontrol eder)

Normalde, Yukarı ve Aşağı Readline işlevlerine bağlı previous-historyve next-historysırasıyla. Yukarı / Aşağı normal çalışmasını değiştirmek yerine PgUp / PgDn'yi bu işlevlere bağlamayı tercih ederim.

# ~ / .inputrc
"\ e [5 ~": geçmiş-geriye arama
"\ e [6 ~": geçmiş-ileri arama

Değiştirdikten sonra ~/.inputrckabuğunuzu yeniden başlatın veya yeniden okumasını söylemek için Ctrl+ X, Ctrl+ Rkullanın ~/.inputrc.


Bu arada, ilgili dokümanları arıyorsanız:

Bash , kabuk istemi ve geçmişi için GNU Readline Library'yi kullanır .


Cevabınız için teşekkürler. Bu tanıdık geliyor ama maalesef benim için çalışmıyor. .İnputrc içine yerleştirmek hiçbir şeyi değiştirmez ve .bashrc'ye koymak okların hiçbir şey yapmasını engeller. Herhangi bir fikir?
blokkie

Boşver. history-complete- * mevcut değildir; yalnızca geçmiş-arama- * işlevleri vardır. Teşekkürler!
blokkie

Ah, ilk iki örneği açıkça yanlış yazdım ... sonuncusu doğruydu. Bunu düzeltirim.
ephemient

@ user1037114: Bu kendi içinde bir soru, kendi yazısında sormalısın.
kamaradclimber

Bu, bash'ta vi modunu kullanarak benim için yukarı / aşağı okları düzeltti. Not, çalışması için "Esc" (komut modu) vurmak zorunda.
Chris

5

.İnputrc dosyasını aşağıdakilerle güncelleyin:

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

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

4
Bu anahtarlar neler?
Chris

Bu tuşların özellikle ne olduğunu bilmiyorum, ancak X11'de tmux ve st terminalini kullanırken yukarı ve aşağı tuşlar geçmiş arama yapmadığında bu cevap benim için bu işlevi düzeltti.
razzintown

1
@razzintown st için muhtemelen düzgün çalışması set enable-keypad oniçin delanahtar var ( SSS ). Tuş takımı açıkken ok tuşları "\C-[OA"ve "\C-[OB"(ve "\C-[OC"ve "\C-[OD") tuşlarına sahiptir . Bunu açıklığa kavuşturmak için bir cevap gönderdim.
MauricioRobayo

@Chris Bunlar tuş takımı modu yukarı ve aşağı ok tuşları ve ANSI modu yukarı ve aşağı ok tuşları. Aşağıdaki cevabımı gör.
MauricioRobayo

3

Eğer set enable-keypad oniçinde aşağıdadır ~/.inputrcbazı st (aynı suckless basit terminali ) kullanıcıları, oklar tuşları tuş takımı modunda farkında olabilir. Ubuntu bu kullanışlı ile birlikte gelir /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

Tüm gerekir, ancak Gözlerinde farklı olması zarar mı diye değil eminim Yani ~/.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

Bu aynı konuyla ilgilidir: İmleç tuşlarım çalışmıyor ve bu xterm: özel tuşlar


1

Ohmyzsh ile bunu .zshrc dosyasında kullanın :

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

source ~/.zshrcTerminali yeniden yüklemek veya yeniden başlatmak için.

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


Benim için zsh'ta çalışan şey, kaynak bağlantıda verilen seçenekti: bindkey '\ e [A' geçmiş-geriye arama bindkey '\ e [B' geçmiş-ileri arama
Michael Massey

-3

Bash tamamlamayı etkinleştirmeniz gerekebilir.

Kontrol

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

yukarıdaki dosyalardan herhangi birinin kaynak olup olmadığını görmek için /etc/bash_completion. yani

. / Etc / bash_completion

Eğer /etc/bash___completionyukarıdaki dosyalardan biriyle kaynaklı değildir bunlardan birine eklemek gerekecektir.

Makinenizdeki tüm bash kullanıcılarının bash tamamlanmalarını istiyorsanız, kaynağından /etc/bash_completionkaynaklayın /etc/bash.bashrc.

Eğer bash tamamlanmasını isteyen sadece sizseniz, kaynağınızdan /etc/bash_completionalın ~/.bashrc.


2
Sekmenin tamamlanması güzel, ancak orijinal afişin istediği şey, tarih hatırlama ile aynı değil.
ephemient
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.