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?


133

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

$ vim fi

nhấn

$ vim file.py

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

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

Câu trả lời:


222

Có lẽ là một cái gì đó như

# ~ / .inputrc
"\ e [A": history-search-backward
"\ e [B": lịch sử tìm kiếm chuyển tiếp

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

# ~ / .bashrc
nếu [[$ - == * i *]]
sau đó
    liên kết '"\ e [A": history-search-backward'
    liên kết '"\ e [B": history-search-Forward'
fi

(câu lệnh if kiểm tra chế độ tương tác)

Thông thường, Lên và Xuống được liên kết với các chức năng Readline previous-historynext-historytương ứng. Tôi thích liên kết PGUp / PGDn với các chức năng này, thay vì thay thế hoạt động bình thường của Lên / Xuống.

# ~ / .inputrc
"\ e [5 ~": lịch sử tìm kiếm-lạc hậu
"\ e [6 ~": lịch sử tìm kiếm chuyển tiếp

Sau khi bạn sửa đổi ~/.inputrc, hãy khởi động lại trình bao của bạn hoặc sử dụng Ctrl+ X, Ctrl+ Rđể yêu cầu đọc lại ~/.inputrc.


Nhân tiện, nếu bạn đang tìm tài liệu liên quan:

Bash sử dụng Thư viện GNU Readline cho dấu nhắc và lịch sử shell.


Cảm ơn câu trả lời của bạn. Điều này nghe có vẻ quen thuộc, nhưng thật không may 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ì. Có ý kiến ​​gì không?
blokkie

Đừng bận tâm. lịch sử hoàn thành- * không tồn tại; chỉ tồn tại các chức năng tìm kiếm lịch sử- *. Cảm ơn!
blokkie

À, tôi rõ ràng đã nhầm hai ví dụ đầu tiên ở đó ... tuy nhiên cái cuối cùng là đúng. Tôi sẽ sửa nó lên.
ephemient

@ user1037114: đây là một câu hỏi trong chính nó, bạn nên hỏi nó trên bài đăng của riêng mình.
kamaradclimber

Điều này đã cố định các mũi tên lên / xuống cho tôi bằng chế độ vi trong bash. Lưu ý, tôi phải nhấn "Esc" (chế độ lệnh) để nó hoạt động.
Chris

5

Cập nhật .inputrc bằng cách sau:

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

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

4
Những chìa khóa đó là gì?
Chris

Tôi không biết các phím này cụ thể là gì, 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ị đầu cuối trên X11.
razzintown 22/03/2016

1
@razzintown cho st bạn có thể có set enable-keypad oncho delchìa khóa để làm việc đúng cách ( faq ). Khi bàn phím nằm trên các phím mũi tên là "\C-[OA""\C-[OB"( "\C-[OC""\C-[OD"). Tôi đã đăng một câu trả lời dưới đây để làm rõ điều này.
MauricioRobayo

@Chris Đó là các phím mũi tên lên và xuống ở chế độ bàn phím và chế độ ANSI lên và xuống các phím mũi tên. Xem câu trả lời của tôi dưới đây.
MauricioRobayo

3

Nếu set enable-keypad onbạn ở trong ~/.inputrcmột số người dùng ( thiết bị đầu cuối đơn giản không cần thiết ) có thể, hãy lưu ý rằng các phím mũi tên ở chế độ bàn phím. Ubuntu vận chuyển với hữu ích này /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

Vì vậy, tôi không chắc chắn nếu bạn cần tất cả, nhưng có thể không đau 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à cùng một chủ đề: Các phím con trỏ của tôi không hoạt độngxterm này : các phím đặc biệt


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 ~/.zshrchoặc khởi chạy lại thiết bị đầu cuối.

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


Điều làm việc cho tôi trên zsh là tùy chọn được đưa ra trong liên kết nguồn: bindkey '\ e [A' history-search-backward bindkey '\ e [B' history-search-Forward
Michael Massey

-3

Bạn có thể cần phải kích hoạt hoàn thành bash.

Kiểm tra

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

để xem nếu bất kỳ nguồn tập tin trên /etc/bash_completion. I E

. / etc / bash_completion

Nếu /etc/bash___completionkhông có nguồn gốc từ bất kỳ tệp nào ở trên, bạn sẽ cần thêm nó vào một trong số chúng.

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

Nếu đó chỉ là bạn, người muốn hoàn thành bash, hãy lấy nguồn /etc/bash_completiontừ ~/.bashrc.


2
Hoàn thành tab là tốt, nhưng không giống như thu hồi lịch sử, đó là những gì người đăng ban đầu đã yêu cầu.
ephemient
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.