Есть ли руководство, чтобы получить список сочетаний клавиш 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, то избавьтесь от начального пробела (три пробела) и выведите строку.
Sparhawk
источник
1
Это ярлыки по умолчанию, а не ярлыки в реальной системе OP. bind -Pбудет более точным.
@BroSlow Хороший комментарий. Я все еще думаю, что в моем ответе есть смысл, поскольку он более многословен в отношении того, что делают команды. Если ты напишешь как ответ, я +1.
Sparhawk
@ Sparhawk: +1 за ваш ответ. Я ищу список ярлыков в одном месте. Так что, если руководство по bash может рассказать мне обо всех ярлыках, как я это соберу, как вы ответили здесь !! Как вы получили список, как это? Есть ли способ разобрать ярлыки с действием и сохранить его в другом файле? Я буду ждать вашего ответа ..
Саурав Кумар
Если вы ищете в руководстве по bash Readline Command Names, вы увидите все команды в этом разделе. Я напишу короткий сценарий, чтобы извлечь его в текстовый файл, но я не могу сделать это прямо сейчас (у меня будет время через несколько часов).
Sparhawk
@ Sparhawk: Ваш ответ помог мне написать простую команду фильтра grep. Проверьте здесь, надеюсь, вам понравится. Спасибо за вашу помощь. Хотя я жду твоего сценария .. :)
Саурав Кумар
20

Вы можете перечислить все ярлыки в вашей текущей оболочке bash, вызвав встроенную команду bash bindс -Pопцией.

например

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

Чтобы изменить их, вы можете сделать что-то вроде

 bind '\C-p:clear-screen'

И поместите его в файл инициализации, чтобы сделать его постоянным (обратите внимание, что комбинация клавиш может быть привязана только к одной вещи за раз, поэтому она потеряет любое связывание, которое было ранее).

Slothworks
источник
Получение клавиш быстрого доступа путем поиска по имени немного необычно для меня, а также является долгим процессом. Есть ли простой способ получить список ярлыков в одном месте? Надеюсь ты понимаешь. +1 хотя за такой подход ..
Саурав Кумар
2
@SauravKumar bind -Pдолжен дать вам все ярлыки. Если вы имеете в виду , игнорируя те , которые не имеют отображения для связывания / чтения строки функции , которые вы могли бы сделать что - то вроде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
  • печатает первый столбец (т.е. функцию) и выравнивает текст

    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 за ответ и сделать его более значимым .. :) Я пропустил , чтобы и это изменило весь смысл предложения;) Нет , вы не должны добавлять любую вещь. Вы сделали все возможное ..
Саурав Кумар
+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

Хорошо, у меня есть способ получить список ярлыков, отфильтровав руководство по bash . Это также даст описание того, что именно делает каждый ярлык. Спасибо 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

Это все, что мне было нужно. Я просто хотел знать сочетания клавиш, назначенные bash, и я не перенастраивал какие-либо клавиши, как меня просил BroSlow .

Еще раз спасибо всем за их вклад.

Примечание :

Если кто-то хочет улучшить это, он / она приветствуется. Я только упомянул способ перечислить те сочетания клавиш, которые были назначены некоторыми клавишами. Так что, если кто-то знает, как перечислить те действия, которые не были назначены с описанием, используя этот способ , это приветствуется :)

Саурав Кумар
источник
Очень хорошо. Однако единственная проблема заключается в том, что при этом будет напечатана только первая строка многострочных описаний. Кроме того, он пропускает заголовки и команды без нажатия клавиш по умолчанию (например dump-macros), хотя это может быть тем, что вы хотите.
Sparhawk
1

Пока руководство bash не изменено таким образом, чтобы сделать эту команду неправильной (что не очень вероятно), следующая команда покажет все горячие клавиши по умолчанию для 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 Я тоже думал о жестком кодировании количества строк, но я подумал, что в руководстве по bash более вероятно, что число строк в разделе команд изменилось, а не изменился порядок его разделов. Я согласен, что либо, вероятно, вряд ли.
Sparhawk