Spec-Zone.ru › Fish 3.3

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, но также может быть одной из набора специальных функций ввода. К ним относятся функции перемещения курсора, работы с кольцом kill, выполнения автодополнения табом и т. д. Используйте 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 Укажите имя клавиши, такое как '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).

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

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

  • 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, переставить два слова слева от курсора
  • togglecase-char, переключить регистр (регистр) символа под курсором
  • togglecase-selection, переключить регистр (регистр) выделения
  • insert-line-under, добавить новую строку под текущей строкой
  • insert-line-over, добавить новую строку над текущей строкой
  • up-line, переместить вверх на одну строку
  • undo и redo, отменить или повторить последние правки в командной строке
  • upcase-word, сделать текущее слово заглавными буквами
  • yank, вставить последнюю запись из буфера обмена в буфер
  • yank-pop, перейти к предыдущей записи из буфера обмена

Дополнительные функции

Следующие функции включены как обычные функции, но особенно полезны для редактирования ввода:

  • up-or-search и down-or-search, которые перемещают курсор или выполняют поиск в истории в зависимости от положения курсора и текущего режима
  • edit_command_buffer, открыть визуальный редактор (управляемый переменными среды VISUAL или EDITOR) с текущим содержимым командной строки
  • delete-or-exit, выйти из оболочки, если текущая командная строка пустая, или удалить символ под курсором, если нет
  • 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).
  • Управление и 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 мс. Это может быть универсальная переменная, которую вы устанавливаете один раз из интерактивной сессии.

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

Spec-Zone.ru

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