Bash kısayol tuşlarının listesini almak için herhangi bir kılavuz var mı?


21

Çalışmayı daha kolay ve daha hızlı yapmak için bash komut satırıyla etkileşime girdiğimde kullandığım birçok kısayol var .

Sevmek:

  • ctrl+ L: ekranı temizlemek için
  • ctrl+ a/ ctrl+ e: satırın başlangıcını / sonunu hareket ettirmek için
  • ctrl+ r: komutun geçmişini araştırmak için sadece birkaç karakter yazmayı
  • ctrl+ u/ ctrl+ y: çizgiyi kesmek / yapıştırmak için.

ve çok daha fazlası, bilmek istiyorum ve hangisini öğrenmek için kesinlikle faydalı olacak.

Ubuntu'da bu kısayolların listesini nereden bulabilirim? Bu kısayolları listeleyen herhangi bir kılavuz var mı?

NOT:

Kısayolların listesini ve eylemlerini tek bir yerde görmek istiyorum. Küçük bir süre içinde çoğunu öğrenmek için gerçekten yardımcı olacaktır. Listeyi böyle yapmamızın bir yolu var mı? Burada verilen cevap için teşekkür ederim ..

Yanıtlar:


22

Varsayılanlar, man bashher komutun ne yaptığına dair ayrıntılarla birliktedir. Anahtar bağlamalarınızı değiştirdiyseniz BroSlow'un cevabına bakınız.

   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.

DÜZENLE

Bu komutların tümü kılavuzun bitişik bir bölümünde yer almaktadır, bu nedenle içinden göz atabilirsiniz Commands for Moving. Alternatif olarak, bu bölümün tamamını bir metin dosyasına kaydedebilirsiniz.

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

(Bu, varsayılan klavye kısayolu olmayan komutlar da dahil olmak üzere tüm bölümü yazdırır.)

Awk kodunun açıklaması

  • (Yalnızca) oluşumunda Commands for Moving, değişkeni print_this1 olarak ayarlayın.
  • Programmable CompletionAşağıdaki bölüm olan (yalnızca) oluşumunda , değişkeni 0 olarak ayarlayın.
  • Değişken 1 ise, baştaki boşluktan (üç boşluk) kurtulun ve satırı yazdırın.

1
Bunlar varsayılan OP kısayolları, mutlaka OP'nin gerçek sistemindeki kısayollar değil. bind -Pdaha kesin olurdu.

@ BrSlow İyi yorum. Yine de cevabımın haklı olduğunu düşünüyorum, çünkü komutların ne yaptığı hakkında daha ayrıntılı. Cevap olarak yazarsanız, + 1'im.
Sparhawk

@Sparhawk: Cevabınız için +1. Tek bir yerde kısayolların listesini arıyorum. Eğer bash kılavuzu bana kısayollardan bahsedebilirse, burada cevapladığınız gibi nasıl bir araya getireceğim! Listeyi böyle nasıl aldın? Eylemdeki kısayolları ayrıştırıp başka bir dosyaya kaydetmenin bir yolu var mı? Cevabınızı bekliyorum ..
Saurav Kumar

Bash el kitabını Readline Command Namesararsanız, bu bölümdeki tüm komutları göreceksiniz. Metin dosyasına çıkarmak için kısa bir komut dosyası yazacağım, ancak şu anda yapamıyorum (Birkaç saat içinde zamanım olacak).
Sparhawk

@Sparhawk: Cevabınız basit bir grep filtre komutu yazmamda bana yardımcı oldu. Check it burada hoşuna gider umarım. Yardımın için teşekkürler. Senaryonuzu bekliyorum .. :)
Saurav Kumar

20

Seçenekle bindbirlikte bash yerleşikini çağırarak mevcut bash kabuğunuzdaki tüm kısayolları listeleyebilirsiniz -P.

Örneğin

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

Onları değiştirmek için, gibi bir şey yapabilirsiniz

 bind '\C-p:clear-screen'

Kalıcı yapmak için bir init dosyasına koyun (bir seferde yalnızca bir şeye bağlı bir tuş kombinasyonuna sahip olabileceğinizi unutmayın, bu nedenle daha önce sahip olduğu her türlü bağı kaybedecektir).


Kısayol tuşlarını ada göre arayarak almak benim için çok nadir ve aynı zamanda uzun bir işlemdir. Kısayolların listesini bir yerden almanın basit bir yolu var mı? Umarım anlarsın. Bu yaklaşım için yine de +1 ..
Saurav Kumar

2
@SauravKumar bind -Psize tüm kısayolları vermelidir. Eğer bağlama / bind -P | grep -v "not bound"

7

Aşağıdaki komut, kullanımı ve kısayolları gösteren hoş bir sütun çıktısı verir.

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

Bu gibi görünen bir çıktı verir

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

Bu komutu aşağıdaki komutu kullanarak bir metin dosyasına alın

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

Dosya $ HOME dizininizde oluşturulur.

açıklama

  • tüm kısayolları alır.

    bind -P
  • atanmamış tüm kısayolları kaldırır

    grep "can be found"
  • çıktıyı sıralar

    sort
  • ilk sütunu yazdırır (yani işlev) ve metni yaslar

    awk '{printf "%-40s", $1}
  • Bu önceki komutun bir parçası. 6+ sütunlarını yazdırır (yani kısayollar).

    {for(i=6;i<=NF;i++){printf "%s ", $i}{printf"\n"}}'
  • Çıktıyı kısayol adındaki home dir dizinindeki güzel bir metin dosyasına yerleştirir.

    > shortcuts

Aşağıdaki komutları çalıştırarak komutun nasıl çalıştığı hakkında fikir edinebilirsiniz.

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

@SauravKumar Cevabınıza bir şey eklememi ister misiniz?
Kayıtlı Kullanıcı

2
Cevabınız için 1 ve daha anlamlı kılmak için .. :) Kaçırdığım için ve cümlenin bütün anlamını değiştirdi;) Hayır herhangi bir şey eklemek gerekmez.
Elinden

+1 Güzel komut! 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"}}}'
Belirsiz

1

Tamam, bash kılavuzunu filtreleyerek kısayolların listesini almak için bir yol buldum . Ayrıca her kısayolun tam olarak ne yaptığını da açıklayacaktır. Çözümü bulmam için beni aydınlatan Sparhawk'a teşekkürler . İhtiyacım olan, normal ifadelerin kullanımını öğrenmekti, yine de hala iyi değildim :)

Yani burada bir satır komut:

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

Çıktının küçük bir çıkarımı:

   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.

Şimdi kısayolları bir dosyaya kaydetmek için:

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

Tek ihtiyacım olan buydu. Sadece bash'a atanmış kısayol tuşlarını bilmek istemiştim ve BroSlow'un istediği gibi herhangi bir tuşu yeniden yapılandırmadım .

Katkılarından dolayı herkese bir kez daha teşekkürler.

Not :

Birisi bunu geliştirmek isterse, en çok memnuniyetle karşılanır. Sadece bazı tuşların atadığı kısayolları listelemenin yolundan bahsettim. Bu yüzden , birisi bu yolla açıklama ile atanmamış olan eylemleri nasıl listeleyeceğini bilirse , en çok memnuniyetle karşılanırız :)


Çok hoş. Bununla birlikte, tek sorun bunun sadece çok satırlı açıklamaların ilk satırını basmasıdır. Ayrıca, dump-macrosistediğiniz tuş olsa da, varsayılan tuş vuruşlarını (örn. ) Kullanmadan başlıkları ve komutları atlar .
Sparhawk

1

Bash kılavuzu bu komutu uygunsuz kılacak şekilde değiştirilmediği sürece (ki bu pek olası değildir), aşağıdaki komut tüm varsayılan kısayolları gösterecektir bash.

man bash | grep -A294 'Commands for Moving'

Bu, şuna benzeyen bir çıktı verir:

 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 kılavuzu değiştirilirse, bu komut ihtiyaçlara göre kolayca değiştirilebilir.


Aferin Patil! Neden bu şekilde düşünmedim .. :)
Saurav Kumar

@Patil Ben de satır sayısını kodlama hakkında düşündüm, ancak bash el kitabının bölümlerinin sırasını değiştirmek yerine, komut bölümündeki satır sayısını değiştirmesinin daha muhtemel olduğunu düşündüm. Her ikisinin de muhtemel olmadığını düşünüyorum.
Sparhawk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.