Взаимодействие
Fish гордится своей удобством в интерактивном режиме. Это обусловлено несколькими функциями, которые мы объясним в следующих разделах.
Fish используется с помощью команд на языке Fish, см. Язык Fish для получения информации об этом.
Помощь
Fish обладает обширной системой помощи. Используйте команду help, чтобы получить помощь по конкретной теме или команде. Например, написание help syntax отображает раздел синтаксиса этой документации.
Fish также имеет страницы man для своих команд и преобразует страницы помощи в страницы man. Например, man set покажет документацию для set в виде страницы man.
Помощь по конкретному встроенному элементу также может быть получена с параметром -h. Например, чтобы получить помощь по встроенному элементу fg, введите fg -h или help fg.
Основную страницу можно просмотреть с помощью help index (или просто help) или man fish-doc. Руководство можно просмотреть с помощью help tutorial или man fish-tutorial.
Автодополнение
Fish предлагает команды по мере ввода, основываясь на истории команд, дополнениях и допустимых путях к файлам. По мере ввода команд вы увидите предложение после курсора, в приглушенном сером цвете (который можно изменить с помощью переменной fish_color_autosuggestion).
Для принятия автодополнения (заменяющего содержимое командной строки) нажмите → или Control+F. Для принятия первого предложенного слова нажмите Alt+→ или Alt+F. Если автодополнение не соответствует вашим требованиям, просто проигнорируйте его: оно не будет выполнено, пока вы его не примете.
Автодополнение — мощный способ быстро вызвать часто вводимые команды, набрав первые несколько символов. Это также эффективный метод навигации по иерархии каталогов.
Если вы не хотите использовать автодополнение, вы можете отключить его, установив $fish_autosuggestion_enabled в 0:
set -g fish_autosuggestion_enabled 0
Автодополнение по табуляции
Автодополнение по табуляции — это функция экономии времени любого современного оболочки. Когда вы нажимаете Tab, Fish пытается угадать остальную часть слова под курсором. Если он находит только один вариант, он вставляет его. Если он находит больше, он вставляет самую длинную однозначную часть, а затем открывает меню («страничный просмотр»), в котором можно перемещаться, чтобы найти то, что вы ищете.
В страничном просмотре можно перемещаться с помощью клавиш со стрелками, Page Up / Page Down, Tab или Shift+Tab. Нажатие Control+S (связывание pager-toggle-search — / в режиме vi) открывает меню поиска, которое можно использовать для фильтрации списка.
Fish предоставляет некоторые общие дополнения:
- Команды (встроенные, функции и обычные программы).
- Имена переменных оболочки.
- Имена пользователей для расширения тильды.
- Имена файлов, даже в строках с подстановкой символов, таких как
*и**.
Он также предоставляет большое количество специальных скриптовых дополнений для программ. Большинство этих дополнений — это простые варианты, такие как опция -l для ls, но некоторые более продвинутые. Например:
- Программы
manиwhatisотображают все установленные страницы man в качестве дополнений. - Программа
makeиспользует все целевые файлы в файле Makefile в текущем каталоге в качестве дополнений. - Команда
mountиспользует все точки подключения, указанные в файле fstab, в качестве дополнений. - Команда
sshиспользует всех хостов, хранящихся в файле known_hosts, в качестве дополнений. (Для получения дополнительной информации см. документацию по ssh) - Команда
suотображает пользователей в системе - Команды
apt-get,rpmиyumотображают установленные или устанавливаемые пакеты
Вы также можете написать свои собственные дополнения или установить некоторые, полученные от других. Для этого см. Написание собственных дополнений.
Синтаксическое выделение
Fish интерпретирует командную строку по мере её ввода и использует синтаксическое выделение для предоставления обратной связи. Наиболее важной обратной связью является обнаружение потенциальных ошибок. По умолчанию ошибки отмечаются красным цветом.
Обнаруженные ошибки включают:
- Несуществующие команды.
- Чтение из или добавление в несуществующий файл.
- Неправильное использование перенаправлений вывода.
- Неправильное количество скобок
Для настройки синтаксического выделения можно изменить переменные окружения, перечисленные в разделе Переменные для изменения цветов выделения.
Fish также предоставляет готовые темы цветовых схем, которые можно выбрать с помощью fish_config. Запуск просто fish_config откроет интерфейс браузера, или вы можете использовать fish_config theme в терминале.
Например, чтобы отключить почти все цветовые выделения:
fish_config theme choose none
Или, чтобы увидеть все темы прямо в вашем терминале:
fish_config theme show
Переменные синтаксического выделения
Цвета, используемые fish для синтаксического выделения, можно настроить, изменив значения различных переменных. Значение этих переменных может быть одним из цветов, поддерживаемых командой set_color. Также поддерживаются модификаторы, принимаемые set_color , такие как --bold, --dim, --italics, --reverse и --underline.
Пример: чтобы ошибки выделялись красным цветом, используйте:
set fish_color_error red --bold
Следующие переменные доступны для изменения цветов выделения в fish:
Переменная | Значение |
|---|---|
| цвет по умолчанию |
| команды, такие как echo |
| ключевые слова, такие как if - возвращается к цвету команды, если не задано |
| строки в кавычках, такие как |
| перенаправления ввода-вывода, такие как >/dev/null |
| разделители процессов, такие как |
| синтаксические ошибки |
| обычные параметры команд |
| параметры, являющиеся именами файлов (если файл существует) |
| опции, начинающиеся с «-», до первого параметра «--» |
| комментарии, такие как ‘# важно’ |
| выделенный текст в режиме vi |
| операторы расширения параметров, такие как |
| экранирование символов, такие как |
| автодополнения (предлагаемая оставшаяся часть команды) |
| текущая рабочая директория в стандартном приглашении |
| текущая рабочая директория в стандартном приглашении для пользователя root |
| имя пользователя в стандартном приглашении |
| имя хоста в стандартном приглашении |
| имя хоста в стандартном приглашении для удалённых сессий (например, ssh) |
| код выхода команды без ошибки в стандартном приглашении |
| индикатор ‘^C’ при отмене команды |
| совпадения поиска по истории и выбранные элементы просмотрщика (только фон) |
Если переменная не задана или пуста, fish обычно пытается $fish_color_normal, за исключением:
-
$fish_color_keyword, где сначала пытается$fish_color_command -
$fish_color_option, где сначала пытается$fish_color_param
Переменные цвета просмотрщика
fish иногда выводит список вариантов в таблице, называемой просмотрщиком.
Пример: чтобы установить фон каждой строки просмотрщика, используйте:
set fish_pager_color_background --background=white
Чтобы получить черный текст на чередующихся белых и серых фонах:
set fish_pager_color_prefix black set fish_pager_color_completion black set fish_pager_color_description black set fish_pager_color_background --background=white set fish_pager_color_secondary_background --background=brwhite
Переменные, влияющие на цвета просмотрщика:
Переменная | Значение |
|---|---|
| полоса прогресса в левом нижнем углу |
| цвет фона строки |
| строка префикса, т.е. строка, которая должна быть дополнена |
| само дополнение, т.е. предлагаемая оставшаяся часть строки |
| описание дополнения |
| фон выбранного дополнения |
| префикс выбранного дополнения |
| суффикс выбранного дополнения |
| описание выбранного дополнения |
| фон каждой второй невыбранной строки дополнения |
| префикс каждой второй невыбранной строки дополнения |
| суффикс каждой второй невыбранной строки дополнения |
| описание каждой второй невыбранной строки дополнения |
Если вторичные или выбранные переменные не заданы или пустые, используются обычные переменные, за исключением $fish_pager_color_selected_background, где сначала используется фон $fish_color_search_match
Сокращения
Чтобы избежать лишнего набора текста, часто используемая команда, например git checkout, может быть сокращена до gco с помощью команды abbr.
abbr -a gco git checkout
После ввода gco и нажатия Пробел или Ввод в командной строке появится полный текст git checkout
Это альтернатива псевдонимам и имеет преимущество в том, что вы видите фактическую команду перед её использованием, и фактическая команда будет сохранена в истории.
Настраиваемое заголовок
При использовании большинства виртуальных терминалов можно установить сообщение, отображаемое в строке заголовка окна терминала. Это можно сделать автоматически в fish, определив функцию fish_title. Функция fish_title выполняется до и после выполнения новой команды или её перевода в фокус, а вывод используется в качестве сообщения строки заголовка. Встроенная функция status current-command всегда возвращает имя задачи, которая должна быть переведена в фокус (или fish если управление возвращается к оболочке) при вызове функции fish_prompt. Первый аргумент fish_title будет содержать строку с последней выполненной командой в фокусе.
Стандартный заголовок fish отображает имя хоста, если подключение через ssh, выполняемую в данный момент команду (если это не fish) и текущую рабочую директорию. Всё это сокращается, чтобы не делать вкладку слишком широкой.
Примеры:
Чтобы отобразить последнюю команду и рабочую директорию в заголовке:
function fish_title
# `prompt_pwd` shortens the title. This helps prevent tabs from becoming very wide.
echo $argv[1] (prompt_pwd)
pwd
end
Настраиваемое приглашение
Когда наступает очередь fish запросить ввод (например, после запуска или завершения команды), он отобразит приглашение. Для этого он выполняет функции fish_prompt и fish_right_prompt.
Вывод первого отображается слева, а вывод второго — справа в терминале. Вывод функции fish_mode_prompt будет добавлен слева, хотя по умолчанию эта функция делает это только при работе в режиме vi-mode.
Настраиваемое приветствие
При интерактивном запуске fish пытается выполнить функцию fish_greeting. По умолчанию fish_greeting выводит простое приветствие. Вы можете изменить его текст, изменив переменную $fish_greeting
Режим приватности
Если $fish_private_mode установлено в значение отличное от пустого, команды не будут записываться в файл истории на диске.
Вы также можете запустить fish --private (или fish -P для краткости). Это скрывает старую историю и предотвращает запись истории на диск. Это полезно для предотвращения утечки личной информации (например, при записи скриншотов) или при работе со конфиденциальными данными.
Вы можете запросить переменную fish_private_mode (if test -n "$fish_private_mode" ...) если хотите учитывать желание пользователя сохранить конфиденциальность и изменить поведение собственных скриптов fish.
Редактор командной строки
Редактор fish поддерживает копирование и вставку, поисковую историю и множество функций редактора, которые могут быть привязаны к специальным сочетаниям клавиш.
Как и bash, и другие оболочки, fish включает два набора сочетаний клавиш (или привязок клавиш): один, вдохновленный текстовым редактором Emacs, и второй — редактором Vi. По умолчанию используется режим Emacs. Можно переключиться на режим Vi, выполнив fish_vi_key_bindings, и вернуться обратно с помощью fish_default_key_bindings. Также можно создать свои собственные привязки клавиш, создав функцию и установив значение переменной fish_key_bindings в её имя. Например:
function fish_hybrid_key_bindings --description \
"Vi-style bindings that inherit emacs-style bindings in all modes"
for mode in default insert visual
fish_default_key_bindings -M $mode
end
fish_vi_key_bindings --no-erase
end
set -g fish_key_bindings fish_hybrid_key_bindings
Хотя сочетания клавиш, включенные в fish, включают многие из популярных сочетаний клавиш из соответствующих текстовых редакторов, это не полная реализация. Включается сочетание клавиш для открытия текущей командной строки в вашем предпочтительном редакторе (Alt+E по умолчанию), если вам нужна полная функциональность вашего редактора.
Команды режима Emacs
Для активации режима emacs используйте fish_default_key_bindings. Это также значение по умолчанию.
- Home или Control+A перемещает курсор к началу строки.
- End или Control+E перемещает курсор в конец строки. Если курсор уже находится в конце строки, и доступно автопредложение, то End или Control+E принимает автопредложение.
- Control+B, Control+F перемещают курсор на один символ влево или вправо или принимают автопредложение так же, как общие привязки ← (влево) и → (вправо) (которые также доступны).
- Control+N, Control+P перемещают курсор вверх/вниз или по истории, как общие привязки стрелок вверх и вниз.
- Delete или Backspace удаляют по одному символу вперед или назад соответственно.
- Control+K перемещает содержимое от курсора до конца строки в Буфер обмена (Кольцо убитых).
- Alt+C приводит текущее слово к верхнему регистру.
- Alt+U приводит текущее слово к верхнему регистру.
- Control+T меняет местами последние два символа.
- Alt+T меняет местами последние два слова.
- Control+Z, Control+_ (Control+/ на некоторых терминалах) отменяет последнее изменение в строке.
- Alt+/ отменяет последнюю отмену.
Вы можете изменить эти сочетания клавиш, используя встроенную функцию bind.
Команды режима Vi
Режим Vi позволяет использовать команды Vi-подобного типа в командной строке. Изначально активен режим вставки. Escape переключается в режим команды. Команды, доступные в режимах команды, вставки и визуального выбора, описаны ниже. Режим Vi использует некоторые привязки с режимом Emacs.
Для активации режима vi используйте fish_vi_key_bindings.
Также возможно добавить все привязки из режима emacs в режим vi, используя что-то вроде:
function fish_user_key_bindings
# Execute this once per mode that emacs bindings should be used in
fish_default_key_bindings -M insert
# Then execute the vi-bindings so they take precedence when there's a conflict.
# Without --no-erase fish_vi_key_bindings will default to
# resetting all bindings.
# The argument specifies the initial mode (insert, "default" or visual).
fish_vi_key_bindings --no-erase insert
end
В режиме vi функция fish_mode_prompt отображает индикатор режима слева от командной строки. Чтобы отключить эту функцию, перезапишите её пустой функцией. Чтобы отобразить режим в другом месте (например, в правой части командной строки), используйте выход fish_default_mode_prompt функции.
Когда привязка меняет режим, она перерисовывает подсказку режима, если она существует, и остальную часть строки, только если она не существует. Таким образом, если вы хотите индикатор режима в fish_prompt, вам необходимо очистить fish_mode_prompt, например, добавив пустой файл в ~/.config/fish/functions/fish_mode_prompt.fish. (Привязки, которые изменяют режим, должны вызывать функцию repaint-mode bind, см. bind)
Функция fish_vi_cursor будет использоваться для изменения формы курсора в зависимости от режима на поддерживаемых терминалах. Следующий фрагмент кода можно использовать для ручного конфигурирования форм курсора после активации режима vi:
# Emulates vim's cursor shape behavior # Set the normal and visual mode cursors to a block set fish_cursor_default block # Set the insert mode cursor to a line set fish_cursor_insert line # Set the replace mode cursor to an underscore set fish_cursor_replace_one underscore # The following variable can be used to configure cursor shape in # visual mode, but due to fish_cursor_default, is redundant here set fish_cursor_visual block
Кроме того, blink можно добавить после каждого из параметров формы курсора, чтобы установить мигающий курсор в указанной форме.
Если форма курсора не меняется после установки вышеперечисленных переменных, вероятно, ваш терминальный эмулятор не поддерживает необходимые возможности для этого. Также возможно, что fish_vi_cursor неправильно определил возможности вашего терминала (например, если вы используете tmux). В этом случае вы можете принудительно заставить fish_vi_cursor установить форму курсора, задав $fish_vi_force_cursor в config.fish. Вам нужно будет перезапустить fish, чтобы изменения вступили в силу. Если установка формы курсора остается нерабочей после этого, это почти наверняка проблема с вашим терминальным эмулятором, а не с fish.
Режим команды
Режим команды также известен как режим нормальный.
- H перемещает курсор влево.
- L перемещает курсор вправо.
- I переключается в режим вставки в текущей позиции курсора.
- V переключается в режим визуального выбора в текущей позиции курсора.
- A переключается в режим вставки после текущей позиции курсора.
- Shift+A переключается в режим вставки в конце строки.
- 0 (ноль) перемещает курсор к началу строки (оставаясь в режиме команды).
- D+D удаляет текущую строку и помещает её в Буфер обмена (Кольцо убитых).
- Shift+D удаляет текст после текущей позиции курсора и помещает его в Буфер обмена (Кольцо убитых).
- P вставляет текст из Буфера обмена (Кольцо убитых).
- U просмотр истории команд в обратном порядке.
- [ и ] поиск в истории команд предыдущего/следующего токена, содержащего токен под курсором до начала поиска. Подробнее о поиске в истории см. раздел история.
- Backspace перемещает курсор влево.
Режим вставки
- Escape переключается в режим команды.
- Backspace удаляет один символ слева.
Режим визуального выбора
- ← (влево) и → (вправо) расширяют выделение назад/вперед на один символ.
- B и W расширяют выделение назад/вперед на одно слово.
- D и X перемещают выделение в Буфер обмена (Кольцо убитых) и переключаются в режим команды.
- Escape и Control+C переключаются в режим команды.
- c и s удаляют выделение и переключаются в режим вставки.
- d и x удаляют выделение и переключаются в нормальный режим.
- X удаляет всю строку и переключается в нормальный режим.
- y копирует выделение и переключается в нормальный режим.
- ~ меняет регистр (верхний/нижний) в выделении и переключается в нормальный режим.
- "*y копирует выделение в буфер обмена и переключается в нормальный режим.
Настраиваемые привязки
В дополнение к стандартным привязка, перечисленным здесь, вы также можете определить свои собственные с помощью bind:
# Just clear the commandline on control-c bind \cc 'commandline -r ""'
Поместите bind инструкции в config.fish или в функцию, названную fish_user_key_bindings.
Последовательность клавиш (\cc) зависит от вашей конфигурации, в частности от терминала. Чтобы узнать, что отправляет терминал, используйте fish_key_reader:
> fish_key_reader # pressing control-c Press a key: Press [ctrl-C] again to exit bind \cC 'do something' > fish_key_reader # pressing the right-arrow Press a key: bind \e\[C 'do something'
Обратите внимание, что некоторые комбинации клавиш неразличимы или не могут быть отключены. Например, сочетание Control-i идентично клавише Tab. Это ограничение терминала, которое fish не может исправить.
Также, Escape эквивалентно Alt в терминале. Чтобы отличить нажатие Escape и затем другой клавиши от нажатия Alt и этой же клавиши (или последовательности, отправляемой клавишей), fish ожидает некоторое время после получения символа escape. Это настраивается с помощью переменной fish_escape_delay_ms.
Если вы хотите, чтобы нажатие Escape и затем символа считалось Alt+этим символом, установите значение переменной выше, например:
set -g fish_escape_delay_ms 100
Копирование и вставка (Буфер обмена)
Fish использует буфер обмена в стиле Emacs для функций копирования и вставки. Например, используйте Control+K (kill-line) для вырезания части строки от текущей позиции курсора до конца строки. Вырезанная строка (в emacs-терминах – убитая строка) добавляется в список вырезанных строк, называемый буфером обмена. Чтобы вставить последнее значение из буфера обмена (в emacs-терминах – выдернуть), используйте Control+Y (функция ввода yank). После вставки, используйте Alt+Y (yank-pop) для перехода к предыдущей вырезанной строке.
Поддерживается копирование и вставка извне, как через привязки Control+X / Control+V (функции fish_clipboard_copy и fish_clipboard_paste, 1), так и через функцию вставки терминала, для которой fish включает «Режим вставки с квадратными скобками», чтобы отличать вставку от ввода текста вручную. Кроме того, при вставке в одинарные кавычки, вставленные одинарные кавычки и обратные слэши автоматически экранируются, чтобы результат можно было использовать как отдельный токен, просто закрыв кавычки после вставки. Элементы буфера обмена хранятся в переменной fish_killring.
-
1 -
Эти функции зависят от внешних инструментов. В настоящее время поддерживаются xsel, xclip, wl-copy/wl-paste и pbcopy/pbpaste.
Многострочный ввод
Редактор командной строки fish может использоваться для работы с командами, состоящими из нескольких строк. Существует три способа сделать команду многострочной:
- Нажатие клавиши Enter, когда блок команд не закрыт, например, когда одна или несколько командных блоков, таких как
for,beginилиif, не имеют соответствующей команды end. - Нажатие Alt+Enter вместо нажатия клавиши Enter.
- Вставка символа обратного слэша (
\) перед нажатием клавиши Enter, чтобы экранировать символ перевода строки.
Редактор командной строки fish работает одинаково в однострочном и многострочном режиме. Для перемещения между строками используйте клавиши влево и вправо, и другие подобные сочетания клавиш.
Поисковая история команд
После выполнения команды она запоминается в списке истории. Повторяющиеся элементы истории автоматически удаляются. Нажатие клавиш вверх и вниз позволяет перемещаться по истории вперёд и назад. Если строка текущей команды не пуста при запуске поиска по истории, отображаются только команды, содержащие введённую в командную строку строку.
Нажатие Alt+↑ и Alt+↓ также выполняет поиск по истории, но вместо поиска по всей команде, каждая команда разбивается на отдельные элементы, как и до её выполнения, и в истории ищется элемент, соответствующий тому, что находится под курсором.
Поиск по истории нечувствителен к регистру, если строка поиска не содержит заглавных букв. Вы можете прервать поиск для редактирования строки поиска, нажав Esc или Page Down.
Добавление пробела в начало командной строки предотвращает сохранение всей строки в истории. Она всё равно будет доступна для вызова до следующей команды, но не будет сохранена на диске. Это позволяет исправлять опечатки и подобные ошибки.
Список истории команд по умолчанию хранится в файле ~/.local/share/fish/fish_history (или $XDG_DATA_HOME/fish/fish_history, если эта переменная задана). Однако, вы можете установить переменную окружения fish_history для изменения имени сеанса истории (в результате получив файл <session>_history); как перед запуском оболочки, так и во время её работы.
Для других манипуляций см. команду history.
Примеры:
Чтобы найти предыдущие записи, содержащие слово «make», введите make в консоли и нажмите клавишу вверх.
Если в командной строке отображается cd m, поместите курсор на символ m и нажмите Alt+↑ для поиска ранее введённых слов, содержащих «m».
© 2022 fish-shell developers
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.5/interactive.html