bind - обработка привязок клавиш fish
Резюме
bind [(-M | --mode) MODE] [(-m | --sets-mode) NEW_MODE] [--preset | --user] [-s | --silent] [-k | --key] SEQUENCE COMMAND ... bind [(-M | --mode) MODE] [-k | --key] [--preset] [--user] SEQUENCE bind (-K | --key-names) [-a | --all] [--preset] [--user] bind (-f | --function-names) bind (-L | --list-modes) bind (-e | --erase) [(-M | --mode) MODE] [--preset] [--user] [-a | --all] | [-k | --key] SEQUENCE ...
Описание
bind управляет привязками.
Он может добавлять привязки, если ему задана ПОСЛЕДОВАТЕЛЬНОСТЬ символов для привязки. Они должны быть записаны как последовательности экранирования fish. Наиболее важные из них — \c для клавиши управления, \e для клавиши Esc, а также, по историческим причинам, клавиша Alt (иногда также называемая «Meta»).
Например, Alt+W может быть записано как \ew, а Control+X (^X) — как \cx. Обратите внимание, что привязки клавиш, основанные на Alt, чувствительны к регистру, а привязки, основанные на Control, нет. Это ограничение текстовых терминалов, а не fish.
Универсальная привязка клавиш, которая срабатывает, если не срабатывает никакая другая, может быть установлена, указав ПОСЛЕДОВАТЕЛЬНОСТЬ пустой строки (то есть, '' ). Для большинства привязок клавиш имеет смысл привязать это к функции self-insert (то есть bind '' self-insert). Это вставит любые нажатия клавиш, не привязанные конкретно, в редактор. Непечатаемые символы игнорируются редактором, поэтому это не приведет к вставке управляющих последовательностей.
Если используется переключатель -k, вместо последовательности используется имя клавиши (например, «вниз», «вверх» или «backspace»). Использованные имена аналогичны соответствующим переменным curses, но без префикса «key_». (См. terminfo(5) для получения дополнительной информации или используйте bind --key-names для получения списка всех доступных имен клавиш). Обычно это выведет ошибку, если в текущей записи $TERM нет заданной клавиши, если не указан переключатель -s.
Чтобы узнать, какую последовательность отправляет сочетание клавиш, можно использовать fish_key_reader.
COMMAND может быть любой командой fish, но также может быть одной из набора специальных функций ввода. Они включают функции для перемещения курсора, работы с кольцом удаления, выполнения автодополнения, и т.д. Используйте bind --function-names для получения полного списка этих функций ввода.
Когда COMMAND является командой сценария оболочки, хорошей практикой является размещение фактического кода в функции и просто привязка к имени функции. Таким образом, тестирование функции во время редактирования становится значительно проще, а результат обычно более читаем.
Примечание
Специальные функции ввода не могут быть объединены с обычными командами сценария оболочки. Команды должны быть полностью последовательностью специальных функций ввода (из bind -f) или всеми командами сценария оболочки (то есть, допустимым сценарием fish). Для запуска специальных функций ввода из обычного сценария fish используйте commandline -f (см. также commandline). Если сценарий генерирует вывод, он должен завершаться вызовом commandline -f repaint , чтобы сообщить fish о необходимости перерисовки.
Если SEQUENCE не указано, отображаются все привязки (или только привязки в заданном MODE). Если SEQUENCE указано, но COMMAND нет, отображается только привязка, соответствующая этой последовательности.
Чтобы сохранить пользовательские привязки клавиш, поместите инструкции bind в config.fish. В качестве альтернативы, fish также автоматически выполняет функцию, называемую fish_user_key_bindings , если она существует.
Привязки клавиш могут использовать «режимы», которые имитируют поведенческий режим ввода Vi. По умолчанию используется режим «default». Каждая привязка клавиш применяется к одному режиму; вы можете указать его с помощью -M MODE. Если привязка клавиш должна изменить режим, вы можете указать новый режим с помощью -m NEW_MODE. Режим можно просмотреть и изменить через переменную $fish_bind_mode. Если вы хотите изменить режим внутри функции fish, используйте set fish_bind_mode MODE.
Параметры
Доступны следующие параметры:
- -k или --key
-
Укажите имя клавиши, например, ‘left’ или ‘backspace’, вместо последовательности символов
- -K или --key-names
-
Отобразить список доступных имен клавиш. Указание -a или --all включает клавиши, для которых нет известного отображения
- -f или --function-names
-
Отобразить список доступных функций ввода
- -L или --list-modes
-
Отобразить список определенных режимов привязки
- -M MODE или --mode MODE
-
Укажите режим привязки, в котором используется привязка. По умолчанию — «default»
- -m NEW_MODE или --sets-mode NEW_MODE
-
Изменить текущий режим на NEW_MODE после выполнения этой привязки
- -e или --erase
-
Удалить привязку с заданной последовательностью и режимом вместо определения новой. Несколько последовательностей можно указать с этим флагом. Указание -a или --all с -M или --mode удаляет все привязки в заданном режиме независимо от последовательности. Указание -a или --all без -M или --mode удаляет все привязки во всех режимах независимо от последовательности.
- -a или --all
-
См. --erase и --key-names
- --preset и --user
-
Укажите, должна ли привязка работать с пользовательскими или предопределенными привязками. Пользовательские привязки имеют приоритет над предопределенными, когда fish ищет отображения. По умолчанию все вызовы
bindработают на уровне «user», за исключением отображения, которое покажет оба уровня. Все вызовы, кроме вставки новых привязок, могут работать с обоими уровнями одновременно (если указаны как --preset, так и --user). --preset следует использовать только в полных наборах привязок (например, при работе сfish_vi_key_bindings). - -s или --silent
-
Отключает некоторые сообщения об ошибках, включая для неизвестных имен клавиш и не привязанных последовательностей.
- -h или --help
-
Отображает справку по использованию этой команды.
Специальные функции ввода
Доступны следующие специальные функции ввода:
-
and -
выполнить следующую функцию только в случае успешного выполнения предыдущей (прим.: некоторые функции сообщают об успехе)
-
accept-autosuggestion -
принять текущее автопредложение
-
backward-char -
переместить курсор на один символ влево. Если активна страница автодополнения, выбрать предыдущее автодополнение.
-
backward-bigword -
переместить курсор на одно слово (разделённое пробелами) влево
-
backward-delete-char -
удалить один символ слева от курсора
-
backward-kill-bigword -
переместить слово слева от курсора в буфер обмена
-
backward-kill-line -
переместить всё от начала строки до курсора в буфер обмена
-
backward-kill-path-component -
переместить компонент пути слева от курсора в буфер обмена. Компонент пути — это всё, что, скорее всего, принадлежит к компоненту пути, то есть не следующее:
/={,}’":@ |;<>&, а также новые строки и табуляции. -
backward-kill-word -
переместить слово слева от курсора в буфер обмена. «Слово» здесь — всё до знаков препинания или пробелов.
-
backward-word -
переместить курсор на одно слово влево
-
beginning-of-buffer -
переместиться в начало буфера, то есть в начало первой строки
-
beginning-of-history -
переместиться в начало истории
-
beginning-of-line -
переместиться в начало строки
-
begin-selection -
начать выделение текста
-
cancel -
отменить текущую команду и заменить её новой пустой
-
cancel-commandline -
отменить текущую команду и заменить её новой пустой, оставив старую на месте с меткой, показывающей, что она была отменена
-
capitalize-word -
сделать текущее слово начинающимся с заглавной буквы
-
clear-screen -
очищает экран и перерисовывает подсказку. Если терминал не поддерживает очистку экрана, это то же самое, что и
repaint. -
complete -
предсказать оставшуюся часть текущего токена
-
complete-and-search -
вызвать индексируемую страницу автодополнений (для удобства также перемещает назад на странице автодополнений)
-
delete-char -
удалить один символ справа от курсора
-
delete-or-exit -
удалить один символ справа от курсора или выйти из оболочки, если командная строка пустая
-
down-line -
переместить курсор вниз на одну строку
-
downcase-word -
перевести текущее слово в нижний регистр
-
end-of-buffer -
переместиться в конец буфера, то есть в конец первой строки
-
end-of-history -
переместиться в конец истории
-
end-of-line -
переместиться в конец строки
-
end-selection -
закончить выделение текста
-
expand-abbr -
расширяет любое сокращение, находящееся в данный момент под курсором
-
execute -
выполнить текущую командную строку
-
exit -
выйти из оболочки
-
forward-bigword -
переместить курсор на одно слово (разделённое пробелами) вправо
-
forward-char -
переместить курсор на один символ вправо; или, если курсор в конце командной строки, принять текущее автопредложение. Если активна страница автодополнения, выбрать следующее автодополнение.
-
forward-single-char -
переместить курсор на один символ вправо; или, если курсор в конце командной строки, принять один символ из текущего автопредложения.
-
forward-word -
переместить курсор на одно слово вправо; или, если курсор в конце командной строки, принять одно слово из текущего автопредложения.
-
history-pager -
вызвать индексируемую страницу истории (поисковая система); или, если страница истории уже активна, искать дальше назад во времени.
-
history-pager-delete -
постоянно удалить элемент истории, выбранный на странице истории
-
history-search-backward -
найти в истории предыдущую совпадение
-
history-search-forward -
найти в истории следующее совпадение
-
history-prefix-search-backward -
найти в истории предыдущую совпадение по префиксу
-
history-prefix-search-forward -
найти в истории следующее совпадение по префиксу
-
history-token-search-backward -
найти в истории предыдущий совпадающий аргумент
-
history-token-search-forward -
найти в истории следующий совпадающий аргумент
-
forward-jump and backward-jump -
прочитать еще один символ и перейти к его следующему вхождению перед/после курсора
-
forward-jump-till and backward-jump-till -
перейти вправо перед следующим вхождением
-
repeat-jump and repeat-jump-reverse -
повторить последний переход в том же/противоположном направлении
-
kill-bigword -
переместить следующее слово (разделённое пробелами) в буфер обмена
-
kill-line -
переместить всё от курсора до конца строки в буфер обмена
-
kill-selection -
переместить выделенный текст в буфер обмена
-
kill-whole-line -
переместить строку (включая последующий символ новой строки) в буфер обмена. Если строка — последняя, её предшествующий символ новой строки также удаляется
-
kill-inner-line -
переместить строку (без последующего символа новой строки) в буфер обмена
-
kill-word -
переместить следующее слово в буфер обмена
-
nextd-or-forward-word -
если командная строка пуста, перейти вперёд в истории каталогов, иначе переместить курсор на одно слово вправо; или, если курсор в конце командной строки, принять одно слово из текущего автопредложения.
-
or -
выполнить следующую функцию только в случае неудачи предыдущей (прим.: некоторые функции сообщают об ошибке)
-
pager-toggle-search -
переключает поле поиска, если видима страница автодополнений; или, если используется после
history-pager, искать вперёд во времени. -
prevd-or-backward-word -
если командная строка пуста, переместиться назад в истории каталогов, иначе переместить курсор на одно слово влево
-
repaint -
перевыполняет функции подсказки и перерисовывает подсказку (также
force-repaintдля обратной совместимости) -
repaint-mode -
перевыполняет функцию fish_mode_prompt и перерисовывает подсказку. Это полезно для режима vi. Если
fish_mode_promptотсутствует или ничего не выводит, она действует как обычная перерисовка. -
self-insert -
вставляет совпадающую последовательность в командную строку
-
self-insert-notfirst -
вставляет совпадающую последовательность в командную строку, если курсор не в начале
-
suppress-autosuggestion -
удаляет текущее автопредложение. Возвращает true, если было предложение для удаления.
-
swap-selection-start-stop -
переходит к другому концу выделенного текста без изменения выделения
-
transpose-chars -
переставляет два символа слева от курсора
-
transpose-words -
переставляет два слова слева от курсора
-
togglecase-char -
переключает регистр (регистр) символа под курсором
-
togglecase-selection -
переключает регистр (регистр) выделения
-
insert-line-under -
добавляет новую строку под текущей строкой
-
insert-line-over -
добавляет новую строку над текущей строкой
-
up-line -
переместиться вверх на одну строку
-
undo and redo -
восстановить или повторить последние изменения в командной строке
-
upcase-word -
перевести текущее слово в верхний регистр
-
yank -
вставить последнюю запись из буфера обмена в буфер
-
yank-pop -
повернуть к предыдущей записи из буфера обмена
Дополнительные функции
Следующие функции включены как обычные функции, но особенно полезны для редактирования ввода:
-
up-or-search and down-or-search -
перемещает курсор или ищет в истории в зависимости от положения курсора и текущего режима
-
edit_command_buffer -
открыть визуальный редактор (управляемый переменными окружения
VISUALилиEDITOR) с текущим содержимым командной строки -
fish_clipboard_copy -
скопировать текущее выделение в буфер обмена системы
-
fish_clipboard_paste -
вставить текущее выделение из буфера обмена системы перед курсором
-
fish_commandline_append -
добавить аргумент к командной строке. Если командная строка уже заканчивается аргументом, это удаляет суффикс вместо этого. Начинается с последней команды из истории, если командная строка пуста.
-
fish_commandline_prepend -
вставить аргумент в начало командной строки. Если командная строка уже начинается с аргумента, это удаляет префикс вместо этого. Начинается с последней команды из истории, если командная строка пуста.
Примеры
Выход из оболочки при нажатии Control+D:
bind \cd 'exit'
Выполнение поиска по истории при нажатии Page Up:
bind -k ppage history-search-backward
Включение Vi клавишных комбинаций и переназначение Control+C для очистки строки ввода:
set -g fish_key_bindings fish_vi_key_bindings bind -M insert \cc kill-whole-line repaint
Запуск git diff и перерисовка командной строки после этого при нажатии Control+G:
bind \cg 'git diff; commandline -f repaint'
Ограничения терминала
Терминалы Unix, такие как те, в которых работает fish, в основе своей представляют собой технологию 70-х годов. Они имеют некоторые ограничения, которые приложения, работающие внутри них, не могут обойти.
Например, клавиша Control изменяет символ, устанавливая три старших бита в 0. Это означает:
- Многие символы + Control неотличимы от других клавиш. Control+I является табуляцией, Control+J является переводом строки (
\n). - Control и Shift не работают одновременно
Другие клавиши не имеют непосредственного кодирования и отправляются в виде последовательностей с escape-символом. Например, → (вправо) часто отправляет \e\[C. Эти последовательности могут отличаться от терминала к терминалу, и отображение обычно доступно в terminfo(5). Иногда, однако, терминал идентифицируется как, например, xterm-256color для совместимости, но затем неправильно реализует последовательности xterm.
Особый случай: символ Escape
Клавиша Escape может использоваться автономно, например, для переключения из режима вставки в нормальный режим при использовании комбинаций клавиш Vi. Escape также может использоваться как «мета»-клавиша для обозначения начала последовательности escape, например, для функциональных клавиш или клавиш со стрелками. Также можно определить пользовательские комбинации, начинающиеся с символа Escape.
Удержание клавиши Alt вместе с другой клавишей обычно также отправляет символ Escape, например, удержание Alt+a отправит символ Escape и затем символ «a».
Fish ожидает некоторое время после получения символа Escape, чтобы определить, является ли он автономным или частью последовательности escape. Во время ожидания дополнительные нажатия клавиш заставляют клавишу Escape действовать как мета-клавиша. Если другие нажатия клавиш не поступают, она обрабатывается как автономная клавиша Escape. Время ожидания установлено в 30 миллисекунд (0,03 секунды). Его можно настроить, установив переменную fish_escape_delay_ms значением от 10 до 5000 мс. Это может быть универсальная переменная, которую вы устанавливаете один раз из интерактивной сессии. Таким образом, у символа Escape есть собственный таймаут, настроенный с помощью fish_escape_delay_ms.
См. также Последовательности клавиш.
© 2005-2009 Axel Liljencrantz, 2009-2023 fish-shell contributors
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.7/cmds/bind.html