Вы когда-нибудь задумывались, сколько времени уходит на переключение между окнами, клики мышью и поиск нужной кнопки в GUI? В мире, где каждая секунда на счету, терминал остается самым мощным и недооцененным инструментом разработчика. Но стандартного набора команд часто недостаточно.
Я подготовил для вас список из пяти утилит, которые не просто ускорят вашу работу, а полностью изменят ваше представление о возможностях командной строки. После их освоения вы будете смотреть на коллег, тянущихся к мыши, с легким недоумением.
Если вам интересен процесс и вы хотите следить за дальнейшими материалами, буду признателен за подписку на мой телеграм-канал. Там я публикую полезныe материалы по разработке, разборы сложных концепций, советы как быть продуктивным и конечно же отборные мемы.
1. lazygit

Вспомните свои ощущения, когда нужно сделать интерактивный rebase для десятка коммитов. Или когда вы случайно закоммитили отладочный console.log и теперь нужно его убрать из предыдущего коммита. Git - невероятно мощный, но его стандартный интерфейс в командной строке заставляет постоянно держать в голове сложные команды и флаги, а цена ошибки высока.
Так вот lazygit - это терминальный псевдографический интерфейс (TUI) для Git, который превращает сложные операции в простые и интуитивно понятные действия. Он дает вам всю мощь Git, но с наглядностью GUI, не заставляя покидать уютный терминал.
Глубокое погружение в возможности:
Атомарные коммиты без усилий: Это главная фишка. Вы открываете
lazygit, видите список измененных файлов. Заходите в файл и видите дифф. Вместо того чтобы делатьgit add ., вы можете построчно или поблочно добавлять изменения в стейджинг, нажимая пробел. Это позволяет создавать идеально чистые, логически разделенные коммиты, которые легко читать и ревьюить.Безболезненный интерактивный rebase: Забудьте про
git rebase -i HEAD~5и редактирование текстового файла. Вlazygitвы видите список коммитов. Хотите объединить два коммита? Пожалуйста. Хотите переименовать? Да без проблем. Это превращает страшную процедуру в простое и наглядное редактирование списка.Визуализация веток и истории:
lazygitнаглядно показывает граф веток. Вы всегда видите, какая ветка от какой отходит, где находитсяHEAD, и какие коммиты еще не отправлены на удаленный сервер. Cherry-pick коммита из другой ветки - это просто выбор коммита и нажатие кнопки.Быстрое разрешение конфликтов: При возникновении конфликта слияния
lazygitпредлагает вам удобный интерфейс, где вы можете выбрать, какой из конфликтующих блоков кода оставить, нажатием одной клавиши.
Первые 15 минут вы будете привыкать к горячим клавишам (хотя они все подписаны). Начните с простого: стейджинг и коммиты. Уже через день вы не сможете представить, как жили без этого раньше.
Установка:
Инструкции для всех ОС и подробная документация есть на официальном репозитории GitHub.
2. tmux

Вы подключились по SSH к удаленному серверу и запустили долгий процесс сборки или миграции данных. Интернет моргнул, соединение оборвалось - процесс прерван. Или локально: у вас открыто 5 вкладок терминала - бэкенд, фронтенд, тесты, Docker, база данных. Перезагрузка компьютера или случайное закрытие окна - и всю эту сложную конструкцию нужно восстанавливать с нуля.
Решение: tmux (Terminal Multiplexer) — это ваш персональный менеджер рабочих сессий в терминале. Он создает слой между вами и запущенными процессами, позволяя им жить своей жизнью, даже когда вы отключаетесь.
Глубокое погружение в возможности:
Сессии - ключ ко всему: Главное понятие в
tmux-это сессия. Вы запускаете и попадаете в новую сессию. Внутри нее вы можете создавать окна и панели. Самое важное: вы можете отсоединиться от сессии. Терминал закроется, но сессия со всеми запущенными в ней процессами продолжит работать в фоне. Позже вы можете вернуться, набрав команду, и все будет в том же состоянии, в котором вы его оставили.-
Идеальная организация рабочего пространства:
Окна: Это как вкладки в браузере. Внутри одной сессии вы можете создать несколько окон для разных контекстов (например, Сервер, Базы данных, Мониторинг).
Панели: Каждое окно можно разделить на несколько независимых панелей. Все в одном окне, без переключений.
Парное программирование: Два разработчика могут подключиться по SSH к одному серверу и присоединиться к одной и той же сессии
tmux. Они будут видеть один и тот же экран и смогут по очереди вводить команды, что идеально подходит для совместной отладки или обучения.
С чего начать: tmux имеет небольшой порог вхождения из-за своей системы команд через префикс. Первым делом научитесь создавать сессии, отсоединяться и присоединяться. Затем освойте создание окон и панелей.
Установка:
Больше информации можно найти в документации на GitHub Wiki.
3. fzf

Стандартный поиск по истории команд (Ctrl+R) ищет только точные совпадения. Поиск файлов через find или ls -R | grep - громоздко и медленно. Мы тратим ценные секунды (которые складываются в часы) на то, чтобы вспомнить точное название файла или команды.
fzf (Fuzzy Finder) — это универсальный интерактивный фильтр с нечетким поиском. Вы просто начинаете набирать символы, которые помните, и fzf мгновенно отфильтровывает список, показывая наиболее релевантные результаты.
Глубокое погружение в возможности:
-
Интеграция из коробки: После установки
fzfобогащает вашу командную строку:Ctrl+R: Вместо стандартного поиска появляется интерактивный список истории команд.Ctrl+T: Открывает поиск файлов и директорий в текущей папке. Выбранный путь подставляется в команду.Alt+C: Ищет директории и мгновенно переходит в выбранную.
-
Сила конвейера (Pipes): Настоящая магия
fzfраскрывается, когда вы используете его с другими командами. Он принимает на вход список строк и позволяет интерактивно выбрать одну из них.-
Интерактивное переключение веток Git:
git branch | fzf | xargs git checkoutЭта команда сначала получает список всех веток, передает его в
fzfдля выбора, а затемxargsподставляет выбранное имя в командуgit checkout. -
Выбор и убийство процесса:
ps -ef | fzf | awk '{print $2}' | xargs kill -9
-
Предпросмотр:
fzfможно настроить так, чтобы справа от списка результатов отображалось окно предпросмотра. Для файлов это будет их содержимое, для коммитов — полный дифф. Это позволяет найти нужное, даже не открывая файл.
С чего начать: Просто установите fzf и запустите скрипт интеграции, который он предложит. Начните использовать Ctrl+R и Ctrl+T в повседневной работе. Когда это войдет в привычку, попробуйте создать свой первый пайплайн, например, с git branch.
Установка:
Инструкции и продвинутые настройки доступны в официальном репозитории.
4. qwen-cli

Вы пишете сложный bash-скрипт и забыли синтаксис. Или вам нужно набросать Dockerfile, но вы не помните всех директив. Или вы видите непонятную ошибку и хотите быстро получить объяснение. Каждый такой случай - это переключение в браузер, запрос к чату гпт или поиск в браузере, что влечет за собой потерю концентрации.
qwen-cli - это официальный CLI-инструмент для взаимодействия с мощными языковыми моделями семейства Qwen от Alibaba. Он позволяет вам задавать вопросы, генерировать код, объяснять команды и многое другое прямо из терминала, используя всю мощь облачной модели.
Глубокое погружение в возможности:
Генерация команд и скриптов: Это самый частый кейс. Вместо того чтобы гуглить, вы просто спрашиваете.
Модель выдаст готовую команду.
Объяснение кода и команд: Вы можете передать содержимое файла или вывод другой команды для анализа
Быстрое прототипирование: Вам нужно написать небольшой сервер на для проверки гипотезы. Вместо того чтобы создавать файлы и писать boilerplate, вы просите и сразу используете без копирования.
С чего начать: Использование qwen-cli требует получения API-ключа. Это бесплатно для стартового объема запросов.
Получите API-ключ: Зарегистрируйтесь на платформе Alibaba Cloud DashScope и создайте API-ключ.
Сохраните ключ: Самый безопасный способ - добавить ключ в переменные окружения. Добавьте строку в ваш файл конфигурации оболочки. Но вы так же можете сделать это и через интерфейс.
Официальный репозиторий: https://github.com/QwenLM/qwen-code
5. ripgrep (rg)

grep - это классика, но в современных проектах он невыносимо медленный. Он пытается искать в гигабайтах зависимостей в node_modules, в бинарных файлах и в логах, заваливая вас мусором.
ripgrep (rg) — это современная реинкарнация grep, написанная на Rust. Он создавался специально для поиска по кодовым базам. Неудивительно, что именно ripgrep является движком поиска по умолчанию в VS Code.
Глубокое погружение в возможности:
Скорость и интеллект по умолчанию:
rgпо умолчанию рекурсивен. Он автоматически игнорирует все, что указано в вашем.gitignore, а также скрытые файлы и бинарники. Благодаря этому и многопоточной архитектуре, он работает на порядок быстрееgrep.-
Продвинутая фильтрация: Вы можете легко управлять областью поиска:
Искать только в файлах определенного типа
Искать везде, кроме файлов определенного типа
Искать в файлах, которые не отслеживаются Git
Удобный вывод:
rgкрасиво подсвечивает найденные совпадения, указывает номера строк и группирует результаты по файлам. С помощью флагов можно захватить несколько строк вокруг найденного, чтобы лучше понять контекст.
С чего начать: Просто начните использовать rg вместо grep. В 90% случаев команда rg "что_искать" сделает именно то, что вам нужно, только гораздо быстрее и с более чистым результатом.
Установка:
Все опции установки описаны в документации ripgrep.
Заключение
Переход на эти инструменты требует небольшого первоначального усилия - нужно их установить и потратить час на освоение базовых команд. Но это одна из лучших инвестиций в вашу личную продуктивность. Каждый из этих инструментов решает реальную, ежедневную боль и возвращает вам десятки минут каждый день.
Не пытайтесь освоить все сразу. Выберите один инструмент, который решает вашу самую большую проблему прямо сейчас, и пользуйтесь им в течение недели. Вы будете удивлены, как быстро он станет неотъемлемой частью вашего рабочего процесса.
Комментарии (119)

evgeniy_kudinov
07.09.2025 13:31Если кто не знал, но на го тоже есть много утилит. Вот, например, я вместо МС использую после "допиливания" под себя https://github.com/gokcehan/lf. А в общем TUI интерфейсы мне нравятся.

serafims
07.09.2025 13:31Если в GUI много времени тратится на переключение окон и работу мышкой, это проблема отсутствия логики при построении схемы работы в GUI и нахватка назначенных сочетаний клавиш. А отображение дерева в TUI - вот это боль.
А утилиты интересные, да.

dpvpro
07.09.2025 13:31Вместо tmux рекомендую zellij. Гораздо дружелюбней к пользователю и на всеми любимом rust)
Про скрипт интеграции fzf можно было поподробней написать.

Self_Perfection
07.09.2025 13:31Не надо zellij: он потребляет RAM на порядок с лишним больше, чем tmux.

domix32
07.09.2025 13:31Так доведите tmux расширениями до функционала zellij из коробки и получите плюс минус то же самое. Не считая отсутвие проблем с zellij на разных платформах, в то время как tmux начинает конфликтовать с дефолтными на том же MacOS.

Self_Perfection
07.09.2025 13:31Я попробовал почитать обзоры zellij но не увидел в них конкретных примеров преимуществ над tmux. Ну хоткеи discoverable - так я уже tmux запомнил
Можете привести пример чем пользуетесь?

domix32
07.09.2025 13:31Главное отличие - сервер сессий уже есть в поставке. Он же наверняка больше всего памяти и кушает пополам с VM, гоняющим wasm плагины. Коннекты конечно сами не оживут, но лэйаут и вкладки воскреснут при входе в сессию. В tmux насколько я знаю, для этого нужно доставлять и донастраивать внешнее расширение, для установки которого сначала надо доустановить менеджер этих внешних расширений - сколько там артефактов сверху скачается вопрос открытый.
До появления zellij пользовался tmux в дефолтном конфиге. В половине случае отваливалась либо прокрутка конкретных панелей, либо копирование/выделение в рамках панели. Отдельно были какие-то проблемы с прокидыванием кнопок внутрь контекста панели, но какие конкретно сейчас уже не скажу. Что-то вроде ctrl+alt+p не попадал в мой zsh потому что tmux его скушал. Блокировка панели работала местами странно - где-то блокировался текущий вид, игнорируя поток нового текста (из лога, например), либо блокировка работала, но история буфера фиксировалась размером панели и попытки искатать в его буфере что-нибудь ограничивалось тем что в принципе выведено на экран. Переходы в полноэкранный режим и обратно в половине случаев не слали сигнал, что надо бы обновить размеры pty и перерисовать линии в соответствии.
Набор вот таких приколов для каждого отдельного терминала был свой - у xterm свои конфликты, у gnome terminal - свои, у маковского console - свои. Помножьте на командные оболочки bash/zsh/ksh/etc. С zellij с подобного рода головными болями не сталкивался, максимум одинаковые биндинги конфликтовали, но это быстро решалось сменой оных. Например, комбинации CTRL+что-нибудь в neovim закономерно могут не работать т.к. zellij их уже перехватил. Но тот же ^C, ^В или ^Z работают замечательно.
У zellij конфиг выглядит как нормальный конфиг - key, value и набор вложенных лэйаутов в формете близком к json, всё что может исполнятся - живёт изолированно в плагинах в виде wasm модуля.
tmux настраивается через какое-то подобие vimscript и такую-то матерь - самое оно чтобы добавить ещё один диалект шелл скриптов в список бесполезных навыков.
Манов по настройке и дефолтного конфига, в который можно было бы заглянуть за опциями в поставке tmux не имется, насколько мне известно. Только справка по тем хоткеям. Либо я куда-то не туда смотрел. zellij позволяет дампнуть текущий работающий конфиг в stdout, а там куда вам самим захочется. Там в том числе и комменатрии про параметры рассказаны.
По большей части зеля подкупает большей эргономичностью. Хотя вон вышеупомянутый byobu вроде плюс-минус повторяет всю эргономику оборачиваясь вокруг tmux+screen. Не знаю что там с сессиями. Сам не проверял и не планирую, так что это думаю без меня разберётесь.
Коллега, который пробовал zellij в качестве мультиплексера для своего домашнего серверного зоопарка с nix и freebsd говорит, что в его unbounded зоопарке зелёнка "течёт" и за ночь скушало несколько гигов на что-то. Как он его использует и действительно ли там течь - также вопрос открытый.

Self_Perfection
07.09.2025 13:31Главное отличие - сервер сессий уже есть в поставке.
А что это такое?
Отсутствие конфликтов прокруток и выделений — очень солидный аргумент! Я честно говоря считал решение этого практически невозможным. Что обязательно какой-нибудь sixel отвалится.
С другой стороны насколько я знаю tmux прозрачно интегрируется с iTerm (но я сам маки обхожу за километр)
У zellij конфиг выглядит как нормальный конфиг - key, value и набор вложенных лэйаутов в формете близком к json
Что только люди ни придумают лишь бы TOML не использовать (
Манов по настройке и дефолтного конфига, в который можно было бы заглянуть за опциями в поставке tmux не имется, насколько мне известно.
man tmux. Дефолтные параметры смотреть типа такого:
Runtmux show-options -gfor session options andtmux show-window-options -gfor window options.
domix32
07.09.2025 13:31А что это такое?
если последний человек закрыл активную сессию (quit не detach), то все открытые панели и табы умирают вместе с ней, также как и открытые соединения куда-нибудь и запущенные приложения. zellij позволяет иметь некоторую персистентность и позволяет вернуться хотя бы к прошлым окошкам, которые были открыты просто подключившись к старой сессии- лэйаут будет ровно такой же какой был последний раз при закрытии сессии. В теории это можно проворачивать и с прокидыванием лэйаутов, но нормально дампать их tmux насколько, мне известно, самостоятельно не умеет, а ручками писать - нужно писать конфиг со спецлексикой, который ещё и нечем валидировать, кроме как глазами. Поэтому люди делали кастомный плагин для tmux для работы с сессиями.
интегрируется с iTerm
в среднем не срослось как-то с ним. я чаще какой-нибудь Alacritty в итоге использовал. Как раз для него мультиплексер отличная вещь т.к. родных табов ему не завезли и мультиоконку емнип он не поддерживал.
какой-нибудь sixel отвалится
этим никогда особо не баловался, поэтому не могу сказать.
TOML не использовать
ну, tmux лет на 5 постарше формата, а вот почему зеля с KDL я не знаю, хотя с TOML оне во многом похожи.

DjUmnik
07.09.2025 13:31Вы когда-нибудь задумывались, сколько времени уходит на переключение между окнами, клики мышью и поиск нужной кнопки в GUI?
А зачем мне держать в голове множество команд и их аргументы в голове? Я их банально забываю. А в GUI те же действия делаются элементарно. В тех же IDE от JetBrains удобно сделана работа с Git.

NAI
07.09.2025 13:31А зачем мне держать в голове множество команд и их аргументы в голове?
Затем, что не все работают в IDE. Местами, IDE вообще не втащить (embedded-устройства), максимум что у вас будет vi\vim\nano. Плюс всякие CI\CD, нет-нет, да приходится что-нибудь обновлять через git reset --hard HEAD && git pull

ImagineTables
07.09.2025 13:31С терминами в этой области вообще большая путаница. Графическими когда-то были тогда ещё новые режимы работы видеокарт (у IBM — CGA), оттуда и пошло. Если не заставлять юзера заучивать десять ключей команды (или справляться каждый раз через
--help), а вывесить их на кнопках, это ещё не делает UI именно графическим (GUI). Вот визуальным — да. А графический UI это, например, Фотошоп. Текстовой WYSIWYG для битмапок ведь не придумали. Хотя SVG я частенько дорисовываю кодом (обводки там всякие и пр.).Так что, тут надо противопоставлять диалоговый режим и режим «чего изволите», причём оба они текстовые. И я тоже не понимаю, зачем мне вступать в диалог (держа в голове кучу слов языка для этого диалога), когда можно выбрать нужное из меню. Меня ещё со времён квестов бесили такие, где вместо чёткой комбинаторной схемы вариантов (как в Larry 1) надо было вводить глагол (как в Larry 7). Чистое издевательство над юзером, ведь пространство состояний там было заранее определено!
Что касается мыши, хороший, продуманный UI всегда альтернативно адаптирован под клавиатуру. Через TortoiseGit, например, я с репозиторием работаю с клавиатуры. Чем вообще несколько раз нажать стрелки труднее, чем несколько раз нажать буквы?

MountainGoat
07.09.2025 13:31Если вы задумаете сделать любую автоматизацию или настройку, которую авторы GUI для вас не предусмотрели - то пойдёте вы нафиг. Вот давайте например: есть программа, которая генерирует свежий анекдот. Запускаете, появляется окно, в нём анекдот, всё. Сделайте в вашем брейнсе так, чтобы при каждом коммите в Гит в конец описания добавлялся новый анекдот от программы.
Из кучи файлов заархивируйте те, у которых длина в байтах делится на 7. ... ну или есть цифровая подпись Бобруйского филиала, но нет Козельского. Копии не делать, места нет.
Или вот мой любимый пример: расшифруйте тысячу файлов, зашифрованных одним и тем же паролем, но дешифровщик принимает только один файл и работает в 1 поток, потому что его майор лично писал.
Хотите реальный пример из жизни в деталях? Пожалуйста. Я как-то раз купил коллекцию из 150 скринсейверов. Ну вот люблю разнообразие. Заплатил 1 раз. Разработчик сказал "Уууу! Еееее!" и прислал мне... 150 отдельных емейлов с ключами. Через GUI я бы это до сих пор устанавливал, хотя лет 7 прошло.

nixtonixto
07.09.2025 13:31Какие-то высосанные из пальца примеры. Если вам приходится сортировать файлы по делимости их размера на 7 - имхо вы что-то делаете не так. Архиваторы в современном Windows-мире - Zip, Rar, 7z, все они работают в пакетном режиме и через родную утилиту, и через плагин к файловому менеджеру. Чебурнет с утилитой товарища майора уже близко, но пока ещё не пришёл. 150 писем с ключами - Outlook может это всё распарсить и обработать через скрипт на Visual Basic.
Вот вам более реальный пример: удалить из папки Downloads с десятком тысяч файлов одну тысячу файлов за прошедший месяц разных типов и размера, но при этом оставить десяток нужных файлов с рандомным именем и расширением (какой-нибудь драйвер, инструкцию, непросмотренный фильм, документы). Через GUI Total Commander это делается так: клик мышкой в начале списка этих файлов, протянуть вертикальный скроллер и нажать Shift+клик в конце для выделения диапазона файлов, потом скроллим выделенный красным цветом список и правым кликом снимаем выделение с оставляемых файлов, после чего жмём Del. Напишите, как бы вы решили эту проблему без GUI и сколько вам понадобится нажатий на клавиши.

PerroSalchicha
07.09.2025 13:31Или вот мой любимый пример: расшифруйте тысячу файлов, зашифрованных одним и тем же паролем, но дешифровщик принимает только один файл и работает в 1 поток, потому что его майор лично писал.
Ну, без проблем - выделю их в гуи-приложении, выберу "расшифровать", и гуй мне запустит столько копий дешифровщика, сколько нужно, для каждого файла по отдельности, в отдельном процессе. Чем хорош абстрактный пример про несуществующее приложение, что его можно решить другим несуществующим приложением :)
Через GUI я бы это до сих пор устанавливал, хотя лет 7 прошло.
И сколько вы времени писали скрипт, который извлекает клюй из емейла и вводит его куда-то там при запуске установщика? Вот, с Аутлуком тоже такое можно, и скорее всего, даже быстрее, т.к. есть отладчик.

DarthVictor
07.09.2025 13:31TUI для git из статьи — это точно такой же GUI, только со сломанной подсветкой в редакторе кода.
Он нужен в двух случаях
1) вы не осилили полдюжины консольных комманд гита
2) разработчики вашего редактора не осилили режим просмотра изменений в файле

kurtov
07.09.2025 13:31Сделайте в вашем брейнсе так, чтобы при каждом коммите в Гит в конец описания добавлялся новый анекдот от программы
пфф, легко. Кликнул настройки, дополнил промпт. Теперь по клику всегда новый анекдот.

KMiNT21
07.09.2025 13:31Кстати, я уже давненько делал тулзу-обертку, которая валидирует командную строку через LLM-ку и переставляет аргументы, как надо. :) Психанул, когда в очередной раз забыл, как там, "conda env list", или "conda list env", или... А так можно хоть словами описать аргументы, а LLM-ка правильно отформатирует (справляется даже Gemini моделька, которая бесплатно по API).

censor2005
07.09.2025 13:31Думаю, примерно так и начнётся восстание машин - однажды Gemini передаст вам в ответе вместо нужного набора команд свои собственные, и... ядерная боеголовка улетела в точку назначения )

KMiNT21
07.09.2025 13:31У меня оно подтверждения еще требует для ввода. :) А вообще можно для валидации вторую независимую LLM-ку использовать. Они точно не договорятся. :)

Vilos
07.09.2025 13:31как знать, как знать....я помню несколько лет назад по сети ходил ролик где умный чайник в умном доме с умным холодильником договорились и отжали хату у хозяина дома, где они жили...если не изменяет память это сберовский ролик был... и это семь-десять лет назад было, когда только умные дома пошли, тогда LLMок еще и не было... сейчас не просто чайник дом отжать может, но и в долги загонит ;)))

winorun
07.09.2025 13:31А таб не работал? Чем мне современные интепритаторы нравятся, так это тем что не надо помнить аргументы, тапнул - варианты высветились.
Зачастую у меня работа с консолью сводится к четырем кнопкам, таб, ентер, стрелка вверх, стрелка в право

domix32
07.09.2025 13:31для такого алиасы и придумали. сделали бы какую-нибудь clsenv и никакие б LLM гонять ради этого не пришлось бы

segment
07.09.2025 13:31Пользуюсь SourceTree и тоже не испытываю необходимости в командной строке.

domix32
07.09.2025 13:31Учитывая, что нынче эта штука требует постоянного подключения к внешним серверам, плохо работает с LFS и вообще с репозиториями я удивлён, что кто-то продолжает им пользоваться. Уж лучше черепашка.

segment
07.09.2025 13:31А можете рассказать про требование подключения к серверам? Не замечал чего-то подобного. Обычный git клиент, которому уже много лет, без лишних наворотов. Diff довольно удобный.

domix32
07.09.2025 13:31Первым делом он вам сходу предлагает залогиниться в atlassian. Каждый раз. Параллельно периодически ходит проверять обновления. Не качать обновления нельзя, ибо на macOS Catalina права доступа к файлухе поменялись, а также убрали поддержку x32.
Отдельные приколы возникают, когда репозиторий ссылается на какой-нибудь сервер скрытый за vpn. Открываешь ST без подключения к vpn и ждёшь пару минут, пока он разблокирует тебе интерфейс, дождавшись таймаута подключения к этим серверам. Даже если ты не смотришь в эти репозитории, а зашёл посмотреть в соседнюю.
Отдельные приколы ловили на настройках LFS и у некоторых людей были проблемы на windows из-за шифрования чего-то куда-то (условно - http в локальной сети ему не нравилось, хотет https). Оно или не добавляло репозиторий в древо или сыпало миллионом ошибок, что что-то пошло не так. Мы, как разрабы, видавшие виды, это переживаем спокойно, а вот художники были мягко говоря не в восторге, в итоге появилась отдельная работа помогать сопровождать контроль версий для художников.
diff удобный для чтения, но разрешение конфликтов через него лучше не делать, т.к. он делает это во-первых очень неспешно - видимо собирает какие-то метрики или ещё что-то, а во-вторых с некоторым шансом он просто падает, в третьих у него какие-то проблемы со счётом и стеджинг строк приводил к невероятному пересчёту номеров строк из-за которого ты ещё потом полчаса искал, а где та добавленная строка была. Иногда отслеживание изменений делало совсем дичь, когда при рефакторинге нельзя было застеджить изменения частично, иначе код будет просто сломан.
Подсветка синтаксиса обычно ломается спустя пару файлов и пересчёт строчек ведёт к новому перерендерингу всего дифа с нуля - как, зачем и почему не кэшировать - ответ никто не знает. Эксперимента ради попробуйте постейджить отдельные строчки кода в ST и том же lazygit или gitui. Будете неприятно удивлены неспешности ST.
Tortoise git в этом плане сильно проще и нагляднее, хотя и у него тоже были какие-то проблемы с недостаточностью функционала и неспешностью подстветки синтаксиса, хоть и не настолько сильные в сравнении с SourceTree.

Wolfen113
07.09.2025 13:31Не во всех случаях. К примеру на арче я устанавливаю, удаляю и обновляю программы и систему через yay с командами завернутыми в алиасы по три буквы. Ибо нажать хоткей по открытию терминала и там ввести 3 буквы + название программы, а дальше просто жмакать ентер. Это быстрее и надёжнее чем 33 щелчка мышкой наводясь по окнам интерфейса, который ещё может зависнуть и не пишет текстом процесс установки поэтому и если что не так идёт, или ошибки, вовремя не увидишь.

StjarnornasFred
07.09.2025 13:31Вы когда-нибудь задумывались, сколько времени уходит на переключение между окнами, клики мышью и поиск нужной кнопки в GUI?
Гораздо меньше, чем на набивку команд в терминале.
В мире, где каждая секунда на счету, терминал остается самым мощным и недооцененным инструментом разработчика.
Да? А я думаю - мышка.
Он дает вам всю мощь Git, но с наглядностью GUI, не заставляя покидать уютный терминал.
Что бы такое сделать, чтобы было как в GUI, но не GUI... Не лучше ли сразу использовать нормальное решение? А то иначе окажется, что как бы мы ни вертелись, а все дороги идут к нему.
Каждый такой случай - это переключение в браузер, запрос к чату гпт или поиск в браузере, что влечет за собой потерю концентрации
Жесть. То есть вы предлагаете настолько слиться с компьютером в ходе работы, что переключение окон вызывает у вас потерю концентрации? Может, вас самих пора оцифровать и загрузить прямо на жёсткий диск... Тогда вам и графический интерфейс не понадобится. А, ну да. Уже.
Каждый из этих инструментов решает реальную, ежедневную боль и возвращает вам десятки минут каждый день.
Вы даже не представляете, сколько реальной ежедневной боли вы сможете решить, просто переключившись из терминала в нормальный графический интерфейс!
Я, если что, не против терминала. Иногда и сам пользуюсь командной строкой, есть полезные вещи. Но - именно как вспомогательный инструмент. Пользоваться им как единственным - всё равно что собирать кубик Рубика вслепую: в принципе можно научиться и со стороны выглядит круто, но зачем? А если при этом ещё и не пользоваться мышкой - А нормальные реализации терминала её давным-давно научились воспринимать - то это выглядит просто как извращение.

JBFW
07.09.2025 13:31В терминале мышь нужна ровно для двух вещей:
- выделить строку
- вставить строкуБольше в терминале мышь не нужна ни для чего, это просто неудобно.

pfemidi
07.09.2025 13:31"Is a mouse a device to point an Xterm to type in?" (C) откуда-то из интернетов. И я полностью согласен с таким определением мыши.

Zuy
07.09.2025 13:31Lazygit - огонь! Есть ещё от того же автора и в том же стиле Lazydocker.
Ещё посоветую gdu. Это TUI версия du написанная на Go. Показывает, что сколько места занимает и позволяет удалять. Вся прелесть в том, что она это делает в много потоков и очень быстро.

pfg21
07.09.2025 13:31ncdu !! :)

Zuy
07.09.2025 13:31тормозит ncdu примерно в 10раз по сравнению с gdu в этом вся проблема. Когда удалять нужно результаты билдов ядра линукса или андроида без gdu вообще никак.

dpvpro
07.09.2025 13:31`sudo ncdu -t 5 -x /`
производительность повышается, если включить многопоточность с помощью параметра
-t

mihmig
07.09.2025 13:31ncdu ещё, из стандартного репозитория в любом дистрибутиве.

Zuy
07.09.2025 13:31Ну да, которая жутко тормозит. Только что попробовал. Папка примерно 5 миллионов файлов на 100гб. померял сколько сканирование занимает:
ncdu - 53sec
gdu - 4sec
Удаление даже пробовать не буду, боюсь не дождаться когда ncdu закончит

iroln
07.09.2025 13:31Lazygit - огонь! Есть ещё от того же автора и в том же стиле Lazydocker
Да, только никакой текст скопировать нельзя ни в lazygit, ни в lazydocker. Что забавно для текстового UI.

CaptainFlint
07.09.2025 13:31С нажатым Shift выделяется мышкой и копируется через Ctrl+Shift+C. Стандартное поведение для TUI.

iroln
07.09.2025 13:31Это понятно, но это очень неудобный способ выделения текста. Просто сравните с выделением текста в любом редакторе, думаю, проблемы usability очевидны. То, что такое выделение не сбрасывается при клике в другое место хотя бы. Нужно нажать Esq, либо Ctrl+Shift+C.

CaptainFlint
07.09.2025 13:31Всё-таки это совсем не "никакой текст скопировать нельзя".
Это неизбежная плата за управление мышью. Некоторые TUI-программы не поддерживают мышь, и в них можно использовать выделение текста напрямую (как, скажем, в top, less, vim без опции
mouse=a). Но в программах типа mc, htop, lazygit, где мышиные клики выполняют разные действия, приходится отделять эти действия от терминального выделения текста. Поэтому и используется Shift. В GUI-программах проще, так как там существует явное разделение контролов по их назначению, а терминал с точки зрения системы — это одно сплошное текстовое окно.Кстати, Esc и Ctrl+Shift+C терминальное выделение не сбрасывают; сбрасывает Shift+клик.

iroln
07.09.2025 13:31Кстати, Esc и Ctrl+Shift+C терминальное выделение не сбрасывают; сбрасывает Shift+клик
Забавно, но у меня работает не так. Shift+клик продолжает выделение. То есть выделяются строки от строки, где начал выделять и заканчивая строкой куда кликнул. А Ctrl+Shift+C и Esq как раз очищают выделение.

CaptainFlint
07.09.2025 13:31Интересно… Видимо, зависит от терминальной программы. У меня KDE+Konsole. Пробовал также в GNOME+terminal, там так же. Поэтому не приходило в голову, что может быть по-другому.

Zuy
07.09.2025 13:31блин, что-то не работает на маке :(

Zuy
07.09.2025 13:31А нет, заработало после добавления в конфиг:
gui: mouseEvents: falseОх, спасибо тебе, @CaptainFlint, за такую наводку :)

CaptainFlint
07.09.2025 13:31Упс, забыл уточнить, что я говорил про линукс… В макоси никогда не пробовал. Хорошо, что там тоже нашёлся способ. :-)

iroln
07.09.2025 13:31gdu работает заметно быстрее чем ncdu, но UI один в один и всё равно нужно ждать индексации директорий.
Вот ещё из той же оперы где не надо ждать индекс, делается в фоне:
https://github.com/Canop/broot
https://github.com/bootandy/dust
https://github.com/Byron/dua-cli
https://github.com/bgreenwell/lstr

gluck59
07.09.2025 13:31Про tmux
Я полный профан в никсах, но иногда приходится что-то делать в консоли. Для "интернет моргнул и сессия отвалилась" приучаю себя использовать screen, но мне он кажется дико неудобным: надо помнить что скрин на сервере запущен, помнить ключ -rd, а уж переключаться между сессиями... ой можно это как-нибудь без меня...
Подскажите плиз кто использует и screen и tmux: на чем вы остановились по итогу?

JBFW
07.09.2025 13:31Другой вариант: использовать впн к своей машине. Если "интернет моргнул" - будет просто ждать восстановления связи, если конечно не закрыть терминальное окно со своей стороны.

kma21
07.09.2025 13:31Мне кажется, что tmux развивается активнее. Его и использую и он более "нативный" - есть окно и в нём у тебя panes (отдельные терминалы).
Если использовать vi-keys, то прям вообще достаточно удобно получается.Если немного погуглить и привыкнуть к хоткеям, то достаточно удобно. И копирование текста есть, и можно несколько "окошек" с терминалом открывать, и отключаться от сессии.
Начать можно тут
https://habr.com/ru/articles/126996/

CaptainFlint
07.09.2025 13:31Если исключительно для "интернет моргнул", а не для окон-панелей, то я остановился на EternalTerminal (ET). screen/tmux/mosh ограничивают терминал своим экранным буфером, что в некоторых случаях неудобно, ломает привычную прокрутку. А с ET таких проблем нет, он просто тянет текущую SSH-сессию. Но есть недостаток: хоть он работает через стандартный SSH, ему требуется дополнительный демон на стороне сервера.

Zuy
07.09.2025 13:31Остановился на Byobu. Это надстройка над screen. Делает именно необходимый минимум и не надо никаких флагов помнить

13werwolf13
07.09.2025 13:31есть такая штука, byobu. по сути своей это набор конфигов для tmux и screen. по дефолту в бекенде tmux. он сильно проще чем голый tmux.

dot22
07.09.2025 13:31для шелла настроил алиас
alias scr='screen -rd || screen'по которому, если screen уже запущен в фоне, то подхватывается существующая сессия, если screen ранее запущен не был, то создается новая, с заранее прописанными в конфиге нужными окнами
screen -t htop sudo htop
screen -t messages sudo less /var/log/syslog
screen -t sudo sudo su -
screen -t bashcaption always
caption string "%{rk} %c %{dd} %{+b M}%n %{-b dd}%-w%{+b B.}%n* %t%{-}%+w%<"
gluck59
07.09.2025 13:31"А разве так можно было?" ©
С алиасом понятно, а где прописывается остальное? Я в никсах полный увы...

dot22
07.09.2025 13:31Все строки нижнего кода в комметарии прописываются в самом конфиге screen ~/.screenrc. Из них первые четыре создают различные окна с запуском в них различных команд (после второго слова, стоящего после опции -t, которое задает заголовок окну) до конца строки) в одной сессии (между которыми можно переключаться по хоткеям Ctl+a n \ Ctl+a p (n - next, p - previous) или Ctl+0..9 (номер окна в сессии). Последние две строки выводят внизу экрана строку со служебной информацией - дата, номер активного окна и названия окон (слово после опции -t из первых четырех строчек кода в комментарии)

gluck59
07.09.2025 13:31Сорри, по итогу получается еще сложнее чем было.

dot22
07.09.2025 13:31Так нижний код из комментария - это уже любительство и украшательство ) Если нужно просто перехватывать последнюю запущенную сессию - достаточно алиаса в шеле

gluck59
07.09.2025 13:31Мерсибо ку, с алиасом будет удобнее.

dot22
07.09.2025 13:31Технически, никто не может запретить вводить полную команду непосредственно в окне консоли
screen -rd || screen
но да, если запускать постоянно на одном и том же сервере, то алиас будет удобнее. Собственно, для чего оне и придназначены )

Ilirium
07.09.2025 13:31Я пользуюсь tmux. Пробовал screen, но не вижу в нем смысла. В macOS есть офигенный эмулятор терминала – iTerm. Так вот, при использовании tmux в нем не нужно помнить про переключение между окнами и операции с ними, все это сделано через интеграцию с iTerm. При первом вызове tmux пишешь:
tmux -CC, при повторном, когда нужно подключиться к сессии:tmux -CC a. Открывается дополнительное окно терминала, в котором в виде вкладок представлены все созданные экраны tmux.
При этом удивительно, что не существует эмулятора терминала под Linux, который бы поддерживал такую интеграцию...

Vladislav_Dudnikov
07.09.2025 13:31Ещё есть lazydocker. А для любителей nvim плагин kdheepak/lazygit.nvim, связка lazygit + vim-fugitive прям топ, долго искал как нормально работать с git в nvim.

Alinaki
07.09.2025 13:31CLI based GUI это худший из видов GUI. Имитировать все те же самые виджеты, но рисуя их текстом — это ужасно и бестолково.
Хоткеи, говорите? Кто мешает их в графическом интерфейсе-то использовать? А заодно ещё и мышь получить.
Proger3301
07.09.2025 13:31Так и не понял в чем заключается бестолковость отрисовки UI текстом, ну и ладно.
TUI утилиты быстрые, легковесные и не требуют графического окружения. Подключился к серверу по ssh поставил утилиту и сразу запускаешь.

Alinaki
07.09.2025 13:31если тебе надо подключаться к серверу и делать что-то утилитой с TUI, ты что-то делаешь не так

Sau
07.09.2025 13:31Мне нужно headless raspberry pi подключить к вай-фаю. Редактировать кофиги, или выбрать сеть и ввести пароль через TUI?

Stanislavvv
07.09.2025 13:31Для одноразового действия, которое не повторяется — норм, пофиг гуй или туй. А вот если это надо делать регулярно, как предлагается в статье...

Viacheslav01
07.09.2025 13:31Каждый раз когда слышу git и цена ошибки высока, хочется улыбнуться )
Вот реально на обычных задачах упороть историю в гите очень сложно, всегда есть вариант прокрутить фарш назад.
А вот всякие улутшаторы гита, когда нет контроля над тем, что происходит, может наворотить много чего.

iroln
07.09.2025 13:31По сути в статье предлагается заменить GUI на TUI. TUI в терминале лепят не от того, что это очень удобно (с голым текстом особо-то не разбежишься), а потому что GUI приложения в основном стали писать на проклятых
электронах"web-технологиях". В итоге программы требуют какое-то огромное количество ресурсов, совершенно несоразмерное с предоставляемой функциональностью и ценностью.У Никиты Прокопова был пост про это как раз. В терминал идут от безысходности и усталости от плохого софта, а не потому что там какой-то особенный супер-удобный UI, повышающий продуктивность в 100500 раз.

viktorov_aa
07.09.2025 13:31Лично для меня терминал не вопрос удобства, а вопрос настроения. Вот пишешь в него что-то, он что-то делает в ответ. Кайф и магия. Сразу чувствую себя лучше, чем эти скучные GUI

Proger3301
07.09.2025 13:31Я бы еще упомянул yazi (TUI файловый менеджер), lazysql (TUI менеджер SQL баз данных) и lazydocker (TUI менеджер докер контейнеров и имейджей)

Kenya-West
07.09.2025 13:31lazydocker
Он хорош ровно до того момента, когда project у compose и имя директории различаются. А у меня это в 100% случаев, так как compose'ная семантика не обязана дружить с "низкоуровневой" файловой структурой. Контейнеры в таком случае через него почему-то перестают слушаться. И тогда спасает dcv.

PerroSalchicha
07.09.2025 13:31Вы когда-нибудь задумывались, сколько времени уходит на переключение между окнами, клики мышью и поиск нужной кнопки в GUI?
Когда знаешь, куда жать - весьма немного. Когда знаешь консольные команды, а куда жать в GUI не знаешь, то в консоли будет быстрее. Когда не знаешь знаешь консольные команды, в GUI будет быстрее.
NeoCode
Спасибо, интересные утилиты, но это не только терминал но и TUI. А чистый интерфейс командной строки ИМХО так себе. Особенно когда нужна работа с файлами и их десятки, сотни и т. Д.
Двухпанельный файловый менеджер - вот действительно гениальное изобретение в сфере UI.
dyadyaSerezha
И мы знаем название этого менеджера!
JBFW
К тому же из него можно извлечь больше пользы, чем просто из файлового менеджера:
- неплохой рекурсивный поиск по файлам и строкам в них
- система меню и ассоциаций позволяет автоматизировать типовые задачи для конкретного проекта
- неожиданное для меня удобство - можно работать просто в шелле со скрытыми панелями, вызывая их когда надо (а не наоборот, с панелями, иногда пряча их)
fujikiriku
Разумеется Волков Коммандер! Когда нужно что-то исправить, что-то сделать, а у вас на дискете совсем почти не осталось места - только Волков туда поместится! Особенно актуально это, если на сервере, который вы видите, нет современного дисковода 3,5 дюйма, и уж тем более новомодного привода для компакт дисков, выход простой - вставляете пятидюймовую дискету и решаете проблему.
MagisterAlexandr
Подружись со мной, компьютер
PerroSalchicha
Что это за сервер такой странный, у которого на его огромном 40-мегабайтовом MFM-винте не нашлось места для нормального Нортона с поддержкой передачи файлов через СОМ-порт?
mihmig
DosNavigator же, с встроенным тетрисом!
ColorPrint
Он под линукс разве есть?
PerroSalchicha
Есть, называется far2l. Ещё есть бета-версия, неудачная, но своих любителей имеющая, называется mc.
geher
Не хватает far3l.
mihmig
Уже не бета, ставится из реп.
pfg21
far2l или far2m :)
mc апосля кажется корявым.
aleksandy
Не менеджера, но командира.
RulenBagdasis
Я с компьютерами года с восемьдесят какого-то, не помню уже точно. С двухпанельных файловых менеджеров я начинал, vc, nc, dos navigator, потом far, windows/total commander. Потом перешёл на линух, deco, mc и вот это вот всё. И какое-то время назад я, внезапно осознал, что работа из консоли с файлами гораздо быстрее, удобнее и продуктивнее. Я не пытался этого добиться как-то специально, оно само так получилось. Я уже не помню, когда я последний раз запускал файловый менеджер.
geher
Лучше сочетать консоль и файловый менеджер (благо почти все файловые менеджеры, особенно текстовые, это умеют). Некоторые вещи удобнее и быстрее таки из двухпанельного менеджера.
I7p9H9
Ага, такого как mc или nvim :) Вообще я не сторониик все в консоль перемещать, но как-то так получается что ТУИ и просто CLI как бы вынуждают тебя потратить время на обучение, и в итоге в долгосрочно перспективе ты становишься эффективнее и быстрее. А GUI как бы расслабляет, что ли, и ты годами просто мышкой тыркаешься или кликами и прокруткой елозишь по массе файлов.
RulenBagdasis
А почему вы считаете, что знаете, что мне быстрее и удобнее?
wl2776
Это если только на локальном диске работать. Когда появляется SFTP, командная строка перестаёт быть настолько удобной.
Мой фаворит Krusader, а под виндой был Far.
RulenBagdasis
ssh и вот ты на окальном длиске, rsync и скрипты, если нужно файло туда-сюда гонять, scp если 1 файлик передать надо. Я с удаленными хостами работаю каждый день.
CrazyOpossum
Если скорость не критична - sshfs.
garwall
зависит, пожалуй, от вида работы. условно `cp source/*.file dest/ будет сильно быстрее, чем выбирать все эти "file" в файловом менеджере.
LAutour
Для быстрого выбора всех этих "file" в файловых менеджерах есть выбор по маске.
Wolfen113
Я когда переходила на Линукс самое страшное для меня было отсутствие на него того командер. А аналоги все были архаичные и неудобные. Сам тотол командер мне нужен был лишь из-за двухпанельности. Как же меня удивило и порадовало что на Линукс минт в nemo из коробки она есть, вроде в те времена ток у него из популярных ф менеджеров она и была. Поэтому о тотол командер ныне уже и не вспоминаю. А nemo по прежнему мой любимый ф менеджер.