Spec-Zone.ru › Fish 3.7

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'
END_OF_DOCUMENT_MARKER

Ограничения терминала

Терминалы 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

Spec-Zone.ru

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