Spec-Zone.ru › Fish 3.7

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

Fish гордится своей удобной интерактивной работой. Это обусловлено несколькими функциями, которые мы объясним в следующих разделах.

Fish используется путём ввода команд на языке fish, см. Язык Fish для получения информации об этом.

Справка

Fish обладает обширной системой справки. Используйте команду help, чтобы получить справку по определённой теме или команде. Например, написание help syntax отображает раздел синтаксиса этой документации.

Fish также имеет страницы справки (man pages) для своих команд и переводит страницы справки в man pages. Например, 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).

Для принятия автодополнения (заменяющего содержимое командной строки) нажмите → или Ctrl+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. Нажатие Ctrl+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 обычно пытается $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

Переменные, влияющие на цвета пейджера:

Переменная

Значение

Когда переменные secondary или selected не заданы или пусты, используются обычные переменные, за исключением $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 function, будет расширять сокращения. По умолчанию Управление+Пробел привязан к вставке пробела.

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

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

set -U fish_greeting

или вы можете установить её глобально в файле config.fish:

set -g fish_greeting 'Hey, stranger!'

или вы можете запрограммировать её, изменив функцию:

function fish_greeting
    random choice "Hello!" "Hi" "G'day" "Howdy"
end

сохраните это в config.fish или файле функций. Вы также можете использовать команды funced и funcsave для лёгкой правки.

Режим конфиденциальности

Если $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 и 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 удаляет от курсора до конца строки (перемещая его в Буфер обмена (Кольцо убитых)).
  • Escape и Control+G отменяют текущую операцию. Непосредственно после однозначного завершения это отменяет его.
  • Alt+C приводит текущее слово к верхнему регистру.
  • Alt+U переводит текущее слово в верхний регистр.
  • Control+T меняет местами два последних символа.
  • Alt+T меняет местами два последних слова.
  • Control+Z, Control+_ (Control+/ на некоторых терминалах) отменяет последнее редактирование строки.
  • Alt+/ отменяет последнюю отмену.
  • Control+R открывает историю в просмотрщике. Это отобразит записи истории, соответствующие поиску, по несколько за раз. Нажатие Control+R еще раз выполнит поиск более ранних записей, нажатие Control+S (иначе переключает поиск в просмотрщике) перейдет к более новым записям. Поле поиска всегда будет выделено.

Вы можете изменить эти сочетания клавиш с помощью встроенной команды bind.

Команды режима Vi

Режим Vi позволяет использовать команды в стиле Vi в командной строке. Изначально активен режим вставки. Esc переключает на режим команд. Команды, доступные в режимах команд, вставки и визуального выбора, описаны ниже. Режим 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 cursors to an underscore
set fish_cursor_replace_one underscore
set fish_cursor_replace underscore
# Set the external cursor to a line. The external cursor appears when a command is started.
# The cursor shape takes the value of fish_cursor_default when fish_cursor_external is not specified.
set fish_cursor_external line
# 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 знает формы «block», «line» и «underscore», другие значения будут проигнорированы.

Если форма курсора не изменяется после установки вышеперечисленных переменных, скорее всего, ваш эмулятор терминала не поддерживает необходимые возможности. Также возможно, что fish_vi_cursor некорректно определил возможности вашего терминала (например, если вы используете tmux). В этом случае вы можете принудительно заставить fish_vi_cursor установить форму курсора, задав $fish_vi_force_cursor в config.fish. Для применения изменений необходимо перезапустить fish. Если проблема с формой курсора остаётся после этого, это почти наверняка проблема с вашим эмулятором терминала, а не с fish.

Режим команд

Режим команд также известен как нормальный режим.

  • h перемещает курсор влево.
  • l перемещает курсор вправо.
  • k и j ищут в истории команд предыдущую/следующую команду, содержащую строку, указанную в командной строке до начала поиска. Если командная строка была пустой в момент начала поиска, все команды подходят. Подробнее об поиске в истории см. в разделе история. В многострочных командах они перемещают курсор вверх и вниз соответственно.
  • i переходит в режим вставки в текущей позиции курсора.
  • Shift+I переходит в режим вставки в начале строки.
  • v переходит в режим визуального выбора в текущей позиции курсора.
  • a переходит в режим вставки после текущей позиции курсора.
  • Shift+A переходит в режим вставки в конце строки.
  • o вставляет новую строку под текущей и переходит в режим вставки
  • O (заглавная “o”) вставляет новую строку над текущей и переходит в режим вставки
  • 0 (ноль) перемещает курсор в начало строки (оставаясь в режиме команд).
  • d+d удаляет текущую строку и помещает её в Буфер обмена (Кольцо вырезания).
  • Shift+D удаляет текст после текущей позиции курсора и помещает его в Буфер обмена (Кольцо вырезания).
  • p вставляет текст из Буфера обмена (Кольцо вырезания).
  • u отменяет последнее изменение командной строки.
  • Control+R повторяет последнее изменение.
  • [ и ] ищут в истории команд предыдущий/следующий токен, содержащий токен под курсором до начала поиска. Подробнее об поиске в истории см. в разделе история.
  • / открывает историю в просмотрщике. Это покажет записи истории, соответствующие поиску, по несколько за раз. Нажатие ещё раз будет искать более ранние записи, нажатие Control+S (иначе переключает поиск в просмотрщике) перейдёт к более новым записям. Поисковая строка всегда будет выделена.
  • Backspace перемещает курсор влево.
  • g / G перемещает курсор в начало/конец командной строки соответственно.
  • :q завершает работу fish.

Режим вставки

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

Если вы передумаете относительно привязки и захотите вернуться к значениям по умолчанию Fish, просто удалите её:

bind --erase \cc

Fish запоминает свои предварительные настройки привязок, поэтому они будут действовать снова. Это избавит вас от необходимости запоминать их прежние значения и добавлять их вручную.

Если вы используете привязки vi, обратите внимание, что bind по умолчанию будут привязаны к клавишам в режиме команд. Чтобы привязать что-то в режиме ввода:

bind --mode insert \cc 'commandline -r ""'

Последовательности нажатий клавиш

Терминал сообщает Fish о нажатых вами клавишах, отправляя некоторые последовательности байтов для описания этих нажатий. Для некоторых клавиш это просто — нажатие a означает, что терминал отправляет «a». В других случаях это сложнее, и терминалы по-разному передают данные.

В таких случаях 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 ничего с этим не может сделать. Когда fish_key_reader выводит одну и ту же последовательность для двух разных клавиш, это означает, что ваш терминал отправляет одну и ту же последовательность для них.

Кроме того, Esc эквивалентно Alt в терминале. Чтобы отличить нажатие Esc, за которым следует другая клавиша, от нажатия Alt и этой клавиши (или последовательности, отправляемой клавишей), Fish ожидает некоторое время после получения символа Esc. Это настраивается через переменную fish_escape_delay_ms.

Если вы хотите, чтобы нажатие Esc, за которым следует символ, считалось Alt+этим символом, установите это значение выше, например:

set -g fish_escape_delay_ms 100

Аналогично, для устранения неоднозначности других нажатий клавиш, где вы привязали подпоследовательность и более длинную последовательность, Fish использует fish_sequence_key_delay_ms:

# This binds "jk" to switch to normal mode in vi-mode.
# If you kept it like that, every time you press "j",
# fish would wait for a "k" or other key to disambiguate
bind -M insert -m default jk cancel repaint-mode

# After setting this, fish only waits 200ms for the "k",
# or decides to treat the "j" as a separate sequence, inserting it.
set -g fish_sequence_key_delay_ms 200

Копирование и вставка (кольцо убитых)

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.7/interactive.html

Spec-Zone.ru

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