Spec-Zone.ru › Fish 3.6

Интерактивное использование

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:

Переменная

Значение

fish_color_normal

цвет по умолчанию

fish_color_command

команды, такие как echo

fish_color_keyword

ключевые слова, такие как if — если не установлено, используется цвет команды

fish_color_quote

текст в кавычках, например "abc"

fish_color_redirection

перенаправления ввода-вывода, например >/dev/null

fish_color_end

разделители процессов, например ; и &

fish_color_error

синтаксические ошибки

fish_color_param

обычные параметры команд

fish_color_valid_path

параметры, являющиеся именами файлов (если файл существует)

fish_color_option

опции, начинающиеся с «-», до первого параметра «--»

fish_color_comment

комментарии, например ‘# важно’

fish_color_selection

выделенный текст в режиме vi visual

fish_color_operator

операторы разворачивания параметров, такие как * и ~

fish_color_escape

последовательности экранирования символов, такие как \n и \x70

fish_color_autosuggestion

автодополнение (предлагаемая остальная часть команды)

fish_color_cwd

текущий рабочий каталог в приглашении по умолчанию

fish_color_cwd_root

текущий рабочий каталог в приглашении по умолчанию для пользователя root

fish_color_user

имя пользователя в приглашении по умолчанию

fish_color_host

имя хоста в приглашении по умолчанию

fish_color_host_remote

имя хоста в приглашении по умолчанию для удаленных сеансов (например, ssh)

fish_color_status

ненулевой код выхода последней команды в приглашении по умолчанию

fish_color_cancel

индикатор «^C» для отмененной команды

fish_color_search_match

соответствия поиска в истории и выбранные элементы средства просмотра (только фон)

Если переменная не установлена или пуста, 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_progress

индикатор выполнения в левом нижнем углу

fish_pager_color_background

цвет фона строки

fish_pager_color_prefix

префиксная строка, т. е. строка, которая должна быть завершена

fish_pager_color_completion

само завершение, т. е. предлагаемая остальная часть строки

fish_pager_color_description

описание завершения

fish_pager_color_selected_background

фон выбранного завершения

fish_pager_color_selected_prefix

префикс выбранного завершения

fish_pager_color_selected_completion

суффикс выбранного завершения

fish_pager_color_selected_description

описание выбранного завершения

fish_pager_color_secondary_background

фон каждого второго невыбранного завершения

fish_pager_color_secondary_prefix

префикс каждого второго невыбранного завершения

fish_pager_color_secondary_completion

суффикс каждого второго невыбранного завершения

fish_pager_color_secondary_description

описание каждого второго невыбранного завершения

Когда вторичные или выбранные переменные не установлены или пусты, используются обычные переменные, за исключением $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 ../../../.

Преимущества перед псевдонимами заключаются в том, что вы можете увидеть фактическую команду перед её использованием, добавить к ней или изменить её, и фактическая команда будет сохранена в истории.

[1]

Любое привязанное действие, выполняющее функцию expand-abbr или execute функции bind, будет расширять сокращения. По умолчанию Управление+Пробел привязано к вставке пробела.

Настраиваемый заголовок

При использовании большинства виртуальных терминалов можно установить сообщение, отображаемое в строке заголовка окна терминала. В 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.

END_OF_DOCUMENT_MARKER

Редактор командной строки

Редактор 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 и Vi, потому что они не являются привязками к редактированию текста, или потому что действия Vi/Vim для конкретной клавиши не имеют смысла для оболочки.

  • Tab завершает текущий токен. Shift+Tab завершает текущий токен и запускает режим поиска в просмотрщике. Tab эквивалентно Control+I.
  • ← (влево) и → (вправо) перемещают курсор влево или вправо на один символ. Если курсор уже находится в конце строки, а доступна автоматическая подсказка, → принимает автоматическую подсказку.
  • Enter выполняет текущую командную строку или вставляет символ новой строки, если она ещё не завершена (например, отсутствует ) или end).
  • Alt+Enter вставляет символ новой строки в позиции курсора.
  • Alt+← и Alt+→ перемещают курсор на одно слово влево или вправо (к следующему пробелу или знаку препинания) или перемещает вперёд/назад в истории каталогов, если командная строка пустая. Если курсор уже находится в конце строки, и доступна автоматическая подсказка, Alt+→ (или Alt+F) принимает первое слово в подсказке.
  • Control+← и Control+→ перемещают курсор на одно слово влево или вправо. Эти сочетания принимают одно слово из автоматической подсказки — ту часть, по которой они перемещаются.
  • Shift+← и Shift+→ перемещают курсор на одно слово влево или вправо, не останавливаясь на знаках препинания. Эти сочетания принимают одно большое слово из автоматической подсказки.
  • ↑ (вверх) и ↓ (вниз) (или Control+P и Control+N для любителей Emacs) ищут в истории команд предыдущую/следующую команду, содержащую строку, указанную в командной строке до начала поиска. Если командная строка была пустой при старте поиска, все команды подходят. См. раздел история для получения дополнительной информации о поиске в истории.
  • Alt+↑ и Alt+↓ ищут в истории команд предыдущий/следующий токен, содержащий токен под курсором до начала поиска. Если командная строка не находилась на токене при старте поиска, все токены подходят. См. раздел история для получения дополнительной информации о поиске в истории.
  • Control+C прерывает/уничтожает выполняемое действие (SIGINT).
  • Control+D удаляет один символ справа от курсора. Если командная строка пустая, Control+D завершит работу fish.
  • Control+U удаляет содержимое от начала строки до курсора (перемещая его в буфер обмена).
  • Control+L очищает и перерисовывает экран.
  • Control+W удаляет предыдущий компонент пути (всё до предыдущего “/”, “:” или “@”) (перемещая его в буфер обмена).
  • Control+X копирует текущий буфер в буфер обмена системы, Control+V вставляет содержимое буфера обмена. (см. fish_clipboard_copy и fish_clipboard_paste)
  • Alt+D перемещает следующее слово в буфер обмена.
  • Alt+H (или F1) отображает страницу справки для текущей команды, если она существует.
  • Alt+L отображает содержимое текущего каталога, если курсор не установлен на аргументе каталога; в этом случае будет отображено содержимое этого каталога.
  • Alt+O открывает файл в позиции курсора в просмотрщике.
  • Alt+P добавляет строку &| less; в конец задания под курсором. В результате вывод команды будет отображаться в просмотрщике.
  • Alt+W выводит краткое описание команды под курсором.
  • Alt+E редактирует текущую командную строку в внешнем редакторе. Редактор выбирается из первого доступного из переменных $VISUAL или $EDITOR.
  • Alt+V То же, что и Alt+E.
  • Alt+S Добавляет sudo к началу текущей командной строки. Если командная строка пуста, добавит sudo к последней командной строке.
  • Control+Space Вставляет пробел без раскрытия сокращения. Для режима vi это относится только к режиму вставки.

Команды режима 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.

[2]

Эти функции полагаются на внешние инструменты. В настоящее время поддерживаются 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».

[3]

Или другое сочетание клавиш, вызывающее функцию ввода history-pager. См. bind для списка.

[4]

Или другое сочетание клавиш, вызывающее функцию ввода pager-toggle-search.

Перемещение по каталогам

Перемещение по каталогам обычно выполняется с помощью команды cd, но fish предлагает и некоторые расширенные функции.

Текущий рабочий каталог можно отобразить с помощью команды pwd или переменной $PWD специальной переменной. Обычно ваше приглашение уже это делает.

История каталогов

Fish автоматически сохраняет историю посещённых каталогов с помощью cd, сохраняя эту историю в переменных dirprev и dirnext.

Для взаимодействия с этой историей каталогов предоставляются несколько команд:

  • dirh выводит историю
  • cdh отображает приглашение для быстрого перехода по истории
  • prevd перемещается назад по истории. Привязано к Alt+←
  • nextd перемещается вперёд по истории. Привязано к Alt+→

Стек каталогов

Другой набор команд, обычно доступный и в других оболочках, таких как bash, работает со стеком каталогов. Обработка стека не автоматическая и требует явных вызовов следующих команд:

  • dirs выводит стек
  • pushd добавляет каталог на вершину стека и делает его текущим рабочим каталогом
  • popd удаляет каталог с вершины стека и изменяет текущий рабочий каталог

© 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

Spec-Zone.ru

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