Spec-Zone.ru › Fish 3.2

bind - обработка привязок клавиш в fish

Синтаксис

bind [(-M | --mode) MODE] [(-m | --sets-mode) NEW_MODE] [--preset | --user] [(-s | --silent)] [(-k | --key)] SEQUENCE COMMAND [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 [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, вместо последовательности используется имя клавиши (например, 'down', 'up' или '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. По умолчанию режим — «по умолчанию», и каждая привязка относится к одному режиму. Режим можно просмотреть/изменить с помощью переменной $fish_bind_mode.

Параметры

Доступны следующие параметры:

  • -k или --key Укажите имя клавиши, например 'left' или 'backspace', вместо последовательности символов
  • -K или --key-names Отобразить список доступных имен клавиш. Указание -a или --all включает клавиши, для которых нет известного соответствия
  • -f или --function-names Отобразить список доступных функций ввода
  • -L или --list-modes Отобразить список определённых режимов привязки
  • -M MODE или --mode MODE Укажите режим привязки, в котором используется привязка. По умолчанию — «по умолчанию»
  • -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).

Специальные функции ввода

Доступны следующие специальные функции ввода:

  • 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 и backward-jump, прочитать ещё один символ и перейти к его следующему вхождению перед/после курсора
  • forward-jump-till и backward-jump-till, перейти вправо перед следующим вхождением
  • repeat-jump и repeat-jump-reverse, повторить последнее перемещение в том же/противоположном направлении
  • kill-bigword, переместить следующее слово, разделённое пробелами, в буфер обмена
  • kill-line, переместить всё от курсора до конца строки в буфер обмена
  • kill-selection, переместить выделенный текст в буфер обмена
  • kill-whole-line, переместить строку в буфер обмена
  • kill-word, переместить следующее слово в буфер обмена
  • or, только выполнить следующую функцию, если предыдущая выполнилась успешно (прим.: только некоторые функции сообщают об успехе)
  • pager-toggle-search, переключает поле поиска, если видима постраничная навигация по дополнениям.
  • 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, транспонировать два слова слева от курсора
  • insert-line-under, добавить новую строку под текущей строкой
  • insert-line-over, добавить новую строку над текущей строкой
  • up-line, переместить курсор вверх на одну строку
  • undo и redo, отменить или повторить последние изменения в командной строке
  • upcase-word, перевести текущее слово в верхний регистр
  • yank, вставить последнюю запись из буфера обмена в буфер
  • yank-pop, переместить к предыдущей записи в буфере обмена

Примеры

Выход из оболочки при нажатии 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).
  • Управление и Shift не работают одновременно

Другие клавиши не имеют непосредственного кодирования и отправляются как последовательности escape. Например, → (Вправо) часто отправляет \e\[C. Эти последовательности могут отличаться от терминала к терминалу, и отображение обычно доступно в terminfo(5). Иногда же терминал идентифицируется, например, как xterm-256color для совместимости, но затем неправильно реализует последовательности xterm.

Особый случай: Символ Escape

Клавиша Escape может использоваться самостоятельно, например, для переключения из режима вставки в нормальный режим при использовании Ви-связей. Escape также может использоваться как клавиша "meta", чтобы указать начало последовательности escape, как для функций или клавиш со стрелками. Также можно определить пользовательские сочетания клавиш, начинающиеся с символа Escape.

Удержание Alt и любой другой клавиши обычно также отправляет Escape, например, удержание Alt+a отправит символ Escape и затем "a".

Fish ожидает некоторое время после получения символа Escape, чтобы определить, является ли он самостоятельным или частью последовательности escape. Во время ожидания дополнительные нажатия клавиш заставляют клавишу Escape действовать как клавишу meta. Если другие нажатия клавиш не поступают, она обрабатывается как самостоятельный символ Escape. Время ожидания установлено в 30 миллисекунд (0,03 секунды). Его можно настроить, задав переменную fish_escape_delay_ms значением от 10 до 5000 мс. Это может быть универсальная переменная, которую вы устанавливаете один раз из интерактивной сессии.

© 2020 fish-shell developers
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.2/cmds/bind.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API