Pertanyaan Apakah ada panduan untuk mendapatkan daftar tombol pintas bash?


Ada banyak cara pintas yang saya gunakan saat berinteraksi dengan baris perintah bash untuk membuat pekerjaan lebih mudah dan lebih cepat.

Seperti:

  • ctrl+L: untuk membersihkan layar
  • ctrl+Sebuah/ctrl+e: untuk memindahkan awal / akhir baris
  • ctrl+r: untuk mencari sejarah komando hanya menulis beberapa karakter
  • ctrl+kamu/ctrl+y: untuk memotong / menyisipkan garis.

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

Saya ingin tahu dari mana saya bisa mendapatkan daftar shortcut ini di Ubuntu? Apakah ada panduan yang mencantumkan pintasan ini?

CATATAN:

Saya ingin mendapatkan daftar cara pintas dan tindakan mereka di satu tempat. Ini akan sangat membantu untuk belajar banyak dari mereka dalam waktu yang singkat. Jadi apakah ada cara kita bisa mendapatkan daftar seperti ini? Meskipun terima kasih atas jawaban yang diberikan di sini ..


21
2018-04-07 22:40


asal




Jawaban:


Standarnya ada di man bash, bersama dengan detail seperti apa yang dilakukan setiap perintah. Lihat jawaban BroSlow jika Anda telah mengubah binding kunci 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

Perintah-perintah ini semuanya ada di bagian yang bersebelahan dari manual, 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

(N.B. ini mencetak seluruh bagian, termasuk perintah tanpa jalan pintas keyboard standar.)

Penjelasan kode awk

  • Pada (hanya) terjadinya Commands for Moving, atur variabelnya print_this ke 1.
  • Pada (hanya) terjadinya Programmable Completion, yang merupakan bagian berikut, atur variabel ke 0.
  • Jika variabelnya adalah 1, maka singkirkan ruang putih terdepan (tiga spasi), dan cetak garisnya.

22
2018-04-07 23:25



Ini adalah cara pintas default, tidak harus pintas pada sistem aktual OP. bind -P akan lebih tepat. - BroSlow
@BroSlow Komentar bagus. Saya masih berpikir ada pahala dalam jawaban saya, karena itu lebih verbose tentang apa yang dilakukan oleh perintah. Jika Anda menulisnya sebagai jawaban, saya akan memberi +1. - Sparhawk
@Sparhawk: +1 untuk jawaban Anda. Saya mencari daftar pintasan di satu tempat. Jadi jika pesta pengguna dapat memberi tahu saya tentang semua pintasan, bagaimana cara 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 untuk 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 sini harap Anda menyukainya. Terima kasih atas bantuan Anda. Meskipun saya sedang menunggu naskah Anda .. :) - Saurav Kumar


Anda dapat mendaftarkan semua pintasan di shell bash Anda saat ini dengan memanggil bash builtin bind dengan -P pilihan.

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 dalam file init agar permanen (perhatikan Anda hanya dapat memiliki kombinasi kunci yang terikat pada satu hal pada satu waktu, sehingga akan kehilangan pengikatan sebelumnya).


18
2018-04-08 01:06



Mendapatkan kunci pintas dengan mencari dengan nama sedikit tidak biasa bagi saya dan juga proses yang panjang. Apakah ada cara sederhana untuk mendapatkan daftar pintasan di satu tempat? Semoga kamu mengerti. +1 meskipun untuk pendekatan ini .. - Saurav Kumar
@SauravKumar bind -P seharusnya memberi Anda semua pintasan. Jika Anda bermaksud mengabaikan mereka yang tidak memiliki pemetaan untuk fungsi bind / readline Anda bisa melakukan sesuatu seperti bind -P | grep -v "not bound" - BroSlow


Perintah berikut memberikan output kolom yang bagus 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 dalam 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 cara pintas non-ditugaskan

    grep "can be found"
    
  • mengurutkan output

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

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

    {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}'
    
  • Menempatkan output ke dalam file teks yang bagus di dir home bernama pintas

    > shortcuts
    

Anda bisa mendapatkan ide tentang bagaimana perintah bekerja dengan menjalankan perintah berikut.

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

7
2018-04-08 07:59



@SauravKumar Anda ingin saya menambahkan sesuatu pada jawabannya? - Registered User
+1 untuk jawaban Anda dan membuatnya lebih bermakna .. :) Saya merindukan untuk dan itu mengubah arti keseluruhan kalimat;) Tidak, Anda tidak perlu menambahkan apapun. Anda telah melakukan yang terbaik .. - Saurav Kumar
+1 Perintah bagus! Saya telah memperluasnya untuk menyertakan pintasan yang tidak 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


Oke saya punya cara untuk mendapatkan daftar cara pintas dengan menyaring bash manual. Ini juga akan memberikan deskripsi apa sebenarnya yang dilakukan oleh setiap pintasan. Terimakasih untuk Sparhawk yang mencerahkan saya untuk menemukan solusinya. Yang saya butuhkan adalah mempelajari penggunaan ekspresi reguler walaupun saya masih kurang bagus :)

Jadi di sini adalah satu baris perintah:

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 cara pintas ke file:

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

Itu saja yang saya butuhkan. Saya hanya ingin tahu tombol pintas yang ditetapkan untuk bash dan saya belum mengonfigurasi ulang kunci apa pun sebagai BroSlow tanya saya.

Sekali lagi terima kasih kepada semua atas kontribusi mereka.

Catatan:

Jika seseorang ingin meningkatkan ini, dia sangat disambut. Saya hanya menyebutkan cara untuk membuat daftar pintasan yang telah ditetapkan oleh beberapa tombol. Begitu jika seseorang tahu cara mendaftar tindakan yang belum ditetapkan dengan deskripsi menggunakan cara ini, paling disambut :)


1
2018-04-08 10:21



Sangat bagus. Namun, satu-satunya masalah adalah ini hanya akan mencetak baris pertama dari deskripsi multi-baris. Selain itu, melompati header dan perintah tanpa keystroke default (mis. dump-macros), meskipun itu mungkin yang Anda inginkan. - Sparhawk


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

man bash | grep -A294 'Commands for Moving'

Ini memberikan 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.


1
2018-04-20 05:09



Patil baik dilakukan !! Mengapa saya tidak berpikir tentang cara 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 berubah, daripada urutan bagiannya diubah. Saya setuju bahwa keduanya mungkin tidak mungkin. - Sparhawk