Có hướng dẫn nào để lấy danh sách các phím tắt bash không?


21

Có nhiều phím tắt mà tôi sử dụng trong khi tương tác với dòng lệnh bash để làm cho công việc dễ dàng và nhanh hơn.

Như:

  • ctrl+ L: để xóa màn hình
  • ctrl+ a/ ctrl+ e: để di chuyển bắt đầu / kết thúc dòng
  • ctrl+ r: để tìm kiếm lịch sử của lệnh chỉ cần viết vài ký tự
  • ctrl+ u/ ctrl+ y: để cắt / dán dòng.

và nhiều hơn nữa, mà tôi muốn biết và chắc chắn sẽ hữu ích để tìm hiểu.

Tôi muốn biết từ đâu tôi có thể lấy danh sách các phím tắt này trong Ubuntu? Có hướng dẫn nào liệt kê các phím tắt này không?

CHÚ THÍCH:

Tôi muốn có được danh sách các phím tắt và hành động của họ ở một nơi. Nó thực sự sẽ giúp học được nhiều trong số chúng trong một khoảng thời gian nhỏ. Vậy có cách nào để chúng ta có được danh sách như thế này không? Mặc dù cảm ơn câu trả lời được đưa ra ở đây ..

Câu trả lời:


22

Mặc định là trong man bash, cùng với các chi tiết về những gì mỗi lệnh làm. Xem câu trả lời của BroSlow nếu bạn đã thay đổi các ràng buộc chính của mình.

   Commands for Moving
       beginning-of-line (C-a)
              Move to the start of the current line.
       end-of-line (C-e)
              Move to the end of the line.
       forward-char (C-f)
              Move forward a character.
       backward-char (C-b)
              Move back a character.
       forward-word (M-f)
              Move forward to the end of the next word.  Words are composed of alphanumeric characters (letters and digits).
       backward-word (M-b)
              Move back to the start of the current or previous word.  Words are composed of alphanumeric characters (letters and digits).
       shell-forward-word
              Move forward to the end of the next word.  Words are delimited by non-quoted shell metacharacters.
       shell-backward-word
              Move back to the start of the current or previous word.  Words are delimited by non-quoted shell metacharacters.
       clear-screen (C-l)
              Clear the screen leaving the current line at the top of the screen.  With an argument, refresh the current line without clearing the screen.

...

       reverse-search-history (C-r)
              Search backward starting at the current line and moving `up' through the history as necessary.  This is an incremental search.

...

       unix-line-discard (C-u)
              Kill backward from point to the beginning of the line.  The killed text is saved on the kill-ring.

...

       yank (C-y)
          Yank the top of the kill ring into the buffer at point.

CHỈNH SỬA

Các lệnh này đều nằm trong một phần liền kề của hướng dẫn, vì vậy bạn có thể duyệt nó từ đó Commands for Moving. Ngoài ra, bạn có thể lưu toàn bộ phần này vào một tệp văn bản với

man bash | awk '/^   Commands for Moving$/{print_this=1} /^   Programmable Completion$/{print_this=0} print_this==1{sub(/^   /,""); print}' > bash_commands.txt

(NB này in toàn bộ phần, bao gồm các lệnh không có phím tắt mặc định.)

Giải thích về mã awk

  • Trong lần xuất hiện (duy nhất) của Commands for Moving, đặt biến print_thisthành 1.
  • Trong lần xuất hiện (duy nhất) của phần Programmable Completion, đây là phần sau, đặt biến thành 0.
  • Nếu biến là 1, thì hãy loại bỏ khoảng trắng hàng đầu (ba khoảng trắng) và in dòng.

1
Đây là các phím tắt mặc định, không nhất thiết là các phím tắt trên hệ thống thực tế của OP. bind -Psẽ chính xác hơn.

@BroSlow Nhận xét tốt. Tôi vẫn nghĩ rằng có công trong câu trả lời của tôi, mặc dù, vì nó dài dòng hơn về những gì các lệnh làm. Nếu bạn viết nó như một câu trả lời, tôi sẽ +1.
Sparhawk

@Sparhawk: +1 cho câu trả lời của bạn. Tôi đang tìm danh sách các phím tắt ở một nơi. Vì vậy, nếu hướng dẫn bash có thể cho tôi biết về tất cả các phím tắt, làm thế nào tôi có thể làm được với nhau, như bạn đã trả lời ở đây !! Làm thế nào bạn có được danh sách như thế này? Có cách nào để phân tích các phím tắt với hành động và lưu nó trong một tệp khác không? Tôi sẽ chờ đợi câu trả lời của bạn ..
Saurav Kumar

Nếu bạn tìm kiếm hướng dẫn bash cho Readline Command Names, bạn sẽ thấy tất cả các lệnh trong phần này. Tôi sẽ viết một đoạn script ngắn để trích xuất nó thành một tệp văn bản, nhưng tôi không thể thực hiện nó ngay bây giờ (tôi sẽ có thời gian trong vài giờ).
Sparhawk

@Sparhawk: Câu trả lời của bạn đã giúp tôi viết một lệnh lọc grep đơn giản. Kiểm tra nó ở đây hy vọng bạn thích nó. Cảm ơn bạn đã giúp đỡ. Mặc dù tôi đang chờ kịch bản của bạn .. :)
Saurav Kumar

20

Bạn có thể liệt kê tất cả các phím tắt trong bash shell hiện tại của mình bằng cách gọi hàm bash dựng sẵn bindvới -Ptùy chọn.

ví dụ

bind -P | grep clear
clear-screen can be found on "\C-l".

Để thay đổi chúng, bạn có thể làm một cái gì đó như

 bind '\C-p:clear-screen'

Và đặt nó trong một tệp init để làm cho nó vĩnh viễn (lưu ý bạn chỉ có thể có một tổ hợp phím bị ràng buộc với một thứ tại một thời điểm, vì vậy nó sẽ mất bất kỳ ràng buộc nào trước đây).


Lấy các phím tắt bằng cách tìm kiếm nó theo tên là điều hơi bất thường đối với tôi và cũng là một quá trình lâu dài. Có cách nào đơn giản để có được danh sách các phím tắt ở một nơi không? Mong là bạn hiểu. +1 mặc dù cho cách tiếp cận này ..
Saurav Kumar

2
@SauravKumar bind -Psẽ cung cấp cho bạn tất cả các phím tắt. Nếu bạn có nghĩa là bỏ qua những thứ không có ánh xạ cho các hàm liên kết / đường đọc, bạn có thể làm một cái gì đó nhưbind -P | grep -v "not bound"

7

Lệnh sau cung cấp một đầu ra cột đẹp hiển thị việc sử dụng và các phím tắt.

bind -P | grep "can be found" | sort | awk '{printf "%-40s", $1} {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}'

Điều này mang lại một đầu ra, trông giống như

abort                                   "\C-g", "\C-x\C-g", "\e\C-g". 
accept-line                             "\C-j", "\C-m". 
backward-char                           "\C-b", "\eOD", "\e[D". 
backward-delete-char                    "\C-h", "\C-?". 
backward-kill-line                      "\C-x\C-?". 
backward-kill-word                      "\e\C-h", "\e\C-?". 
backward-word                           "\e\e[D", "\e[1;5D", "\e[5D", "\eb". 
beginning-of-history                    "\e<". 
beginning-of-line                       "\C-a", "\eOH", "\e[1~", "\e[H". 
call-last-kbd-macro                     "\C-xe". 
capitalize-word                         "\ec". 
character-search-backward               "\e\C-]". 
character-search                        "\C-]". 
clear-screen                            "\C-l". 
complete                                "\C-i", "\e\e". 
...

Nhận đầu ra này vào một tệp văn bản bằng lệnh sau

bind -P|grep "can be found"|sort | awk '{printf "%-40s", $1} {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}' > ~/shortcuts

Các tập tin được tạo ra trong thư mục $ HOME của bạn.

Giải trình

  • được tất cả các phím tắt.

    bind -P
  • xóa tất cả các phím tắt không được chỉ định

    grep "can be found"
  • sắp xếp đầu ra

    sort
  • in cột đầu tiên (nghĩa là chức năng) và chứng minh văn bản

    awk '{printf "%-40s", $1}
  • Đây là một phần của lệnh trước. Nó in các cột 6+ (tức là các phím tắt).

    {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}'
  • Đưa đầu ra vào một tệp văn bản đẹp trong thư mục gốc có tên là phím tắt

    > shortcuts

Bạn có thể có được ý tưởng về cách hoạt động của lệnh bằng cách chạy các lệnh sau.

bind -P
bind -P | grep "can be found"
bind -P | grep "can be found" | sort

@SauravKumar Bạn muốn tôi thêm bất cứ điều gì vào câu trả lời?
Người dùng đã đăng ký

2
1 cho câu trả lời của bạn và để làm cho nó có ý nghĩa hơn .. :) tôi đã bỏ lỡ đến và nó thay đổi toàn bộ ý nghĩa của câu;) Không có bạn không cần phải thêm bất cứ điều gì. Bạn đã làm hết sức mình ..
Saurav Kumar

+1 Lệnh hay! Tôi đã mở rộng nó để bao gồm các phím tắt chưa đặt:bind -P | tail -n +2 | sort | awk '{printf "%-40s", $1} {if ($6 == "any") {printf"\n"} else {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}}'
wjandrea

1

Được rồi, tôi có một cách để có được danh sách các phím tắt bằng cách lọc hướng dẫn sử dụng bash . Nó cũng sẽ đưa ra mô tả chính xác những gì mỗi phím tắt làm. Cảm ơn Sparhawk đã khai sáng cho tôi để tìm ra giải pháp. Điều tôi cần là học cách sử dụng các biểu thức thông thường mặc dù tôi vẫn không giỏi trong đó :)

Vì vậy, đây là lệnh một dòng:

man bash | grep "(.-.*)$" -A1

Đây là một trích xuất nhỏ của đầu ra:

   beginning-of-line (C-a)
          Move to the start of the current line.
   end-of-line (C-e)
          Move to the end of the line.
   forward-char (C-f)
          Move forward a character.
   backward-char (C-b)
          Move back a character.
   forward-word (M-f)
          Move forward to the end of the next word.  Words are composed of alphanumeric characters (letters and digits).
   backward-word (M-b)
          Move back to the start of the current or previous word.  Words are composed of alphanumeric characters (letters and digits).
   clear-screen (C-l)
          Clear the screen leaving the current line at the top of the screen.  With an argument, refresh the current line without clearing the
   previous-history (C-p)
          Fetch the previous command from the history list, moving back in the list.
   next-history (C-n)
          Fetch the next command from the history list, moving forward in the list.
   beginning-of-history (M-<)
          Move to the first line in the history.
   end-of-history (M->)
          Move to the end of the input history, i.e., the line currently being entered.
   reverse-search-history (C-r)
          Search backward starting at the current line and moving `up' through the history as necessary.  This is an incremental search.
   forward-search-history (C-s)
          Search forward starting at the current line and moving `down' through the history as necessary.  This is an incremental search.

Bây giờ để lưu các phím tắt vào một tệp:

man bash | grep "(.-.*)$" -A1 > bash_shortcuts

Đó là tất cả những gì tôi cần. Tôi chỉ muốn biết các phím tắt được gán cho bash và tôi đã không cấu hình lại bất kỳ phím nào khi BroSlow hỏi tôi.

Một lần nữa cảm ơn tất cả những đóng góp của họ.

Lưu ý :

Nếu ai đó muốn tăng cường điều này, anh ấy / cô ấy được hoan nghênh nhất. Tôi chỉ đề cập đến cách liệt kê các phím tắt đã được gán bởi một số phím. Vì vậy, nếu ai đó biết cách liệt kê những hành động chưa được chỉ định với mô tả bằng cách này , được hoan nghênh nhất :)


Rất đẹp. Tuy nhiên, vấn đề duy nhất là điều này sẽ chỉ in dòng mô tả nhiều dòng đầu tiên. Ngoài ra, nó bỏ qua các tiêu đề và lệnh mà không cần tổ hợp phím mặc định (ví dụ dump-macros), mặc dù đó có thể là những gì bạn muốn.
Sparhawk

1

Miễn là hướng dẫn bash không được sửa đổi theo cách làm cho lệnh này không chính xác (điều này không có khả năng), lệnh sau sẽ hiển thị tất cả các phím tắt mặc định cho bash.

man bash | grep -A294 'Commands for Moving'

Điều này cung cấp một đầu ra trông giống như:

 Commands for Moving
   beginning-of-line (C-a)
          Move to the start of the current line.
   end-of-line (C-e)
          Move to the end of the line.
   forward-char (C-f)
          Move forward a character.
   backward-char (C-b)
          Move back a character.
   forward-word (M-f)
          Move forward to the end of the next word.  Words are composed of alphanumeric characters (letters and digits).
   backward-word (M-b)
          Move back to the start of the current or previous word.  Words are composed of alphanumeric characters (letters  and
          digits).
   shell-forward-word
          Move forward to the end of the next word.  Words are delimited by non-quoted shell metacharacters.
   shell-backward-word
          Move back to the start of the current or previous word.  Words are delimited by non-quoted shell metacharacters.
   clear-screen (C-l)
          Clear  the  screen  leaving  the  current line at the top of the screen.  With an argument, refresh the current line
          without clearing the screen.
   redraw-current-line
          Refresh the current line.

Commands for Manipulating the History
   accept-line (Newline, Return)
          Accept the line regardless of where the cursor is.  If this line is non-empty, add it to the history list  according
          to  the state of the HISTCONTROL variable.  If the line is a modified history line, then restore the history line to
          its original state.
   previous-history (C-p)
          Fetch the previous command from the history list, moving back in the list.
   next-history (C-n)
...

Nếu hướng dẫn bash được sửa đổi, lệnh này có thể dễ dàng thay đổi để phù hợp với nhu cầu.


Làm tốt lắm Patil !! Tại sao tôi không nghĩ về cách này .. :)
Saurav Kumar

@Patil Tôi cũng nghĩ về việc mã hóa số lượng dòng, nhưng tôi đoán rằng nhiều khả năng hướng dẫn bash có số dòng trong phần lệnh thay đổi, thay vì thứ tự các phần của nó bị thay đổi. Tôi đồng ý rằng một trong hai có lẽ là không thể.
Sparhawk
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.