Есть ли руководство, чтобы получить список сочетаний клавиш 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 может рассказать мне обо всех ярлыках, как я это соберу, как вы ответили здесь !! Как вы получили список, как это? Есть ли способ разобрать ярлыки с действием и сохранить его в другом файле? Я буду ждать вашего ответа ..
Саурав Кумар

Если вы ищете в руководстве по 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'

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


Получение клавиш быстрого доступа путем поиска по имени немного необычно для меня, а также является долгим процессом. Есть ли простой способ получить список ярлыков в одном месте? Надеюсь ты понимаешь. +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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.