Почему я всё ещё люблю Fish Shell
В 2017 году я написала о том, как сильно люблю Fish Shell, и спустя 7 лет ежедневного использования, я нашла ещё больше причин для восхищения. Поэтому решила написать новый пост, где соберу старые и новые причины моей любви к этой оболочке.
Сегодня я задумалась об этом, потому что пыталась понять, почему мой терминал больше не ломается, когда я ввожу cat
бинарных файлов. Ответ оказался прост: Fish исправляет терминал! И мне это показалось невероятно крутым.
1. Нет необходимости в настройке
За 10 лет использования Fish я ни разу не сталкивалась с желанием что-то настроить. Fish просто работает так, как мне нужно. Мой конфигурационный файл Fish содержит только:
- переменные окружения;
- псевдонимы (например,
alias ls eza
,alias vim nvim
и т.д.); - интеграции с инструментами вроде
direnv
черезhook fish | source
; - скрипт, который настраивает цвета терминала.
Мне говорили, что если нужно, то настраивать Fish очень легко.
2. Автоподсказки из истории команд
Моя любимая функция в Fish — это автоподсказки команд из истории. Когда я начинаю вводить команду, Fish автоматически предлагает (серым цветом) похожую команду, которую я недавно запускала. Я могу нажать стрелку вправо, чтобы принять предложение, или продолжить ввод, чтобы проигнорировать подсказку.
Пример: я ввожу «v», и Fish предполагает, что я хочу снова выполнить последнюю команду с vim
.
2.5. «Умные» автоподсказки
Одной из моих любимых тонких функций автодополнения является то, как Fish работает с путями. Например, если я ввожу:
$ ls blah.txt
Эта команда будет предлагаться только в директориях, где существует файл blah.txt
. В других папках она просто не появится.
3. Вставка многострочных команд
Если в Bash вставить несколько строк команд, они будут сразу выполнены:
$ echo hi
$ touch blah
$ echo hi
Это может быть опасно, если я не хотела бы выполнить все команды сразу. В Fish все команды будут вставлены в одно приглашение, и я смогу решить, запускать их или нет.
4. Удобное автодополнение по Tab
Когда я запускаю ls
и нажимаю Tab, Fish выводит все имена файлов в виде аккуратной таблицы. Я могу использовать Tab, Shift+Tab или стрелки для навигации по этой таблице.
Кроме того, я могу дополнить имя файла, набрав часть его из середины, что особенно полезно, если имя начинается с необычного символа.
5. Удобное стандартное приглашение (включая интеграцию с Git)
По умолчанию приглашение Fish включает всю необходимую информацию:
- имя пользователя;
- имя хоста;
- текущую папку;
- интеграцию с Git (состояние репозитория);
- статус последней команды (если она завершилась с ошибкой).
6. Удобная работа с историей
В Fish максимальный размер истории по умолчанию составляет 256 000 команд, чего достаточно для любого сценария использования. Все команды, которые я запускала, доступны в новых вкладках сразу, без необходимости завершать сессии.
7. Поиск по истории с помощью стрелки вверх
Для поиска команд в истории я просто начинаю вводить, например, config.fish
, и нажимаю стрелку вверх, чтобы вернуться к последней команде с этим файлом.
8. Терминал больше не ломается
Раньше, используя Bash, я часто случайно вводила бинарные файлы в терминал, что ломало его. Fish при каждом выводе приглашения автоматически «чинит» терминал, предотвращая такие проблемы, как неработающие символы или неправильное отображение цветов.
9. Отключён Ctrl+S
Fish по умолчанию отключает комбинацию Ctrl+S, которая обычно замораживает терминал. Это удобная функция, которая избавляет от случайных проблем.
10. fish_add_path
В Fish можно использовать команду fish_add_path /opt/whatever/bin
, чтобы добавить путь в переменную PATH глобально и навсегда. Это удобно, хотя иногда можно забыть, где именно вы добавили этот путь.
11. Подсветка синтаксиса
Команды, которые не существуют, подсвечиваются красным цветом по умолчанию, что сразу предупреждает об ошибке.
12. Удобные циклы
Синтаксис циклов в Fish намного проще, чем в Bash. Вот пример:
for i in *.yaml
echo $i
end
Fish также автоматически добавляет отступы в циклах, что делает код более читабельным.
13. Удобное редактирование многострочных команд
В Fish можно легко редактировать многострочные команды. Если использовать стрелку вверх для вызова команды из истории, она будет отображаться в том же формате, что и вводилась, в отличие от Bash, который сжимает её в одну строку.
14. Ctrl+стрелка влево
В Fish доступна комбинация Ctrl+стрелка влево/вправо для перемещения между словами, что очень удобно при редактировании команд.
Проблемы с совместимостью
Не все инструменты сразу поддерживают Fish, что иногда вызывает неудобства. Однако с годами Fish становится всё более популярным, и многие проекты уже добавили его поддержку.
Популярность Fish
Недавно я провела опрос в Mastodon, и из 2600 респондентов 16% использовали Fish. Это неплохой показатель, учитывая, что Fish не является стандартной оболочкой в большинстве систем.
Подходит ли вам Fish?
Fish — это не для всех. Если вы, как и я, любите минимализм в настройках и удобные стандартные опции, возможно, Fish подойдёт и вам. Если вы проводите много времени в терминале и цените комфорт, Fish может значительно улучшить ваш опыт работы.