Apakah ada manual untuk mendapatkan daftar tombol pintas bash?

21

Ada banyak pintasan yang saya gunakan saat berinteraksi dengan bash command line untuk membuat pekerjaan lebih mudah dan lebih cepat.

Seperti:

  • ctrl+ L: untuk menghapus layar
  • ctrl+ a/ ctrl+ e: untuk memindahkan awal / akhir baris
  • ctrl+ r: untuk mencari sejarah perintah hanya dengan menulis beberapa karakter
  • ctrl+ u/ ctrl+ y: untuk memotong / menempelkan garis.

dan masih banyak lagi, yang ingin saya ketahui dan yang pasti akan berguna untuk dipelajari.

Saya ingin tahu dari mana saya bisa mendapatkan daftar cara pintas ini di Ubuntu? Apakah ada manual yang mencantumkan pintasan ini?

CATATAN:

Saya ingin mendapatkan daftar pintasan dan tindakan mereka di satu tempat. Ini akan sangat membantu untuk mempelajari banyak dari mereka dalam durasi waktu yang kecil. Jadi adakah cara kita mendapatkan daftar seperti ini? Meskipun terima kasih atas jawaban yang diberikan di sini ..

Saurav Kumar
sumber

Jawaban:

22

Standarnya ada di dalam man bash, bersama dengan rincian tentang apa yang setiap perintah lakukan. Lihat jawaban BroSlow jika Anda telah mengubah binding utama Anda.

   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.

EDIT

Semua perintah ini berada di bagian manual yang berdekatan, sehingga Anda dapat menjelajahinya Commands for Moving. Atau, Anda dapat menyimpan seluruh bagian ini ke file teks dengan

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

(NB ini mencetak seluruh bagian, termasuk perintah tanpa pintasan keyboard default.)

Penjelasan kode awk

  • Saat (hanya) kemunculan Commands for Moving, atur variabel print_thiske 1.
  • Pada kejadian (hanya) Programmable Completion, yang merupakan bagian berikut, atur variabel ke 0.
  • Jika variabelnya 1, singkirkan spasi putih terdepan (tiga spasi), dan cetak garisnya.
Sparhawk
sumber
1
Ini adalah pintasan default, tidak harus pintasan pada sistem aktual OP. bind -Pakan lebih tepat.
@BroSlow Komentar bagus. Saya masih berpikir ada kelebihan dalam jawaban saya, karena itu lebih jelas tentang apa yang dilakukan perintah. Jika Anda menuliskannya sebagai jawaban, saya akan memberi +1.
Sparhawk
@Sparhawk: +1 untuk jawaban Anda. Saya mencari daftar pintasan di satu tempat. Jadi, jika manual bash dapat memberi tahu saya tentang semua pintasan, bagaimana saya akan mendapatkannya bersama, seperti yang Anda jawab di sini !! Bagaimana Anda mendapatkan daftar seperti ini? Apakah ada cara untuk mengurai pintasan dengan tindakan dan menyimpannya di file lain? Saya akan menunggu balasan Anda ..
Saurav Kumar
Jika Anda mencari manual bash Readline Command Names, Anda akan melihat semua perintah di bagian ini. Saya akan menulis skrip pendek untuk mengekstraknya ke file teks, tetapi saya tidak bisa melakukannya sekarang (saya akan punya waktu dalam beberapa jam).
Sparhawk
@Sparhawk: Jawaban Anda membantu saya menulis perintah filter grep sederhana. Periksa di sini, harap Anda menyukainya. Terima kasih atas bantuan Anda. Meskipun saya sedang menunggu skrip Anda .. :)
Saurav Kumar
20

Anda dapat membuat daftar semua pintasan di bash shell Anda saat ini dengan memanggil bash builtin binddengan -Popsi.

misalnya

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

Untuk mengubahnya, Anda dapat melakukan sesuatu seperti

 bind '\C-p:clear-screen'

Dan letakkan di file init untuk menjadikannya permanen (perhatikan Anda hanya dapat memiliki kombinasi kunci yang terikat pada satu hal pada suatu waktu, sehingga akan kehilangan ikatan apa pun yang sebelumnya).

Slothworks
sumber
Mendapatkan tombol pintas dengan mencarinya dengan nama sedikit tidak biasa bagi saya dan juga proses yang panjang. Apakah ada cara sederhana untuk mendapatkan daftar cara pintas di satu tempat? Semoga kamu mengerti. +1 meskipun untuk pendekatan ini ..
Saurav Kumar
2
@SauravKumar bind -Pakan memberi Anda semua pintasan. Jika Anda bermaksud mengabaikan hal-hal yang tidak memiliki pemetaan untuk fungsi bind / readline, Anda dapat melakukan sesuatu sepertibind -P | grep -v "not bound"
7

Perintah berikut memberikan output berbentuk kolom yang menunjukkan penggunaan dan pintasan.

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

Ini memberikan output, yang terlihat seperti

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

Dapatkan output ini ke file teks menggunakan perintah berikut

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

File dibuat di direktori $ HOME Anda.

Penjelasan

  • mendapat semua pintasan.

    bind -P
  • menghapus semua pintasan yang tidak ditetapkan

    grep "can be found"
  • macam output

    sort
  • mencetak kolom pertama (yaitu fungsi) dan membenarkan teks

    awk '{printf "%-40s", $1}
  • Ini adalah bagian dari perintah sebelumnya. Ini mencetak kolom 6+ (yaitu pintasan).

    {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}'
  • Masukkan hasilnya ke file teks yang bagus di direktori home yang bernama pintasan

    > shortcuts

Anda bisa mendapatkan ide tentang cara kerja perintah dengan menjalankan perintah berikut.

bind -P
bind -P | grep "can be found"
bind -P | grep "can be found" | sort
Pengguna Terdaftar
sumber
@SauravKumar Anda ingin saya menambahkan sesuatu ke jawabannya?
Pengguna Terdaftar
2
1 untuk jawaban Anda dan untuk membuatnya lebih bermakna .. :) Aku rindu untuk dan itu mengubah seluruh makna kalimat;) Tidak Anda tidak perlu menambahkan hal apapun. Anda telah melakukan yang terbaik ..
Saurav Kumar
+1 Perintah yang bagus! Saya telah memperluasnya dengan memasukkan pintasan yang belum disetel: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

Oke saya punya cara untuk mendapatkan daftar cara pintas dengan memfilter manual bash . Ini juga akan memberikan deskripsi apa sebenarnya yang dilakukan setiap pintasan. Terima kasih kepada Sparhawk yang telah menyadarkan saya untuk menemukan solusinya. Apa yang saya butuhkan adalah belajar menggunakan ekspresi reguler walaupun saya masih kurang bagus :)

Jadi di sini adalah perintah satu baris:

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

Berikut ini adalah ekstraksi kecil dari output:

   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.

Sekarang untuk menyimpan pintasan ke file:

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

Itu yang saya butuhkan. Saya hanya ingin tahu tombol pintas yang ditetapkan untuk bash dan saya belum mengkonfigurasi ulang tombol apa pun seperti yang diminta BroSlow .

Sekali lagi terima kasih kepada semua untuk kontribusi mereka.

Catatan :

Jika seseorang ingin meningkatkan ini, dia sangat disambut. Saya hanya menyebutkan cara daftar pintasan yang telah ditetapkan oleh beberapa kunci. Jadi, jika seseorang tahu bagaimana membuat daftar tindakan yang belum ditugaskan dengan deskripsi menggunakan cara ini , sangat disambut :)

Saurav Kumar
sumber
Sangat bagus. Namun, satu-satunya masalah adalah ini hanya akan mencetak baris pertama dari deskripsi multi-baris. Juga, ini melompati header dan perintah tanpa penekanan tombol default (misalnya dump-macros), meskipun itu mungkin yang Anda inginkan.
Sparhawk
1

Selama manual bash tidak dimodifikasi dengan cara membuat perintah ini tidak tepat (yang sangat tidak mungkin), perintah berikut akan menampilkan semua pintasan default untuk bash.

man bash | grep -A294 'Commands for Moving'

Ini menghasilkan output yang terlihat seperti:

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

Jika manual bash dimodifikasi, perintah ini dapat dengan mudah diubah agar sesuai dengan kebutuhan.

Pengguna Terdaftar
sumber
Patil yang dilakukan dengan baik !! Mengapa saya tidak memikirkan hal ini .. :)
Saurav Kumar
@Patil Saya berpikir tentang hardcoding jumlah baris juga, tapi saya pikir itu lebih mungkin bahwa bash manual memiliki jumlah baris di bagian perintah yang diubah, daripada urutan bagian-bagiannya diubah. Saya setuju bahwa mungkin juga tidak mungkin.
Sparhawk