2009-06-23 22 views
114

Tôi tìm thấy một lệnh một vài tháng trước đây mà làm nên lịch sử bash của tôi tự động hoàn tất vào những gì đã có trên các dòng khi nhấn vào mũi tên lên:Làm cách nào để thay đổi hoàn thành lịch sử bash để hoàn thành những gì đã có trên dòng?

$ vim fi 

Nhấn

$ vim file.py 

tôi Tôi muốn thiết lập điều này trên máy tính mới của tôi, bởi vì nó tiết kiệm rất nhiều thời gian khi giữ một lịch sử lớn. Vấn đề là tôi không thể cho cuộc sống của tôi nhớ nơi nó đã được đề cập và đọc qua tài liệu tham khảo bash vô tận và hướng dẫn tiếc là đã không giúp đỡ một trong hai.

Có ai biết lệnh này không?

Trả lời

193

Có lẽ cái gì đó như

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

hoặc tương đương,

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

(nếu kiểm tra tuyên bố cho chế độ tương tác)

Thông thường, Up and Down đang bị ràng buộc vào các chức năng Readline previous-historynext-history tương ứng. Tôi thích ràng buộc PgUp/PgDn với các chức năng này, thay vì thay đổi hoạt động bình thường của Lên/Xuống.

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

Sau khi bạn sửa đổi ~/.inputrc, khởi động lại vỏ của bạn hoặc sử dụng Ctrl +X, Ctrl +R nói với nó để tái đọc ~/.inputrc.


Bằng cách này, nếu bạn đang tìm kiếm tài liệu liên quan:

Bash sử dụng The GNU Readline Library cho dấu nhắc shell và lịch sử.

+0

Cảm ơn câu trả lời của bạn. Điều này nghe có vẻ quen thuộc, nhưng tiếc là không làm việc cho tôi. Đặt nó vào .inputrc không thay đổi gì và đặt nó vào .bashrc ngăn các mũi tên làm bất cứ điều gì. Bất kỳ ý tưởng? – blokkie

+0

Đừng bận tâm. history-complete- * không tồn tại; chỉ tồn tại các hàm history-search- *. Cảm ơn! – blokkie

+0

Ah, tôi đã nhầm lẫn rõ ràng hai ví dụ đầu tiên ở đó ... cái cuối cùng là chính xác. Tôi sẽ sửa lỗi đó. – ephemient

-3

Bạn có thể cần phải bật hoàn thành bash.

Kiểm tra

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

để xem nếu một trong các nguồn tập tin trên /etc/bash_completion. tức là

 
. /etc/bash_completion 

Nếu không có bất kỳ tệp nào ở trên, bạn cần phải thêm nó vào một trong các tệp đó.

Nếu bạn muốn tất cả người dùng bash trên máy của bạn có hoàn thành bash, nguồn /etc/bash_completion từ /etc/bash.bashrc.

Nếu đó chỉ là bạn muốn hoàn thành bash, hãy mã số /etc/bash_completion từ số ~/.bashrc của bạn.

+2

Hoàn thành tab là tốt đẹp, nhưng không giống như thu hồi lịch sử, đó là những gì các poster ban đầu đã được yêu cầu. – ephemient

1

Với ohmyzsh, sử dụng này trong thư mục zshrc:

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

Để tải lại, source ~/.zshrc hoặc relaunch thiết bị đầu cuối.

Nguồn: https://superuser.com/a/418299/71680

+0

Điều gì làm việc cho tôi trên zsh là tùy chọn được cung cấp trong liên kết nguồn: bindkey '\ e [A' history-search-backward bindkey '\ e [B' history-search-forward –

3

Cập nhật .inputrc như sau:

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

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

Các phím đó là gì? – Chris

+0

Tôi không biết các phím này là gì đặc biệt, nhưng câu trả lời này đã khắc phục chức năng này cho tôi khi các phím lên và xuống không thực hiện tìm kiếm lịch sử trong khi sử dụng tmux và thiết bị cuối trên X11. – razzintown

+0

@razzintown cho st có thể bạn đã đặt 'enable-keypad on' cho phím' del' hoạt động đúng ([faq] (http://git.suckless.org/st/tree/FAQ)). Khi bàn phím trên các phím mũi tên là '" \ C- [OA "' và '" \ C- [OB "' (và '" \ C- [OC "' và '" \ C- [OD "'). Tôi đã đăng một câu trả lời dưới đây để làm rõ điều này. – archemiro

0

Nếu set enable-keypad on là trong ~/.inputrc của bạn như một số (suckless simple terminal) người dùng có thể st, lưu ý rằng các mũi tên phím trong chế độ bàn phím . tàu Ubuntu với hữu ích /usr/share/doc/bash/inputrc.arrows này:

# 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 

Vì vậy, tôi không chắc chắn nếu bạn sẽ cần tất cả, nhưng nó có thể không làm tổn thương để có trong bạn ~/.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 

Đây cũng là trên cùng một chủ đề: My cursor keys do not work và cũng có thể điều này xterm: special keys

Các vấn đề liên quan