Pull to refresh

Comments 97

Четко получилось:) постараюсь сделать свою версию по цвету, но думаю что лучше не получится)))

UFO just landed and posted this here
UFO just landed and posted this here
Делаем Linux терминал красивым и удобным

Предлагаете поверить на слово? Где примеры, где КДПВ?

Не работает!

$ sudo apt install zsh
Пароль:
* apt is not available for oracle-jdk-bin-1.8 on x86_64
* IMPORTANT: some Java tools are not available on some VMs on some architectures
Да, позавчера, 13 лет назад. Поэтому неуютно на тех. ресурсе с определённой репутацией (довольно неплохой) видеть статьи уровня 4пда или димонвидео (если вы понимаете о чём я).

Если подробнее суть претензии, автор даёт команды, не объясняя сути и области применения. Если он думает, что apt есть везде, то это ошибка. Пример я привёл.
UFO just landed and posted this here
Если пользователь такого уровня, что он не знает, что делать при получении вывода «command not found: curl», то вряд ли он сможет самостоятельно адаптировать команду apt под свой дистрибутив. Статья, конечно, не про пакетный менеджер, но вполне можно было написать что-то вроде «доустановите такой-то пакет» вместо того, чтобы писать команду, которая ничего не даёт пользователю какой-нибудь условной Суси.
Простите, но копировать строку из интернета и пытаться выполнить ее в терминале, не попытавшись понять что она делает (а в вашем случае адаптировать под ваш дистрибутив) — это очень плохой метод, который рано или поздно приведет к проблемам.

Все правильно написано с небольшой ремаркой: шрифт можно ставить любой если это шрифт terminus

Верно, привел пример шрифта, который поддерживает иконки для p10k и красиво, четко выглядит)

Скорее же дайте скриншот. )

UFO just landed and posted this here
autosuggestions не делает ничего выше того, что делает нажатие стрелки вверх (поиск по истории)

Что за эмулятор терминала с табами на скриншотах?

вот меня всегда удивляло, что кому-то приятно работать с такими попугаями. таки на вкус и цвет все фломастеры разные. мне все как-то более по душе обычный «зелёный по черному».
а по теме — это все как-то больше о настройке шелла, а не терминала. а по настройке терминала что-то есть? типа что и как в названии табов, переключение между табами и т.д… а то мне постоянно что-то не так, но я даже толком понять не могу что. так что и в настройках рыться лень. Но может кто уже порылся и что-то интересное насоветует…

В большинстве эмуляторов вкладки уже реализованы, даже есть хоткеи обычно, на создание/открытие/закрытие/переключение между ними.
По поводу зелёного по черному – я сам долго сидел за таким. Потом понял, на сколько проще и приятнее работать, когда у тебя синтаксис подсвечен, а основной цвет не режет глаза

вкладки уже реализованы

Откройте для себя tmux.

Неправда!!! Янтарный по чёрному надо!!!

Кроме шуток — глаза меньше устают.
не знаю, мне неприятно. не знаю почему. Но ещё с доинтернетных времён не любил «янтарные» терминалы.
В некоторых астрономических мобильных приложениях есть ночной режим. При его активации, все элементы интерфейса становятся красными. Считается, что данный способ не засвечивает сетчатку (не снижает ее чувствительность в темноте).
Итак, как же сделать дефолтный терминал удобным и приятным в использовании?
Самый простой и быстрый способ — fishshell.com

Fish имеет достаточно много отличий в синтаксисе базовых конструкций от стандарта, заданного sh (или сейчас уже даже скорее bash). Что, по сути, накладывает требования помнить как эти конструкции писать в двух разных вариациях: совместимой со всем миром sh-like для написания различных скриптов и несовместимой fish-like для работы в терминале. И этот отход от стандартов — прямо такой толстый минус, что fish является штукой сильно на энтузиаста.


P.S. в своё время я пытался из любопытства найти хоть что-нибудь, в чём zsh уступает fish'у, но так ничего и не нашел.

Тоже его хотел вспомнить. Перешел на fish с zsh пару месяцев назад, все настройки считай готовы из коробки.
Я очень сомневаюсь, что просто установив fish, я получу то, что получил в результате действий, описанных в этой статье.
Конечный результат — ну очень на любителя и очень специфичный, имхо.

Чего лично мне не хватает и что я использую у себя:
  1. Информация о текущей директории. Каждый раз набирать pwd, чтобы понять где ты находишься так себе решение
  2. Время запуска команды. Данная информация много раз выручала меня, особенно при отладке
  3. Имя хоста. Да оно есть в названии таба, но как по мне это не очень удобно
  4. Имя текущего пользователя
  5. Хоть какой то пробел между двумя командами, у вас все сливается. Искать что либо в таком сплошном тексте — будет тяжело.

Для сравнения внешний вид терминала и приглашения, которым я пользуюсь последние лет 10
image

Информацию по git специально не стал добавлять. Использую другие инструменты для этого.

слишком многовато лишней информации, дата и время всегда отображаются в правом верхнем углу, в командной строке они не нужны, имя пользователя всегда одно и тоже, или у вас много пользователей на личном mac? ну тоесть всегда лишняя строчка есть в терминале, ненужная

  1. Мне важны дата и время выполнения каждой команды.


  2. Часто подключаюсь к удаленным серверам, так что имя хоста и пользователя тоже нужны



Я пробовал сделать приглашение ввиде одной строки — мне не зашло

Отображение user@host — стандартный, удобный и привычный способ сходу сообразить контекст что у нас тут вообще за терминал открыт и плюс-минус зачем он открыт. Весьма и весьма удобно при куче их.


Про дату соглашусь — для интерактивной работы только перегружает вид. Если же нужно посмотреть когда именно что-то делалось, то спасает правильно настроенная запись в .zsh_history (в частности немедленная запись вместо отложенной, легко способной превратиться в "никогда").

Весь ваш перечень — крайне субъективен. И всё это делается путем выбора иных пунктов во время конфигурации p10k. Поэтому я написал — выберите те элементы, которые нужны ВАМ. Там настраивается и пробел между строками, и время команды, и имя пользователя и хоста просто нажимая другие числа на клавиатуре при выборе.
На счет директории — показывая полный путь, отображается много лишнего. одна длинная строка, которая занимает половину ширины терминала. Именно поэтому я описал, как отображать только текущую директорию. Если вам нужно отображать её полностью, не вносите эту настройку:
image

У вас этого ничего нет, а мой комментарий был именно о вашем финальном варианте.


Длина строки с текущим путем настраивается через переменную окружения — PROMPT_DIRTRIM


Насчет .zsh_history — не использую zsh, по нескольким причинам. Каждый раз искать время в файле неудобно, имхо

Длина строки с текущим путем настраивается через переменную окружения — PROMPT_DIRTRIM
нет, не настраивается. PROMPT_DIRTRIM — длина директории. 10 директорий не будут занимать меньше 20 символов ни при каких настройках, пока они отображаются.

При чем тут zsh_history и о каком времени идет речь?
Дата/время выполнения команды настраивается, как я уже говорил:
image
Выглядит пестро и наляписто, имхо. Но если вас устраивает — то на здоровье.
Как время может выглядеть пестро? Я показал скриншот, чтоб вы увидели возможность настройки отображения времени. Цвета тут при чем? Они меняются, я в статье показал команду, чтоб посмотреть коды цветов. Так же показал, где меняются цвета блоков с директорией и временем/статусом.
В любом случае, цель статьи — помочь новичкам (и не только) сделать терминал приятным и функциональным. Если вам не нравится ни одна комбинация из большого количества настроек, увы, тема вам не подойдет. Я не намерен навязывать никому свое мнение. Ничего не мешает вовсе пропустить часть с кастомизацией внешнего вида, выполнив только первую часть инструкций в статье.
Как время может выглядеть пестро?
как раз — как на вашем скрине

Цвета тут при чем?
когда в терминале проводишь 50%+ от рабочего дня — то очень даже причем. Но тут соглашусь — все очень индивидуально. Кто-то любит когда терминал черным на белом фоне, тук каждому свое. Но встречал пару раз такие кислотные цвета — что просто удивлялся, как у людей глаза не болят от такого

В любом случае, цель статьи — помочь новичкам (и не только) сделать терминал приятным и функциональным.
так я же вам и привел примеры, что в вашем варианте функциональности очень мало. А если убрать информацию о git, то функционала по сравнению с дефолтными настройками по сути не будет совсем

Ничего не мешает вовсе пропустить часть с кастомизацией внешнего вида
тогда вообще нет смысла от PowerLevel10K, имхо. Вся его суть — это про всякого рода визуальные «улучшатели», чтобы коллегам показать, что вы не просто так запустили терминал ;)

Я понял вашу точку зрения. Но я не люблю когда зелёный по черному режет глаза. Гораздо приятнее и проще ориентироваться, когда разные типы текста (строки, команды, аргументы и т.д.) подсвечены разными цветами. Это все очень индивидуально, безусловно. Опять же, я не утверждаю, что моя комбинация цветов и темы — лучшая. Каждому свое, я лишь показал пример с четкими инструкциями, который многим понравился

Проблема автоматического отображения статуса git — очень большие тормоза при любом действии в терминале внутри директории с большим git проектом. Пользоваться невозможно — пришлось отключать.

UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Это можно исправить, независимо от темы, добавив в ~/.zshrc настройки:
git config --add oh-my-zsh.hide-status 1
git config --add oh-my-zsh.hide-dirty 1

В целом, все почти так же настроено. Такой кастом реально удобен.
Т.к. у меня еще и кластеры-шмастеры, открыл для себя kube-ps1 — видно какой контекст установлен и какой кластер ты сейчас сломаешь ))

А чем автодополнение в zsh лучше? Обычный bash может быть немного куцоват из коробки, но установка bash completition обычно решает проблему.

zsh умеет дополнять флаги по табу. Например, довольно удобно обновлять сабмодули в репозитории через


git subm<TAB> u<TAB> --i<TAB> --rec<TAB><ENTER>

У меня bash, тоже так может, полностью поддерживает ваш пример.

Ок, видимо в тех окружениях с bash, что у меня сейчас есть под рукой что-то недоустановлено / недонастроено.
Ещё вспомнил: в zsh, в отличие от bash автодополнение работает в подвыражениях (например, echo "$(...)"), а ещё у меня в командах вида sudo VAR_NAME=/... run_something bash не дополняет путь.

UFO just landed and posted this here
UFO just landed and posted this here
Зато у меня на всех серверах рефлексы выработанные использованием bash работают идентично и корректно.

Вот ровно по этому проще привыкать к тому, что стандартно почти везде по умолчанию. А все эти украшательства просто баловство от нечем заняться. Разве что дома на линуксе сидишь или имеешь PET проект, с которым постоянно ковыряешься. Таскать это по всем поддерживаемым серверам или тем серверам куда тебе пришлось по каким то причинам залогиниться, все равно не будешь.

так в том и дело, что даже если дома на линуксе, то все равно если его переделать, то потом на «чужих» машинах неудобно.
с другой стороны таскать за собой свой .bashrc не большая проблема.

У меня единственный паттерн, ломающийся при входе на сервер с bash после zsh — использование Ctrl+W. В bash он удаляет слово до предыдущего пробельного символа, а zsh все не-alphanumeric символы разделителями считает, благодаря чему вырабатывается привычка, например, последний элемент пути удалять через Ctrl+W.

UFO just landed and posted this here
В баше для удаления до разделителя можно жать Alt+Backspace.
Просто для справки: в zsh поведение ^w можно настроить через WORDCHARS:
export WORDCHARS='*?_-.[]~=&;!#$%^(){}<>'
UFO just landed and posted this here
Плюсую за zinit, перешёл на него после того как испробовал много разных популярных фреймворков и плагин-менеджеров. Очень мощный и гибкий инструмент, со своим cli и вспомогательными тулами, но такой же сложный для понимания и конфигурирования.
Но, тем не менее, работает действительно быстро, вместе с асинхронной темой prompt готов к работе сразу же после вызова терминала, даже если находишься в директории с git и включено отображение информации о репе.
Все эти красивости и плюшки это безусловно хорошо и полезно, если привыкнуть и настроить под себя. Сам пару лет сидел на zsh. Но со временем пришло понимание что когда за день обходишь несколько серверов, в том числе в продакшене где никакой грязи быть не должно и стоит дефолтный баш, есть проблема того что у тебя получается неконстистентное окружение. Соответственно вопрос: есть какой-либо готовый способ настройки дефолтного баша чтобы при ssh-логине на удаленную машину втащить свои настройки, и при логауте их вычистить?
Из коробки думаю нет. Правда что на сервера ставить свой скрипт, заранее написанный, который будет это делать
По идее, при коннекте к SSH-серверу можно переносить некоторые пользовательские переменные окружения — настройка сервера:
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Можно попробовать туда дописать env, отвечающие за отрисовку prompt, но я так не делал и не уверен что это вообще здравая идея.

Красота! Спасибо!
Сделал даже не до конца — стало уже очень красиво

Большинство дистрибутивов поставляется со встроенным Bash.

Это не так.
Цвета. Важная часть оформления терминала — цветовая схема.

Да. Зеленым по черному. Со стороны клиента.
Это не так.

Это так. Гораздо меньше дистрибутивов, где из коробки его нет, чем где он есть. И даже если в каких-то дистрибутивах уже стоит zsh/mksh, то bash там все равно есть, почти всегда. Как минимум для работы скриптов, написанных на нем.
Да. Зеленым по черному. Со стороны клиента.

habr.com/ru/post/516004/#comment_21982298
Это так. Гораздо меньше дистрибутивов, где из коробки его нет, чем где он есть.

Заведите нового пользователя и посмотрите какой у него шел. Речь об этом.

Почти во всех. Дебиан, например. В чем вообще смысл? Если у меня был bash, я создам пользователя, у меня fish появится?

Смысл в том что по дефолту в debian производных (не уверен за все но во всех с которыми сталкивался) пользователь получает совсем не bash.
RH производные — там bash.

Поэтому лично мне ваши слова про debian несколько странно читать.
UFO just landed and posted this here
Я правильно понял насчет установки шрифта, что достаточно скачать например JetBrains Mono Regular Nerd Font Complete Mono.ttf, положить в папку .fonts и
sudo fc-cache -f -v

Так?

Или просто установить fish:


  • Debian based дистрибутивы(с пакетным менеджером apt):


    $ sudo apt-get install fish
    $ sudo chsh -s /bin/fish

    Если нет в репозитории, повторить с предварительным выполнением:


    $ sudo apt-add-repository ppa:fish-shell/release-2
    $ sudo apt-get update

  • Arch based дистрибутивы(с пакетным менеджером pacman):


    $ sudo pacman -S fish

  • Fedora based дистрибутивы(с пакетным менеджером dnf):


    $ dnf install fish

  • Установка как интерпретатор по умолчанию:


    $ chsh -s `which fish`

    В графических терминалах ставится в основном через настройки профиля в поле "Команда" тебуется прописать /bin/fish или usr/bin/fish



Без особых красот как zsh, но есть подсветка синтаксиса и автодополнение команд и всё это по default'у.


Ссылка на официальный сайт с документацией и всем, всем, всем...

Написал бы про fish — нашлись бы люди, кто напишут про zsh. К чему это тут?
Предустановленность одного плагина не влияют на выбор шелла. Я выбрал один, на свое усмотрение и показал, как сделать его лучше. Не спорю, что из fish можно сделать то же самое.
UFO just landed and posted this here
Ну это не бинарь, а шелл скрипт, содержимое которого можно посмотреть перед запуском. А как бы вы сформулировали эту установку?
UFO just landed and posted this here
тот случай, когда терминал — это все же терминал, а не недоделанный xface ))
а если временно нужны панели (те же операции копирования\переноса) — есть mc.
Sign up to leave a comment.

Articles