iPython Giống như lịch sử lệnh cho Shell


24

Đối với những người không lập trình python trên ubfox, ipython là một vỏ python trên steroid, nhưng nó có tính năng tuyệt vời này là nó không chỉ tự động hoàn thành dựa trên các tên đã biết (ví dụ như cách bash thực hiện khi bạn nhấn tab), nhưng nếu bạn bắt đầu nhập một lệnh và nhấn lên, nó sẽ không cuộn qua toàn bộ lịch sử (như bash) mà chỉ thông qua các lệnh gần đây bắt đầu với cùng một chuỗi các lệnh.

Vì vậy, nếu bạn đã thực hiện một số lệnh dài như scp -r -P 8000 -l user server.com:~/dir/to/copy ./theo sau bởi một số lệnh khác. Nếu bạn bắt đầu nhập scpvà nhấn lên, bash sẽ hiển thị lệnh được hiển thị trước đó thay vì chỉ cuộn qua toàn bộ lịch sử.

Có một phần mở rộng như thế này cho bash? hoặc có bất kỳ vỏ cung cấp loại tính năng này?

Câu trả lời:


26

Bash cũng có tính năng đó, nhưng nó không được bật theo mặc định. Bạn có thể liên kết nó với con trỏ lên / xuống bằng cách dán cái này vào ~/.inputrc:

"\e[A": history-search-backward
"\e[B": history-search-forward

Tôi thích liên kết nó với Ctrl+ lên / xuống thay vào đó:

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

chỉnh sửa: Để bảo toàn ctrl+leftctrl+rightđể di chuyển qua lại trong toàn bộ các từ, cũng bao gồm các dòng này trong ~/.inputrctệp:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

Sử dụng mẹo này, bây giờ tôi không thể sử dụng Ctrl + trái / phải trong thiết bị đầu cuối để chuyển sang từ tiếp theo / trước đó, điều này làm hỏng toàn bộ mục đích của tôi. Có lẽ có cách giải quyết?
zetah

@zetah Tôi đã chỉnh sửa thành câu trả lời cho cách giải quyết của tôi đối với việc chuyển từ
wim

1
Để giữ tất cả các mặc định, bạn cũng có thể thêm $include /etc/inputrc, tốt nhất là trên dòng đầu tiên.
Tulio Casagrande

9

Hãy thử nhấn Ctrl+ Rvà gõ một vài chữ cái. Nó hoạt động theo thứ tự ngược lại là tốt.


6

Và đừng quên các phím tắt mở rộng lịch sử tuyệt vời trong bash. 1

Tôi đang đăng một số trích đoạn từ trang chủ, trong trường hợp bạn không xăm chúng trên cánh tay (hoặc ghi nhớ chúng).

   Event Designators  
       An event designator is a reference to a command line entry in the  his
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for `!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

Tôi thường xuyên sử dụng khả năng để chỉ 'từ' cuối cùng của lệnh trước đó. Ví dụ,

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

Trong cả hai trường hợp ở đây, các !$trận đấu /foo/shmoo/adir.horribilus.foo.


1 ... được lấy từ csh. Để giảm thiểu phạm vi trộm cắp tính năng của bash, trang bash man nói

   The shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

Vì vậy, nó "tương tự". Bất kỳ điều này có thể đột nhập cshhoặc tcsh. Hoặc bất cứ điều gì csh hậu duệ bạn không sử dụng do thực tế là nó không tuyệt vời như bash.


0

Có một cách khác tương tự như những gì @ ak2 đã đề cập ở trên , nhưng bạn không phải tạo tệp .inputrc mới.

Thay vào đó, nếu bạn có quyền sudo, bạn có thể kích hoạt tính năng này trong tệp / etc / inputrc. Trong tệp này là các cài đặt bàn phím khác nhau bao gồm tính năng tìm kiếm lịch sử (ít nhất là 18.04). Đoạn trích từ / etc / inputrc là:

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

Chỉ cần bỏ ghi chú hai dòng dưới cùng bằng trình chỉnh sửa tệp sudo (ví dụ: $ sudo vim) và phiên cuối mới sẽ có tính năng tìm kiếm lịch sử (cho tất cả người dùng).

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.