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'
Ограничения терминала
Терминалы 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