it-swarm-vi.com

Cách tốt nhất để tìm kiếm trong lịch sử của Shell

Có cách nào tốt hơn để tìm kiếm tệp lịch sử của tôi cho một lệnh hơn grep không? Tôi có một số ý tưởng về việc lệnh bắt đầu như thế nào, nhưng tôi không biết nó đã lùi xa bao nhiêu trong lịch sử.

pdate : trước đây là zsh cụ thể nhưng do các câu trả lời chồng chéo nên hãy trả lời cho bất kỳ Shell (hoặc chế độ (vi/emacs)) nào ở đây, chỉ cần lưu ý nếu nó cụ thể.

82
xenoterracide

Ctrl+R thường là cách tốt nhất, vì người mô tả đã nói . Bạn cũng có thể dùng !string, chạy lệnh gần đây nhất bắt đầu bằng string hoặc !?string?, chạy lệnh gần đây nhất chứa string.

(Tôi nghĩ đó là thứ duy nhất có liên quan đến câu hỏi này, nhưng tôi đã trình bày nhiều hơn về các lệnh lịch sử trong câu trả lời này )

78
Michael Mrozek

Khi sử dụng Bash, gõ Control-R và sau đó bắt đầu gõ. Đánh máy Control-R lặp đi lặp lại sau khi nhập một số văn bản sẽ đưa bạn trở lại trong các dòng lệnh phù hợp.

32
grendel

Không chắc chắn nếu điều này sẽ giúp, nhưng tôi thích sử dụng ctrl-r và sau đó bắt đầu gõ lệnh. Nó sẽ đi qua lịch sử của bạn và giới thiệu bạn với trận đấu đầu tiên. Để chuyển qua các trận đấu chỉ cần nhấn ctrl-r lần nữa.

18
decriptor

Nếu bạn thêm phần sau vào ~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

và khởi động lại Bash, bạn có thể bắt đầu nhập và sau đó sử dụng Page Up và Page Down để di chuyển lùi và chuyển tiếp qua lịch sử của các dòng bắt đầu với cùng một tiền tố bạn vừa nhập.

(Một số có thể thích sử dụng \e[A\e[B, sẽ thay thế bình thường Up và Down hành động thay vì ràng buộc các khóa mới.)

17
ephemient

Lời nhắc tương tác được gọi bởi Ctrl-R, đã được đề cập, là cách thuận tiện nhất. Ngoài ra, nó phổ biến để ánh xạ lại Up và Down Các phím mũi tên để tìm kiếm lịch sử cho tiền tố hiện tại trên dòng lệnh, tuy nhiên điều này đòi hỏi một số thay đổi thành ~/.inputrc tập tin .

Giải pháp cổ điển và ít tương tác là sử dụng mở rộng lịch sử Shell. Đánh máy

!foo

sẽ thực thi lệnh cuối cùng bắt đầu bằng foo

!?foo

sẽ thực thi lệnh cuối cùng chứa foo. Thông tin thêm về mở rộng lịch sử có thể được tìm thấy trong hướng dẫn tham khảo Bash , giả sử Shell của bạn là Bash hoặc tương thích.

9
Adam Byrtek

Nếu bạn thêm stty -ixon cho bạn ~/.bashrc tập tin rồi Ctrl-s sẽ đi theo hướng ngược lại để Ctrl-r.

Nếu bạn gõ !ls sau đó bash sẽ xem qua lịch sử của bạn và thực hiện lệnh gần đây nhất bắt đầu bằng "ls"

3
Kevin M

có thể là zsh cụ thể. Trong nghiên cứu câu trả lời này Tôi tìm thấyvi-history-search-backward cho phép một người tìm kiếm với / trong chế độ vi (mà tôi không đề cập đến tôi đã ở) bạn có thể sử dụng n và N để tìm kiếm tiến và lùi tương ứng (sau khi nhấn enter).

2
xenoterracide

Tôi ngạc nhiên khi điều này không được đề cập - nhưng bạn có thể chọn chế độ vi trong bash hoặc ksh bằng cách thực hiện:

set -o vi

... hoặc sử dụng nội dung này làm nội dung của ~/.inputrc (for GNU readline được sử dụng trong các chương trình như bash):

set editing-mode vi

Sau đó, bạn có thể sử dụng Esc để nhập chế độ lệnh và sử dụng k quay trở lại trong lịch sử và j Tiến lên phía trước. Bạn cũng có thể tìm kiếm bằng / để tìm kiếm bình thường, và ? để tìm kiếm ngược lại.

Nếu bạn dùng ~/.inputrc, thì điều này sẽ hoạt động không chỉ trong GNU bash mà trong bất kỳ thứ gì sử dụng GNU readline như CLISP và có thể các chương trình như lệnh MySQL Shell và thích Vỏ CPAN.

2
Mei

Để chuyển tiếp khi sử dụng tìm kiếm ngược (với lệnh Ctrl-R):

  1. Mở tệp .bashrc của bạn:
    [.__.] Sudo gedit ~/.bashrc

  2. thêm dòng này (chữ "f" có thể được thay thế bằng dòng khác chưa được sử dụng bởi hệ thống)

    bind '"\C-f": forward-search-history' 
    
  3. Đóng tệp của bạn và cập nhật .bashrc (hoặc mở một thiết bị đầu cuối khác) bằng lệnh:
    [.__.] source ~/.bashrc hoặc là . ~/.bashrc

NGAY BÂY GIỜ BẠN CÓ THỂ CHUYỂN ĐỔI TRONG LỊCH SỬ VỚI SHORTCUT: Ctrl + f

Làm việc trên Ubuntu 18.04 LTS

2
Franklin TCHATATH

Tôi sử dụng sau hai phần lớn thời gian.
[.__.] Nhưng xin lưu ý rằng cả hai đều tìm kiếm ký tự bắt đầu.

  1. tcsh: gõ vài ký tự của lệnh rồi Esc+p nó sẽ hiển thị lệnh trước bắt đầu bằng chuỗi phím đó, nhấn lại, nó sẽ hiển thị một lệnh khác.
  2. ksh: sử dụng fc -e - <SPACE><first few char for your previous > cái này sẽ chạy lệnh cuối cùng khớp với chuỗi đó.

Tôi đã không thể tìm thấy một cái gì đó như Ctrl+R trong Bash cho ksh và tcsh của tôi.

1
Hemant

Có một cách để sử dụng Ctrl-R với tcsh. Thêm phần sau vào ~/.cshrc:

bindkey "^r" i-search-back (Đó chỉ là dấu hiệu dấu mũ và chữ r)

Đó là tiết kiệm thời gian lớn nhất đối với tôi.

1
Alain

câu trả lời tương tự với @ephemient, nhưng bạn có thể đưa vào .bashrc của mình

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-foward'

và nhập một phần của cụm từ, sau đó sử dụng mũi tên lên/xuống để duyệt các tùy chọn gần đây nhất phù hợp. Đây là hành vi mặc định của matlab.

Đối với hầu hết mọi người, nếu bạn muốn chuyển các cài đặt của mình sang một hệ thống mới, việc nhớ lại chỉ là ~/.bashrc sau đó bạn phải chộp lấy điều đó ~/.inputrc

1
Matt S.

Có nó tồn tại, ít nhất là nếu bạn đang sử dụng zsh. Chỉ cần bắt đầu nhập lệnh và sau đó nhấn M-p (ESCp) và nó sẽ tìm thấy các lệnh trước phù hợp với những gì bạn đã nhập. Nhấn nó một lần nữa để tìm trận đấu tiếp theo.

0
dkagedal