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 управляет привязками.
Он может добавлять привязки, если ему передана ПОСЛЕДОВАТЕЛЬНОСТЬ символов для привязки. Эти символы должны быть записаны как escape-последовательности fish. Наиболее важные из них — \c для клавиши Control, и \e для клавиши Escape, а также, по историческим причинам, клавиша 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 — это команда shellscript, рекомендуется поместить фактический код в функцию и просто привязать ее к имени функции. Таким образом, становится значительно проще протестировать функцию во время редактирования, а результат обычно становится более читаемым.
Если скрипт создает вывод, он должен завершиться вызовом commandline -f repaint, чтобы сообщить fish, что требуется перерисовка.
Обратите внимание, что специальные функции ввода нельзя объединять с обычными командами shell script. Команды должны быть полностью последовательностью специальных функций ввода (из bind -f) или всех команд shell script (т. е. допустимого скрипта 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работают на уровне «user», за исключением вывода списка, который покажет оба уровня. Все вызовы, кроме вставки новых привязок, могут работать с обоими уровнями одновременно (если указаны как --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-inner-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
Включение Виртуальных клавиш управления и переназначение 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.5/cmds/bind.html