Tìm kiếm một lệnh trước đó có cùng tiền tố khi tôi nhấn Up tại dấu nhắc shell


19

Đến từ một thế giới FreeBSD, tôi muốn làm cho thiết bị đầu cuối Linux hoạt động như FreeBSD, đặc biệt là phiên bản 9.1, về cơ bản khi bạn nhập cdvào thiết bị đầu cuối và đẩy mũi tên "lên", bạn có thể duyệt tất cả các lệnh trong lịch sử bắt đầu từ cdđó đạt được nhiều thời gian

Tôi không biết cách bật tính năng này trong Linux Debian hoặc CentOS, điều này buộc tôi phải nhập toàn bộ, ai đó có thể vui lòng giúp đỡ.


7
Đó là một chức năng của vỏ, không phải là thiết bị đầu cuối. Bạn đang sử dụng shell nào trong FreeBSD? Bạn có thể có được trình bao (hoặc tương tự) cho Linux.
cjm

Tôi đang sử dụng vỏ tcsh.
Abdelilah Benaou

2
Tôi đang sử dụng tcsh trong OS X và không có hành vi trông có vẻ tiện dụng này Sau một số tìm kiếm, tôi thấy tôi có thể kích hoạt nó bằng cách đưa bindkey -k (up|down) history-search-(back|for)wardvào .tcshrc như được mô tả ở đây . Mát mẻ!
Garrett Albright

Câu trả lời:


34

Thêm vào như sau ~/.inputrc:

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

Giải trình

~/.inputrc là tập tin cấu hình cho GNU . Nhiều shell, bao gồm bashtcshsử dụng readline để chỉnh sửa dòng lệnh. Hai dòng trên sẽ cho biết đường dẫn để gọi chức năng tìm kiếm lịch sử của nó khi gặp các chuỗi thoát cho phím mũi tên lên ( \e[A) và phím mũi tên xuống ( \e[B).


Tôi muốn thêm F12 để đặt từ cuối cùng của dòng cuối cùng vào cuối lệnh hiện tại. Last wordthường là một con đường mà tôi muốn thử trong những câu sáo rỗng khác nhau. Và Shift F12 để đưa tôi trở lại chỉnh sửa toàn bộ dòng cuối cùng từ đầu. ~/.inputrclà một công cụ tiện dụng.
jalanb

Các phím Shift F12 một đòi hỏi vi chế độ .
jalanb

6

Điều gì đang xảy ra là FreeBSD và Linux sử dụng các shell khác nhau theo mặc định. FreeBSD mặc định là tcsh , có tính năng tương tác tốt hơn bash trước đây (nhưng bash đã bắt kịp) nhưng các tính năng kịch bản kém hơn rõ rệt .

Cách đơn giản nhất để có được môi trường mà bạn đã từng sử dụng là chuyển vỏ của bạn sang tcsh trên Linux. Với điều kiện tcsh được cài đặt toàn hệ thống (nếu không, hãy yêu cầu quản trị viên hệ thống của bạn cài đặt nó), chạy chsh -s tcshđể thay đổi trình bao mặc định của bạn.

Ngoài ra, bạn có thể thiết lập bash để sử dụng lệnh này. Theo mặc định, các mũi tên UpDownđiều hướng trong số tất cả các lệnh trong lịch sử, không chỉ các lệnh bắt đầu bằng tiền tố bạn đã nhập. Để thay đổi hành vi này thành hành vi bạn đã quen, hãy đặt các dòng sau vào tệp khởi tạo của bash, .bashrctrong thư mục chính của bạn. Hoặc là chạy. ~/.bashrc hoặc bắt đầu một shell mới để đọc lại tệp khởi tạo.

bind '"\eOA": history-search-backward'
bind '"\e[A": history-search-backward'
bind '"\eOB": history-search-forward'
bind '"\e[B": history-search-forward'

Trình tự thoát là những gì thiết bị đầu cuối của bạn gửi đến shell khi bạn nhấn phím mũi tên. Upcó thể là \eOA(thoát O,, A) hoặc\e[A tùy thuộc vào thiết bị đầu cuối của mình, và tương tự cho Down.

Theo mặc định, bash cung cấp các ràng buộc khóa khác nhau để tìm kiếm lịch sử lệnh. Bạn có thể nhấn Ctrl+ R, sau đó nhập một số ký tự để tìm kiếm lệnh chứa chuỗi con này ở bất cứ đâu trên dòng. Nhấn Ctrl+ Sđể đi tiếp thay vì lùi. Tìm kiếm là tăng dần (tức là theo kiểu bạn); Alt+ PAlt + Ncung cấp cho bạn một tìm kiếm không gia tăng.

Thay vì bash và tcsh, bạn có thể chuyển sang zsh, có một số tính năng gọn gàng không có trong các shell khác . Zsh có Ctrl+ RCtrl+ Stheo mặc định giống như bash. Để có được UpDowngiống như bạn đã có trong tcsh, hãy đặt các dòng sau vào ~/.zshrc:

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

Nếu bạn muốn sử dụng cùng một vỏ ở mọi nơi, bạn cũng có thể sử dụng bash hoặc zsh trên FreeBSD, miễn là cổng được cài đặt (một lần nữa, hãy hỏi quản trị viên hệ thống của bạn).


1

tcshcó sẵn cho hầu hết các bản phân phối Linux. Hãy thử cài đặt tcshgói, sau đó chạy chsh -s /bin/tcshđể biến nó thành vỏ mặc định của bạn.


1
Hoặc bạn có thể xem xét chuyển sang bash (tôi đã làm).
Keith Thompson

1

Các câu trả lời khác giải quyết nó, nhưng nếu bạn muốn nhiều hơn, hãy xem https://github.com/zsh-users/zsh-history-subopes-search

Prezto ( https://github.com/sorin-ionescu/prezto ) cũng có đầy đủ các tính năng zsh.


Cảm ơn câu trả lời của bạn, bằng cách này, tôi vẫn không thấy những lợi ích nào có zsh so với bash hoặc tcsh?
Abdelilah Benaou

1
Hum, bạn có thể làm khá nhiều thứ cơ bản trong tất cả các shell này. Tôi sử dụng zsh vì gói prezto được duy trì khá tốt (có thể là công cụ thay đổi trò chơi lớn), dấu nhắc đúng (là tính năng độc quyền) và vì nó cảm thấy bóng bẩy hơn bash (phối ngẫu và công cụ).
Fuad Saud
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.