Терминал либо экономит часы в неделю, либо превращается в коллекцию скриншотов с reddit. Ниже — связка, которая у меня живёт на macOS и Linux-серверах с минимальным расхождением ⚙️

Цель: три навыка, не триста плагинов #

  1. Не терять работу при обрыве SSH → tmux.
  2. Быстро находить файлы, историю, процессы → fzf + rg.
  3. Воспроизводимый setup на новой машине → dotfiles в git.

Всё остальное — по необходимости.

tmux: сессии, которые переживают VPN #

Установка:

# macOS
brew install tmux
# Debian/Ubuntu
sudo apt install tmux

Минимальный ~/.tmux.conf:

# префикс Ctrl-a (как screen) — меньше конфликтов с Ctrl-b в Emacs/readline
unbind C-b
set -g prefix C-a
bind C-a send-prefix

set -g mouse on
set -g base-index 1
setw -g pane-base-index 1
set -g history-limit 50000
set -g default-terminal "tmux-256color"

# удобные сплиты
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

Базовые движения (после префикса):

КлавишиДействие
cновое окно
n / pследующее / предыдущее окно
% / "сплит (или `
ddetach (сессия жива)
sсписок сессий
tmux new -s work
tmux attach -t work
tmux ls

На сервере: всегда tmux new -A -s main в .bash_profile для интерактивных SSH — вернулись после обрыва, работа на месте.

zsh: быстрый, но не «Oh My Zsh на 2 секунды старта» #

brew install zsh
# или apt install zsh
chsh -s "$(which zsh)"

Я сознательно не тяну полный Oh My Zsh на серверах. На ноутбуке — ок, если старт < 100 ms. Иначе: zsh-autosuggestions + zsh-syntax-highlighting точечно.

Полезное в .zshrc:

export EDITOR=nvim
export HISTSIZE=50000
export SAVEHIST=50000
setopt SHARE_HISTORY HIST_IGNORE_DUPS

# качественный PATH
export PATH="$HOME/.local/bin:/opt/homebrew/bin:$PATH"

# docker compose v2
alias dc='docker compose'
alias dps='docker compose ps'
alias g='git'
alias gs='git status -sb'

Поиск: fzf + ripgrep + bat + fd #

brew install fzf ripgrep bat fd eza
# Debian: apt install fzf ripgrep bat fd-find

Интеграция fzf:

# macOS homebrew
source <(fzf --zsh)

Привычки:

# найти файл
fd 'compose.ya?ml' ~/temp/git.evgn.ru

# искать по содержимому
rg -n 'AllowUsers' /etc

# красивый cat
bat /etc/ssh/sshd_config

# интерактивный выбор из истории / git
# Ctrl-R после source fzf

eza вместо ls (опционально):

alias ll='eza -lah --git'

Dotfiles: один репозиторий, без копипасты #

Схема, которая масштабируется:

dotfiles/
  .zshrc
  .tmux.conf
  .config/git/config
  install.sh   # ln -sf в $HOME
# идея install.sh
ln -sf "$PWD/.zshrc" "$HOME/.zshrc"
ln -sf "$PWD/.tmux.conf" "$HOME/.tmux.conf"

Секреты не в dotfiles: только include на ~/.config/git/config.local или env из rbw.

Для серверов — тонкий профиль: tmux + vim/nvim + alias, без GUI-шрифтов и Starship, если не нужен.

Чего избегать #

  • 40 плагинов tmux «как у того чувака с YouTube» — вы не запомните бинды.
  • alias rm='rm -i' на проде в скриптах — сюрпризы в CI.
  • Синхронизация dotfiles через iCloud/Dropbox — merge-конфликты в .zsh_history больнее, чем кажется.

Итог #

Соберите tmux + zsh + fzf/rg за один вечер, положите в git, на следующей машине разверните за 5 минут. Красота prompt’а — после того, как Ctrl-R и tmux attach уже мышечная память 🚀