Интерактивное использование
Fish гордится своей удобной интерактивной работой. Это обусловлено несколькими функциями, которые мы объясним в следующих разделах.
Fish используется путём ввода команд на языке fish, см. Язык Fish для получения информации об этом.
Справка
Fish имеет обширную систему справки. Используйте команду help, чтобы получить справку по определенной теме или команде. Например, написание help syntax отобразит раздел синтаксиса этой документации.
Fish также имеет страницы справки для своих команд и преобразует страницы справки в страницы 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
Автодополнение с Tab — это функция экономии времени любого современного оболочки. Когда вы нажимаете Tab, fish пытается угадать остальную часть слова под курсором. Если он находит только одну возможность, он вставляет её. Если находит больше, он вставляет самую длинную недвусмысленную часть, а затем открывает меню ( «страничник»), которое вы можете использовать для навигации и поиска нужного.
Для навигации по страничнику можно использовать стрелки, Page Up / Page Down, Tab или Shift+Tab. Нажатие Control+S (привязка pager-toggle-search - / в режиме vi) открывает меню поиска, которое можно использовать для фильтрации списка.
Fish предоставляет некоторые общие дополнения, такие как команды, имена переменных, имена пользователей или файлы.
Он также предоставляет большое количество дополнений, специфичных для программы. Большинство из этих дополнений — простые варианты, такие как опция -l для ls, но многие из них более продвинутые. Например:
-
manиwhatisотображают установленные страницы справки в качестве дополнений. -
makeиспользует цели в файле Makefile в текущем каталоге в качестве дополнений. -
mountиспользует точки монтирования, указанные в fstab, в качестве дополнений. -
apt,rpmиyumотображают установленные или устанавливаемые пакеты.
Вы также можете написать свои собственные дополнения или установить какие-то, полученные от других. Для этого см. Написание собственных дополнений.
Скрипты дополнений загружаются по мере необходимости, так же, как и функции. Разница заключается в том, что используется список $fish_complete_path списка вместо $fish_function_path. Обычно новые дополнения можно добавить в ~/.config/fish/completions/name-of-command.fish, и fish автоматически их обнаружит.
Подсветка синтаксиса
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 visual |
| операторы разворачивания параметров, такие как |
| последовательности экранирования символов, такие как |
| автодополнение (предлагаемая остальная часть команды) |
| текущий рабочий каталог в приглашении по умолчанию |
| текущий рабочий каталог в приглашении по умолчанию для пользователя root |
| имя пользователя в приглашении по умолчанию |
| имя хоста в приглашении по умолчанию |
| имя хоста в приглашении по умолчанию для удаленных сеансов (например, ssh) |
| ненулевой код выхода последней команды в приглашении по умолчанию |
| индикатор «^C» для отмененной команды |
| соответствия поиска в истории и выбранные элементы средства просмотра (только фон) |
Если переменная не установлена или пуста, fish обычно пытается $fish_color_normal, за исключением:
-
$fish_color_keyword, где сначала пытается$fish_color_command. -
$fish_color_option, где сначала пытается$fish_color_param. - Для
$fish_color_valid_path, если у него нет цвета, а только модификаторы, он добавляет их к цвету, который в противном случае использовался бы, например$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 и нажатия клавиш Пробел или Ввод, gco в позиции команды превратится в git checkout в командной строке. Если вам нужно вставить gco буквально, используйте Управление+Пробел [1].
Это значительно мощнее, например, с помощью этого можно упростить перемещение вверх по каталогам:
function multicd
echo cd (string repeat -n (math (string length -- $argv[1]) - 1) ../)
end
abbr --add dotdot --regex '^\.\.+$' --function multicd
Теперь .. преобразуется в cd ../, а ... — в cd ../../, и .... расширяется до cd ../../../.
Преимущества перед псевдонимами заключаются в том, что вы можете увидеть фактическую команду перед её использованием, добавить к ней или изменить её, и фактическая команда будет сохранена в истории.
Настраиваемый заголовок
При использовании большинства виртуальных терминалов можно установить сообщение, отображаемое в строке заголовка окна терминала. В 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.
Настраиваемое приветствие
При интерактивном запуске 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+H, которое неотличимо от backspace.
- Alt+Backspace удаляет одно слово назад.
- Alt+< перемещает в начало командной строки, Alt+> перемещает в конец.
- Control+K удаляет от курсора до конца строки (перемещая его в Буфер обмена (Кольцо вырезания)).
- Alt+C делает текущее слово заглавным.
- Alt+U делает текущее слово заглавным.
- Control+T меняет местами последние два символа.
- Alt+T меняет местами последние два слова.
- Control+Z, Control+_ (Control+/ на некоторых терминалах) отменяет последнее изменение строки.
- Alt+/ отменяет последнюю отмену.
- Control+R открывает историю в просмотрщике. Это отобразит записи истории, соответствующие поиску, несколько за раз. Нажатие Control+R еще раз выполнит поиск более ранних записей, нажатие Control+S (в противном случае переключает поиск в просмотрщике) перейдет к более новым записям. Поле поиска всегда будет выделено.
Вы можете изменить эти привязки клавиш с помощью встроенной команды 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).
Функция 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 перемещает курсор вправо.
- k и j ищут в истории команд предыдущую/следующую команду, содержащую строку, указанную в командной строке перед началом поиска. Если командная строка была пустой, когда поиск начался, все команды соответствуют. Более подробная информация о поиске в истории содержится в разделе История. В многострочных командах они перемещают курсор вверх и вниз соответственно.
- i переходит в режим вставки в текущей позиции курсора.
- Shift+R переходит в режим вставки в начале строки.
- v переходит в режим визуального выбора в текущей позиции курсора.
- a переходит в режим вставки после текущей позиции курсора.
- Shift+A переходит в режим вставки в конце строки.
- 0 (ноль) перемещает курсор в начало строки (оставаясь в режиме команд).
- d+d удаляет текущую строку и помещает её в Буфер обмена (Кольцо вырезания).
- Shift+D удаляет текст после текущей позиции курсора и помещает его в Буфер обмена (Кольцо вырезания).
- p вставляет текст из Буфера обмена (Кольцо вырезания).
- u отменяет последнее изменение в командной строке.
- [ и ] ищут в истории команд предыдущий/следующий токен, содержащий токен под курсором перед началом поиска. Более подробная информация о поиске в истории содержится в разделе История.
- / открывает историю в просмотрщике. Это отобразит записи истории, соответствующие поиску, несколько за раз. Нажатие ещё раз переходит к более старым записям, нажатие Control+S (иначе переключает поиск в просмотрщике) переходит к новым записям. Поисковая строка всегда будет выделена.
- Backspace перемещает курсор влево.
Режим вставки
- Escape переходит в режим команд.
- Backspace удаляет один символ слева.
Режим визуального выбора
- ← (влево) и → (вправо) расширяют выбор влево/вправо на один символ.
- h перемещает курсор влево.
- l перемещает курсор вправо.
- k перемещает курсор вверх.
- j перемещает курсор вниз.
- b и w расширяют выбор назад/вперёд на одно слово.
- d и x перемещают выбор в Буфер обмена (Кольцо вырезания) и переходят в режим команд.
- Escape и Control+C переходят в режим команд.
- c и s удаляют выбор и переходят в режим вставки.
- 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 то же самое, что и клавиша ввода табуляции. Это ограничение терминала, и 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 [2]), так и через функцию вставки терминала, для которой fish включает «Режим вставки в скобках», чтобы отличать вставку от вводимого вручную текста. Кроме того, при вставке внутри одинарных кавычек вставленные одинарные кавычки и обратные слэши автоматически экранируются, чтобы результат можно было использовать как один токен, просто закрыв кавычку после. Элементы кольца вырезания хранятся в переменной fish_killring.
Команды begin-selection и end-selection (по умолчанию не привязаны; используются для выделения в режиме визуального редактирования vi) управляют выделением текста вместе с командами перемещения курсора, которые расширяют текущее выделение. Переменная fish_cursor_selection_mode может использоваться для настройки включения в выделение символа под курсором (inclusive) или нет (exclusive). По умолчанию exclusive, что хорошо подходит для любого вида курсора. Для режима vi, и особенно для форм курсора block или underscore, возможно, вы предпочтёте inclusive.
Эти функции полагаются на внешние инструменты. В настоящее время поддерживаются xsel, xclip, wl-copy/wl-paste и pbcopy/pbpaste.
Редактирование многострочных команд
Редактор командной строки fish может использоваться для работы с командами, состоящими из нескольких строк. Существует три способа сделать команду многострочной:
- Нажатие клавиши Enter при незакрытом блоке команд, например, когда одна или несколько команд, таких как
for,beginилиif, не имеют соответствующей команды end. - Нажатие Alt+Enter вместо Enter.
- Вставка символа обратного слэша (
\) перед нажатием Enter, что экранирует символ новой строки.
Редактор командной строки fish работает одинаково в режиме однострочных и многострочных команд. Для перемещения между строками используйте стрелки влево и вправо, а также другие сочетания клавиш.
Поисковая история команд
После выполнения команды она запоминается в списке истории. Любые дублирующие элементы истории автоматически удаляются. Нажав клавиши вверх и вниз, вы можете просматривать историю вперёд и назад. Если текущая строка команд не пустая при запуске поиска по истории, отображаются только команды, содержащие введенную в строку команд строку.
Нажимая Alt+↑ и Alt+↓, также выполняется поиск по истории, но вместо поиска всей строки команды каждая строка разбивается на отдельные элементы так же, как перед выполнением, и история просматривается на предмет соответствия элементу под курсором.
Для более сложных поисков вы можете нажать Ctrl+R, чтобы открыть средство просмотра, позволяющее искать в истории. Оно отображает ограниченное количество записей на странице, нажмите Ctrl+R [3] снова, чтобы перейти к следующей странице, и Ctrl+S [4] — чтобы перейти к предыдущей. Вы можете изменить текст, чтобы уточнить поиск.
Поиск по истории регистронезависимый, если в строке поиска нет заглавных букв. Вы можете остановить поиск, чтобы отредактировать строку поиска, нажав 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».
Или другое сочетание клавиш, вызывающее функцию ввода history-pager. См. bind для списка.
Или другое сочетание клавиш, вызывающее функцию ввода pager-toggle-search.
© 2005-2009 Axel Liljencrantz, 2009-2023 fish-shell contributors
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.6/interactive.html