Spec-Zone.ru › Fish 3.6

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

сделать текущее слово начинающимся с заглавной буквы

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

добавить аргумент в начало командной строки. Если командная строка уже начинается с аргумента, это удалит префикс вместо этого. Начинается с последней команды из истории, если командная строка пустая.

Примеры

Выход из оболочки при нажатии Ctrl+D:

bind \cd 'exit'

Выполнение поиска по истории при нажатии Page Up:

bind -k ppage history-search-backward

Включение Клавишных сочетаний Vi и переназначение Ctrl+C для очистки строки ввода:

set -g fish_key_bindings fish_vi_key_bindings
bind -M insert \cc kill-whole-line repaint

Запуск git diff и перерисовка командной строки после этого при нажатии Ctrl+G:

bind \cg 'git diff; commandline -f repaint'
END_OF_DOCUMENT_MARKER

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

Терминалы Unix, такие как те, в которых работает fish, в основе своей представляют собой технологию 70-х годов. Они имеют некоторые ограничения, которые приложения, работающие внутри них, не могут обойти.

Например, клавиша управления изменяет символ, устанавливая три старших бита в 0. Это означает:

  • Многие символы + управление неотличимы от других клавиш. Управление+I равно табу, Управление+J равно новой строке (\n).
  • Управление и Shift не работают одновременно

Другие клавиши не имеют прямого кодирования и отправляются в виде последовательностей эскейпов. Например, → (Вправо) часто отправляет \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 мс. Это может быть универсальная переменная, которую вы устанавливаете один раз из интерактивной сессии.

© 2005-2009 Axel Liljencrantz, 2009-2023 fish-shell contributors
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.6/cmds/bind.html

Spec-Zone.ru

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