มีคู่มือใดบ้างในการรับรายการปุ่มลัด bash หรือไม่


21

มีทางลัดมากมายที่ฉันใช้ขณะที่โต้ตอบกับบรรทัดคำสั่ง bashเพื่อให้การทำงานง่ายขึ้นและเร็วขึ้น

ชอบ:

  • ctrl+ L: เพื่อล้างหน้าจอ
  • ctrl+ a/ ctrl+ e: เพื่อเลื่อนจุดเริ่มต้น / สิ้นสุดของบรรทัด
  • ctrl+ r: เพื่อค้นหาประวัติคำสั่งเพียงแค่เขียนตัวอักษรไม่กี่ตัว
  • ctrl+ u/ ctrl+ y: เพื่อตัด / วางสาย

และอื่น ๆ อีกมากมายที่ฉันอยากรู้และซึ่งจะเป็นประโยชน์ในการเรียนรู้อย่างแน่นอน

ฉันต้องการทราบว่าฉันจะรับรายชื่อทางลัดเหล่านี้ใน Ubuntu ได้จากที่ใด มีคู่มือใดบ้างที่แสดงรายการทางลัดเหล่านี้

บันทึก:

ฉันต้องการรับรายการทางลัดและการกระทำของพวกเขาในที่เดียว มันจะช่วยให้เรียนรู้พวกเขามากมายในช่วงเวลาสั้น ๆ ดังนั้นมีวิธีที่เราจะได้รับรายการเช่นนี้? แม้ว่าจะขอบคุณสำหรับคำตอบที่ได้รับที่นี่ ..

คำตอบ:


22

ค่าเริ่มต้นอยู่ในman bashพร้อมกับรายละเอียดเป็นสิ่งที่แต่ละคำสั่งทำ ดูคำตอบของ BroSlow หากคุณเปลี่ยนการผูกกุญแจ

   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.

แก้ไข

Commands for Movingคำสั่งเหล่านี้ทั้งหมดในส่วนที่ต่อเนื่องกันของคู่มือเพื่อให้คุณสามารถเรียกดูได้จาก หรือมิฉะนั้นคุณสามารถบันทึกส่วนนี้ทั้งหมดลงในไฟล์ข้อความด้วย

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

(หมายเหตุนี้จะพิมพ์ส่วนทั้งหมดรวมถึงคำสั่งที่ไม่มีแป้นพิมพ์ลัดเริ่มต้น)

คำอธิบายของรหัส awk

  • ในการเกิดขึ้น (เท่านั้น) Commands for Movingตั้งค่าตัวแปรprint_thisเป็น 1
  • บนการเกิดขึ้น (เท่านั้น) Programmable Completionซึ่งเป็นส่วนต่อไปนี้ให้ตั้งค่าตัวแปรเป็น 0
  • หากตัวแปรคือ 1 ให้กำจัดช่องว่างนำหน้า (ช่องว่างสามช่อง) ออกแล้วพิมพ์บรรทัด

1
เหล่านี้เป็นทางลัดเริ่มต้นไม่จำเป็นต้องเป็นทางลัดในระบบจริงของ OP bind -Pจะแม่นยำมากขึ้น

@BroSlow ความคิดเห็นดี ฉันยังคงคิดว่ามีคำตอบอยู่ในข้อดีของมันเพราะมันละเอียดมากขึ้นเกี่ยวกับสิ่งที่คำสั่งทำ ถ้าคุณเขียนมันเป็นคำตอบฉันจะ +1
Sparhawk

@Sparhawk: +1 สำหรับคำตอบของคุณ ฉันกำลังมองหารายการทางลัดในที่เดียว ดังนั้นหากbash manual สามารถบอกฉันเกี่ยวกับทางลัดทั้งหมดฉันจะรวบรวมมันได้อย่างไรเหมือนที่คุณตอบที่นี่ !! คุณได้รับรายการเช่นนี้ได้อย่างไร มีวิธีการแยกทางลัดด้วยการกระทำและบันทึกไว้ในไฟล์อื่นหรือไม่ ฉันจะรอคำตอบของคุณ ..
Saurav Kumar

หากคุณค้นหาคู่มือ bash Readline Command Namesคุณจะเห็นคำสั่งทั้งหมดในส่วนนี้ ฉันจะเขียนสคริปต์สั้น ๆ เพื่อแยกไปยังไฟล์ข้อความ แต่ฉันไม่สามารถทำได้ในตอนนี้ (ฉันจะมีเวลาในไม่กี่ชั่วโมง)
Sparhawk

@Sparhawk: คำตอบของคุณช่วยให้ฉันเขียนคำสั่ง grep filter แบบง่าย ๆ ตรวจสอบที่นี่หวังว่าคุณจะชอบมัน ขอบคุณสำหรับความช่วยเหลือของคุณ. แม้ว่าฉันจะรอสคริปต์ของคุณ .. :)
Saurav Kumar

20

คุณสามารถแสดงรายการทางลัดทั้งหมดใน bash shell ปัจจุบันของคุณโดยเรียก bash builtin bindพร้อม-Pตัวเลือก

เช่น

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

หากต้องการเปลี่ยนคุณสามารถทำสิ่งที่ต้องการ

 bind '\C-p:clear-screen'

และวางไว้ในไฟล์ init เพื่อให้ถาวร (โปรดทราบว่าคุณสามารถรวมคีย์ได้ครั้งละหนึ่งรายการเท่านั้น


การรับปุ่มทางลัดด้วยการค้นหาโดยใช้ชื่อเป็นเรื่องแปลกสำหรับฉันและเป็นกระบวนการที่ใช้เวลานาน มีวิธีง่ายๆในการรับรายการทางลัดในที่เดียวหรือไม่? หวังว่าคุณจะเข้าใจ. +1 แม้ว่าสำหรับวิธีการนี้ ..
Saurav Kumar

2
@SauravKumar bind -Pควรให้ทางลัดทั้งหมดแก่คุณ หากคุณหมายถึงการเพิกเฉยต่อผู้ที่ไม่มีการแมปสำหรับฟังก์ชั่นการผูก / readline คุณสามารถทำสิ่งที่ชอบbind -P | grep -v "not bound"

7

คำสั่งดังต่อไปนี้จะให้ผลลัพธ์เป็นคอลัมน์ที่ดีแสดงการใช้งานและทางลัด

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

สิ่งนี้ให้ผลลัพธ์ซึ่งดูเหมือนว่า

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". 
...

รับเอาต์พุตนี้เป็นไฟล์ข้อความโดยใช้คำสั่งต่อไปนี้

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

ไฟล์ถูกสร้างในไดเรกทอรี $ HOME ของคุณ

คำอธิบาย

  • รับทางลัดทั้งหมด

    bind -P
  • ลบทางลัดที่ไม่ได้รับมอบหมายทั้งหมด

    grep "can be found"
  • เรียงลำดับผลลัพธ์

    sort
  • พิมพ์คอลัมน์แรก (ฟังก์ชั่น ie) และจัดชิดข้อความ

    awk '{printf "%-40s", $1}
  • นี่เป็นส่วนหนึ่งของคำสั่งก่อนหน้า มันพิมพ์คอลัมน์ 6+ (เช่นทางลัด)

    {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}'
  • วางผลลัพธ์ลงในไฟล์ข้อความที่ดีในทางลัดบ้านชื่อทางลัด

    > shortcuts

คุณสามารถเข้าใจวิธีการทำงานของคำสั่งโดยเรียกใช้คำสั่งต่อไปนี้

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

@SauravKumar คุณต้องการให้ฉันเพิ่มอะไรเข้าไปในคำตอบ?
สมาชิกที่ลงทะเบียน

2
+1 สำหรับคำตอบของคุณและทำให้มันมีความหมายมากขึ้น .. :) ฉันพลาดไปและมันเปลี่ยนความหมายทั้งหมดของประโยค;) คุณไม่ต้องเพิ่มอะไรอีกเลย คุณทำได้ดีที่สุดแล้ว ..
Saurav Kumar

+1 สั่งดี! ฉันได้ขยายให้รวมถึงทางลัดที่ไม่ได้ตั้งค่า: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

เอาล่ะฉันมีวิธีที่จะได้รับรายชื่อของทางลัดโดยการกรองที่คู่มือการทุบตี นอกจากนี้ยังจะให้คำอธิบายว่าแต่ละทางลัดดำเนินการอย่างไร ขอบคุณSparhawkที่ให้ความกระจ่างแก่ฉันเพื่อค้นหาวิธีแก้ปัญหา สิ่งที่ฉันต้องการคือการเรียนรู้การใช้นิพจน์ทั่วไปแม้ว่าฉันจะยังไม่เก่ง :)

ดังนั้นนี่คือคำสั่งหนึ่งบรรทัด:

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

นี่คือการแยกเอาท์พุทขนาดเล็ก:

   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.

ตอนนี้เพื่อบันทึกทางลัดไปยังไฟล์:

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

นั่นคือทั้งหมดที่ฉันต้องการ ฉันแค่อยากจะรู้ว่าปุ่มทางลัดที่มอบหมายให้ทุบตีและฉันไม่ได้ทำการตั้งค่าปุ่มใหม่ใด ๆ ตามที่BroSlowถามฉัน

ขอขอบคุณทุกคนอีกครั้งสำหรับการมีส่วนร่วมของพวกเขา

หมายเหตุ :

หากใครบางคนต้องการที่จะปรับปรุงสิ่งนี้เขา / เธอยินดีมากที่สุด ฉันได้กล่าวถึงวิธีในการแสดงรายการทางลัดเหล่านั้นซึ่งได้รับมอบหมายจากแป้นบางปุ่มเท่านั้น ดังนั้นหากมีคนรู้วิธีแสดงรายการการกระทำที่ไม่ได้รับมอบหมายพร้อมคำอธิบายโดยใช้วิธีนี้ยินดีมากที่สุด :)


ดีมาก. อย่างไรก็ตามปัญหาเพียงอย่างเดียวคือสิ่งนี้จะพิมพ์บรรทัดแรกของคำอธิบายหลายบรรทัดเท่านั้น นอกจากนี้ยังข้ามส่วนหัวและคำสั่งโดยไม่มีการกดปุ่มเริ่มต้น (เช่นdump-macros) แม้ว่าอาจเป็นสิ่งที่คุณต้องการ
Sparhawk

1

ตราบใดที่คู่มือการทุบตีไม่ได้แก้ไขในทางที่จะทำให้คำสั่งนี้ไม่เหมาะสม (ซึ่งไม่น่าจะมาก) bashคำสั่งดังต่อไปนี้จะแสดงทางลัดเริ่มต้นทั้งหมด

man bash | grep -A294 'Commands for Moving'

สิ่งนี้จะให้ผลลัพธ์ที่ดูเหมือน:

 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)
...

หากมีการแก้ไขคู่มือ bash คำสั่งนี้สามารถเปลี่ยนได้อย่างง่ายดายเพื่อให้เหมาะกับความต้องการ


ทำได้ดีมาก Patil !! ไม่ได้ผมคิดว่าทำไมเกี่ยวกับวิธีนี้ .. :)
Saurav Kumar

@Patil ฉันคิดเกี่ยวกับการเข้ารหัสจำนวนบรรทัดด้วย แต่ฉันคิดว่ามันเป็นไปได้มากกว่าที่คู่มือทุบตีมีจำนวนบรรทัดในส่วนคำสั่งเปลี่ยนไปแทนที่จะเปลี่ยนลำดับของส่วนต่างๆ ฉันเห็นด้วยว่าอาจไม่น่าเป็นไปได้
Sparhawk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.