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 для клавиши Control, \e для клавиши Escape, а также, по историческим причинам, клавиша Alt (иногда также называемая «Meta»).
Например, Alt+W можно записать как \ew, а Control+X (^X) — как \cx. Обратите внимание, что привязки клавиш, основанные на Alt, чувствительны к регистру, а привязки, основанные на Control, — нет. Это ограничение текстовых терминалов, а не fish.
Общую привязку клавиш, которая соответствует, если ни одна другая привязка не подходит, можно установить, указав SEQUENCE пустой строки (то есть ''). Для большинства привязок клавиш имеет смысл привязать её к функции 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 является командой сценария оболочки, рекомендуется поместить фактический код в функцию и просто привязать к имени функции. Таким образом, её становится значительно проще протестировать во время редактирования, а результат также, как правило, более читабелен.
Если сценарий выводит вывод, он должен завершиться вызовом commandline -f repaint для того, чтобы сообщить fish о необходимости перерисовки.
Обратите внимание, что специальные функции ввода нельзя комбинировать с обычными командами сценариев оболочки. Команды должны быть либо цепочкой специальных функций ввода (из bind -f), либо цепочкой команд сценариев оболочки (то есть допустимым сценарием fish).
Если SEQUENCE не указан, выводятся все привязки (или только привязки в заданном MODE). Если SEQUENCE указан, но COMMAND, выводится только привязка, соответствующая указанной последовательности.
Для сохранения пользовательских привязок клавиш поместите инструкции bind в config.fish. Кроме того, fish также автоматически выполняет функцию fish_user_key_bindings , если она существует.
Привязки клавиш могут использовать «режимы», которые имитируют поведенческие режимы ввода Vi. По умолчанию режим — «default», и каждая привязка применяется к одному режиму. Режим можно просмотреть/изменить с помощью переменной $fish_bind_mode.
Параметры
Доступны следующие параметры:
- -k или --key
-
Указывает имя клавиши, например, «влево» или «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работают на уровне «пользователь», за исключением вывода списка, который покажет оба уровня. Все вызовы, кроме вставки новых привязок, могут работать сразу с обоими уровнями (если заданы как --preset, так и --user). --preset следует использовать только в полных наборах привязок (например, при работе сfish_vi_key_bindings). - -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 -
заставить текущее слово начинаться с заглавной буквы
-
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-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-word -
переместить следующее слово в буфер обмена
-
nextd-or-forward-word -
если командная строка пустая, переместиться вперёд в истории каталогов, иначе переместиться на одно слово вправо; или, если вы находитесь в конце командной строки, принять одно слово из текущего предложения автозаполнения.
-
or -
выполнить следующую функцию только в случае успешного выполнения предыдущей (примечание: только некоторые функции сообщают об успехе)
-
pager-toggle-search -
переключает поле поиска, если страница автозаполнения видна.
-
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-х годов. Они имеют некоторые ограничения, которые приложения, работающие внутри них, не могут обойти.
Например, клавиша управления изменяет символ, устанавливая три старших бита в 0. Это означает:
- Многие символы + управление неотличимы от других клавиш. Control+I является табуляцией, Control+J является новой строкой (
\n). - Управление и сдвиг не работают одновременно
Другие клавиши не имеют прямого кодирования и отправляются как последовательности 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 мс. Это может быть универсальная переменная, которую вы устанавливаете один раз из интерактивной сессии.
© 2022 fish-shell developers
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.4/cmds/bind.html