Spec-Zone.ru › Fish 3.4

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

Spec-Zone.ru

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