Hoàn thành dòng lệnh từ lịch sử lệnh


85

Vì vậy, tôi đã nhìn vào lịch sử và tại Ctrl+ R, nhưng chúng không phải là những gì tôi nghĩ rằng tôi biết. Có cách nào để tôi có thể nhập vào đầu lệnh và chuyển qua các trận đấu trong lịch sử của mình bằng một số phím tắt bash không?

# mysq(some shortcut key)

Đưa cho tôi:

# mysqldump  --add-drop-table -e -q -n -C -u 
(some shortcut key)
#  mysql -u ben.dauphinee -p

Lưu ý bên lề: Có '<kbd> Alt + Tab </ kbd>' cho tty's không có máy tính để bàn.
neverMind9

Câu trả lời:


91

Nhấn Ctrl+ Rsẽ mở tìm kiếm lịch sử đảo ngược. Bây giờ bắt đầu gõ lệnh của bạn, điều này sẽ cho trận đấu đầu tiên. Bằng cách nhấn Ctrl+ Rlần nữa (và một lần nữa), bạn có thể chuyển qua lịch sử.

mysq(Ctrl+R)

Sẽ cho:

mysqldump  --add-drop-table -e -q -n -C -u 

Ctrl+ Rlại:

mysql -u ben.dauphinee -p

5
Cảm ơn. Ngoài ra, Esc sẽ đặt lệnh đã chọn trên dòng lệnh của bạn mà không thực hiện, trong khi Enter sẽ chạy lệnh đã chọn.
Ben Dauphinee

3
Tôi thấy CTRL + E tốt hơn cho điều này so với ESC, vì thoát rất khó tiếp cận nhưng tôi đã nhấn CTRL + R, vì vậy E ở ngay đó. Điều này cũng định vị con trỏ ở cuối dòng, rất thuận tiện trong trường hợp tôi muốn thay đổi một cái gì đó (như tên tệp) mà tôi thấy là một trường hợp phổ biến.
Sorpigal

Đáng buồn thay, nó không hoạt động trên Cygwin
ATorras

2
Trên mac, ít nhất, dường như mysq(CTRL+R)(CTRL+R)không quay vòng qua các lệnh bắt đầu bằng "mysq". (CTRL+R)mysq(CTRL+R)Thay vào đó, bạn cần phải làm
BlueRaja - Danny Pflughoeft

62

Để mở rộng những gì Gilles đã nói, tôi có những điều sau đây .inputrcđể liên kết phím mũi tên lên / xuống history-search-backwardhistory-search-forward:

# Key bindings, up/down arrow searches through history
"\e[A": history-search-backward
"\e[B": history-search-forward
"\eOA": history-search-backward
"\eOB": history-search-forward

Chỉ cần nhập một cái gì đó (tùy chọn), sau đó nhấn phím mũi tên lên / xuống để tìm kiếm trong lịch sử cho các lệnh bắt đầu bằng những gì bạn đã nhập.

Để làm điều này .bashrcthay vì .inputrc, bạn có thể sử dụng:

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

3
những ràng buộc đó thuộc về ~ / .inputrc ... cảm ơn vì đã ủng hộ sự lười biếng của tôi.
Martin Zeitler

Điều đáng chú ý là '\ e' là rất quan trọng, ít nhất là đối với những người mới ra mắt. Chỉ cần gõ Ctrl-V để nhận tổ hợp phím cho lệnh của bạn sẽ không nói lên toàn bộ câu chuyện. Ví dụ: nhập Ctrl-V Meta-P (tức là) Alt-P) sẽ trả về ^ [p - để có hành vi bạn muốn, thay thế "^ [" bằng '\ e'.
MrMas

Đồng ý với @syslogic - đặt các dòng trong .inputrc và thả các liên kết và dấu ngoặc đơn.
MrMas

sao chép-dán này vào .inputrc trên osx, tôi nhận được: source ~ / .inputrc -bash: \ e [A :: lệnh không tìm thấy -bash: \ e [B :: lệnh không tìm thấy -bash: \ eOA :: lệnh không tìm thấy -bash: \ eOB :: lệnh không tìm thấy
Walrus the Cat

1
Xem superuser.com/questions/241187/how-do-i-reload-inputrc . Bạn không thể nguồn tập tin.
raychi

7

Bạn cũng có thể nhấn PAGEUPnút để tự động hoàn thành một lệnh. Về cơ bản nó tìm kiếm các bash_historytập tin.


Bạn phải bỏ ghi chú hai dòng vào /etc/inputrchoặc thêm hai dòng này vào $HOME/.inputrctệp của mình : "\e[5~": history-search-backward "\e[6~": history-search-forward
garlix

5

Bạn có thể sử dụng các lệnh readline history-search-backwardhistory-search-forwardđể điều hướng giữa các dòng lệnh bắt đầu bằng tiền tố bạn đã nhập. Cả hai lệnh này đều bị ràng buộc với các khóa trong cấu hình mặc định.

Zsh (zle) có các lệnh tương tự history-beginning-search-backwardhistory-beginning-search-forwardtheo mặc định cũng không bị ràng buộc với các khóa. Ngoài ra còn có history-search-backwardhistory-search-forward, sử dụng từ đầu tiên của lệnh hiện tại làm tiền tố để tìm kiếm bất kể vị trí con trỏ.


4

Nếu bạn muốn có một cái nhìn tổng quan về các lệnh rất giống nhau, bạn có thể lấy một danh sách với:

history|grep KEYSTRING

Sau đó sao chép và dán bằng nút giữa của chuột.

Rgds - Joe

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.