Последовательный современный инструментарий оболочки на MacOS и Windows WSL для разработчиков

Я регулярно пишу код на машинах с MacOS и Windows, и меня всегда раздражало, насколько разным является опыт работы на каждой из них.

Многие терминальные инструменты, поставляемые с unix-окружениями, функционально похожи на те, что были 20 лет назад. Но другие инструменты для разработчиков довольно сильно продвинулись с тех пор.

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

Установка и настройка этих инструментов на новой машине MacOS или Windows — дело утомительное и занимает несколько часов без скриптов.

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

В этой статье рассказывается обо всех инструментах, которые я использую, и о том, как я сохраняю одинаковые настройки терминала на MacOS и Windows!

Обзор современных инструментов терминала

Некоторые примеры

Старый ls


старый вывод ls

Новый ls — с поддержкой git, иконками и цветовыми подсказками


вывод нового ls

Старый cat для json-файла


вывод старой cat

Новый cat для того же файла — подсветка синтаксиса и форматирование


новый вывод cat

Но инструменты — это только половина истории. Я также покажу настройки, которые нужно изменить, псевдонимы и скрипты, которые сделают терминал более продуктивным для вас.

Готовые скрипты для экономии времени

У меня ушло около 30 часов на изучение и настройку всех плат на MacOS и Windows WSL.

Я включил все, что узнал, в эту статью, но если вы хотите избежать ручной настройки всех этих инструментов, ознакомьтесь со ссылкой в конце статьи.

Мои сценарии установки установят и настроят все эти инструменты для вас на всех ваших компьютерах одним махом!

Использование ITerm2 на MacOS

iTerm2 — это хорошая замена терминалу MacOS. Вы можете использовать вкладки, разделение панелей, плавающие окна, прозрачность, фоны изображений и полный цвет.

В нем есть действительно хорошая функция автозаполнения (ctrl-;), полный поиск и история. Вы можете хранить профили для запуска набора терминалов (BE + FE очень распространены!), как и сессии tmux. Он также интегрируется с KeyChain.

Вот моя настройка для типичного узла и приложения react, запущенного на правой стороне, а левая сторона предназначена для работы.


демонстрация разделенных панелей iterm2

Полная документация по iterm2 находится на их сайте.

Установите его с помощью brew: brew install --cask iterm2.

Iterm2 недоступен на WSL.

Antigen для управления zsh

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

Конфигурация antigen сохраняет ваш zshrc очень чистым, потому что он сам пойдет и клонирует все нужные вам репозитории. Она может автоматически проверять наличие обновлений для всех плагинов с помощью antigen update.

Вот пример конфигурации. Вы можете видеть, что сторонние плагины просто перечислены в сокращении как организация/репозиторий github. Когда вы все загрузите, вызовите antigen apply, и он установит состояние в соответствии с вашей конфигурацией.

# Load the oh-my-zsh's library.
antigen use oh-my-zsh

# Bundles from the default repo (robbyrussell's oh-my-zsh).
antigen bundle node

# Load a theme.
antigen bundle sindresorhus/pure@main

# Tell Antigen that you're done.
antigen apply
Вход в полноэкранный режим Выход из полноэкранного режима

В любое время вы можете вручную обновить все с помощью antigen refresh.

Я использую brew для установки antigen на MacOS — brew install antigen.

На Windows я использую сценарий оболочки — curl -L git.io/antigen > antigen.zsh.

Если вы устанавливаете программу одними и теми же методами, вам нужно помнить о том, что исходники должны находиться в разных местах установки!

Полная документация по antigen находится на их github.

Используйте bat вместо cat

bat — это утилита командной строки, которая похожа на cat, но имеет несколько дополнительных возможностей. Используйте bat вместо cat для чтения текстовых файлов в терминале.

Вы получаете полноцветную подсветку синтаксиса для файлов кода. Вы получаете номера строк. Интегрируется с git и показывает изменения в файлах прямо в терминале.


Показ вывода bat cat для json-файла

Установка с помощью brew на Mac

brew install bat
Вход в полноэкранный режим Выход из полноэкранного режима

или apt на Windows WSL

sudo apt install -y bat
Войти в полноэкранный режим Выйти из полноэкранного режима

В Windows wsl bat устанавливается как batcat, поэтому если вы используете псевдоним cat, вы можете использовать batcat вместо alias cat=bat --paging=never!

Полная документация по bat находится на github.

Exa для ls

Exa — это замена для ls, которая хорошо подходит для разработчиков. Exa интегрируется с git, поэтому вы можете легко увидеть, какие файлы проигнорированы (I), изменены (M), новые (N) или неотслеживаемые (?).

В нем также предусмотрены иконки, цветовое кодирование файлов, назначение симлинков прямо в списке, возможность сортировки папок по верху и многое другое.


отображение вывода exa с помощью git state

На mac вы устанавливаете exa с помощью brew и можете назначить ему псевдоним ls.

brew install exa

alias ls='exa -l --group-directories-first --color=auto --git --icons --no-permissions --no-user'
alias ll='exa -lahF --group-directories-first --color=auto --git --icons'
Вход в полноэкранный режим Выйти из полноэкранного режима

На Windows вы должны обновить Ubuntu для использования exa с помощью apt. Вот как обновить WSL Ubuntu с 20.04 LTS до 20.10.

# upgrading Ubuntu on Windows WSL

# change from lts only to normal updates for OS
sudo sed -i 's/prompt=lts/prompt=normal/g' /etc/update-manager/release-upgrades

# update all packages
sudo apt update && sudo apt upgrade

# this snapd package manager breaks the Ubuntu upgrade process on WSL so remove it first
sudo apt remove snapd

# check for an Ubuntu update
sudo do-release-upgrade
Вход в полноэкранный режим Выйдите из полноэкранного режима

теперь вы можете использовать exa

sudo apt install -y exa
Войти в полноэкранный режим Выйти из полноэкранного режима

В Windows вы не можете использовать интеграцию git, поэтому псевдоним немного отличается.

alias ls='exa -l --group-directories-first --color=auto --icons --no-permissions --no-user'
alias ll='exa -lahF --group-directories-first --color=auto --icons'
Войти в полноэкранный режим Выйти из полноэкранного режима

Полная документация по exa находится на github.

Подсказка чистого терминала

Чистая подсказка терминала — это очень чистая подсказка zsh. Это не тема oh-my-zsh. Это самостоятельная подсказка. Он очень быстрый и поддерживает git, как и Agnoster, но гораздо чище.


отображение чистой подсказки

Вы можете видеть, что подсказка показывает состояние над фактической подсказкой. Это дает выделенное, последовательное пространство для ввода команд.

Это также дает информационной области целую строку для отображения состояния. Вы можете видеть *, указывающий на то, что у меня есть незафиксированные изменения. Подсказка также показывает, есть ли у вас коммиты для push или pull.

Я установил эту подсказку с помощью antigen

antigen bundle sindresorhus/pure@main
Вход в полноэкранный режим Выйти из полноэкранного режима

Вы также не должны забывать отключать любые подсказки oh-my-zsh, если они установлены в переменной env.

# disable zsh theme for pure prompt
export ZSH_THEME=""
Войти в полноэкранный режим Выход из полноэкранного режима

Полная документация по pure находится на их github

diff-so-fancy для git diff

Diff so fancy — это инструмент сравнения, основанный на терминале. Он обеспечивает более приятный формат и лучший контраст по сравнению со встроенным инструментом diff.

Этот скриншот из документации diff-so-fancy показывает различия.


«бок о бок, показывая обычный diff и diff-so-fancy».

Установка на mac с помощью brew

brew install diff-so-fancy
Войдите в полноэкранный режим Выйти из полноэкранного режима

и на Windows установить с помощью npm

npm i -g diff-so-fancy
Войти в полноэкранный режим Выйти из полноэкранного режима

Вам придется добавить все необходимые конфигурации git, чтобы git использовал diff-so-fancy вместо встроенного инструмента diff. Все это есть на их странице на github.

Полная документация по diff-so-fancy находится на их github.

RipGrep вместо grep

RipGrep — это быстрый инструмент grep для поиска вхождений строк в файлах. Он идеально подходит для разработчиков, поскольку поддерживает git. Он будет уважать ваш файл .gitignore и игнорировать файлы в node_modules, например.

Инструмент написан на языке Rust и работает очень быстро!


показывает поиск по термину ripgrep с помощью ripgrep

Установите с помощью brew

brew install ripgrep
Вход в полноэкранный режим Выйти из полноэкранного режима

или на Windows WSL используйте apt

sudo apt install -y ripgrep
Войти в полноэкранный режим Выйти из полноэкранного режима

Полная документация по ripgrep находится на их github

fx для json-файлов

fx — это терминальный просмотрщик для json-файлов. Он поддерживает подсветку синтаксиса, понимает структуру дерева, поддерживает мышь, фильтрует и ищет json-файлы прямо в вашем терминале.

Этот рисунок с github-страницы инструмента демонстрирует все его возможности.

Для установки на mac используйте brew как обычно

brew install fx
Войдите в полноэкранный режим Выйти из полноэкранного режима

Однако для Windows wsl вы должны использовать npm.

npm install -g fx
Войти в полноэкранный режим Выйти из полноэкранного режима

Вы можете найти полную документацию на их странице github.

Использовать vscode в качестве редактора терминала по умолчанию

Также как и duti (см. раздел duti) для установки в MacOS по умолчанию vscode в качестве текстового редактора. Вы также можете установить редактор по умолчанию для любого типа файлов в терминале и git, задав env vars.

export EDITOR="code"
export GIT_EDITOR="code"
export VISUAL="code"
Вход в полноэкранный режим Выход из полноэкранного режима

fzf для поиска

fzf — это средство нечеткого поиска в командной строке. Вы можете передать в него список, выполнить поиск по списку и передать найденный элемент в следующую команду оболочки.

Для установки используйте homebrew на mac и apt на Windows WSL.

# mac
brew install fzf

# wsl
sudo apt install -y fzf
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь вы можете быстро искать файлы в терминале с помощью ctrl-T.

Я комбинирую fzf с ripgrep для поиска файлов.

export FZF_CTRL_T_COMMAND='rg --files --no-ignore --hidden --follow --glob "!.git/*" --glob "!node_modules/*" --glob "!vendor/*" 2> /dev/null'
Вход в полноэкранный режим Выход из полноэкранного режима

Я изменил z так, чтобы он использовал fzf для поиска, когда не указан параметр.

unalias z 2> /dev/null
z() {
  [$# -gt 0] && _z "$*" && return
  cd "$(_z -l 2>&1 | fzf-tmux +s --tac --query "$*" | sed 's/^[0-9,.]* *//')"
}
Вход в полноэкранный режим Выход из полноэкранного режима

Приятным использованием fzf является поиск в истории хрома. Пути ниже поддерживают профили хрома. Это версия для mac. История хрома имеет другое расположение в Windows WSL — /mnt/c/Users/$(whoami)/AppData/local/google/chrome/User Data/Default.

function ch() {
  local cols sep google_history open
  cols=$(( COLUMNS / 3 ))
  sep='{::}'

  if [-d "$HOME/Library/Application Support/Google/Chrome/Default"]; then
    google_history="$HOME/Library/Application Support/Google/Chrome/Default/History"
 else
    google_history="$HOME/Library/Application Support/Google/Chrome/Profile 1/History"
 fi
    open=open

  cp -f "$google_history" /tmp/h
  sqlite3 -separator $sep /tmp/h 
    "select substr(title, 1, $cols), url
     from urls order by last_visit_time desc" |
  awk -F $sep '{printf "%-'$cols's x1b[36m%sx1b[mn", $1, $2}' |
  fzf --ansi --multi | sed 's#.*(https*://)#1#' | xargs $open > /dev/null 2> /dev/null
}
Вход в полноэкранный режим Выход из полноэкранного режима

Полная документация по fzf находится на их странице GitHub с множеством отличных примеров.

Duti для изменения текстового редактора по умолчанию

На mac большинство текстовых файлов по умолчанию открываются в XCode. Вы можете изменить их, чтобы они открывались в предпочитаемом вами текстовом редакторе с помощью duti. Я использую vscode, поэтому вот команды.

duti -s com.microsoft.VSCode public.json all
duti -s com.microsoft.VSCode public.plain-text all
duti -s com.microsoft.VSCode public.python-script all
duti -s com.microsoft.VSCode public.shell-script all
duti -s com.microsoft.VSCode public.source-code all
duti -s com.microsoft.VSCode public.text all
duti -s com.microsoft.VSCode public.unix-executable all
duti -s com.microsoft.VSCode .c all
duti -s com.microsoft.VSCode .cpp all
duti -s com.microsoft.VSCode .cs all
duti -s com.microsoft.VSCode .css all
duti -s com.microsoft.VSCode .go all
duti -s com.microsoft.VSCode .java all
duti -s com.microsoft.VSCode .js all
duti -s com.microsoft.VSCode .sass all
duti -s com.microsoft.VSCode .scss all
duti -s com.microsoft.VSCode .less all
duti -s com.microsoft.VSCode .vue all
duti -s com.microsoft.VSCode .cfg all
duti -s com.microsoft.VSCode .json all
duti -s com.microsoft.VSCode .jsx all
duti -s com.microsoft.VSCode .log all
duti -s com.microsoft.VSCode .lua all
duti -s com.microsoft.VSCode .md all
duti -s com.microsoft.VSCode .php all
duti -s com.microsoft.VSCode .pl all
duti -s com.microsoft.VSCode .py all
duti -s com.microsoft.VSCode .rb all
duti -s com.microsoft.VSCode .ts all
duti -s com.microsoft.VSCode .tsx all
duti -s com.microsoft.VSCode .txt all
duti -s com.microsoft.VSCode .conf all
duti -s com.microsoft.VSCode .yaml all
duti -s com.microsoft.VSCode .yml all
duti -s com.microsoft.VSCode .toml all
Войти в полноэкранный режим Выйти из полноэкранного режима

Ботанические шрифты (Hack)

Для использования большинства современных терминальных инструментов вам понадобится шрифт, в который добавлены иконки. Такие шрифты часто называют «Powerline». У Nerd Fonts есть хорошая альтернативная коллекция шрифтов с иконками.

При использовании шрифта Nerd Font «Inconsolata» я обнаружил некоторые проблемы с символом «backtick», поэтому я перешел на шрифт «Hack».

Чтобы установить шрифт Hack на mac, используйте homebrew. Чтобы получить шрифт Nerd, вам придется открыть новое репо.

brew tap homebrew/cask-fonts
brew update
brew install --cask font-hack-nerd-font
Войдите в полноэкранный режим Выйдите из полноэкранного режима

На Windows WSL используйте apt-get для установки шрифтов nerd.

sudo apt install -y fonts-hack-ttf
Войдите в полноэкранный режим Выход из полноэкранного режима

Настройка параметров git по умолчанию

Git имеет множество опций конфигурации, где значения по умолчанию не являются идеальными. Например, по умолчанию git отправляет все изменения во всех ветках на удаленный сервер.

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

Вы можете изменить то, что происходит при git push, установив следующие параметры

git config --global push.default current
Войти в полноэкранный режим Выйти из полноэкранного режима

Еще одно рекомендуемое изменение — это поведение при вытягивании по умолчанию. Если вы делаете trunk-based dev с недолговечными ветками функций, у вас не должно быть слияний на ваших ветках, если вы всегда тянете первым.

Возможно, вы захотите использовать только ускоренную пересылку и избегать «автоматического» слияния в git. Автоматические слияния обычно происходят из-за ошибки оператора. Перезагрузка при pull имеет аналогичный эффект, когда вы можете неожиданно изменить историю.

Вместо этого используйте только перемотку вперед. Git выдаст ошибку, если не сможет выполнить быструю перемотку.

git config --global pull.ff only
Вход в полноэкранный режим Выход из полноэкранного режима

Вы можете отменить перемотку вперед только тогда, когда это необходимо, с помощью git pull --no-ff.

Я использую beyond compare для визуальных различий, поэтому я настраиваю это в конфигурации git.

git config --global diff.tool bc3
git config --global difftool.bc3.trustExitCode true
git config --global merge.tool bc3
git config --global mergetool.bc3.trustExitCode true
Войти в полноэкранный режим Выход из полноэкранного режима

Трудно запомнить синтаксис журнала, поэтому установите для себя несколько псевдонимов журнала

git config --global alias.dlast 'diff HEAD^'
git config --global alias.l "log --graph -n 20 --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(green)- %an, %cr%Creset'"
git config --global alias.ll "log --stat --abbrev-commit"
git config --global alias.ln "log --graph -n 20 --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(green)- %an, %cr%Creset' --name-status"
git config --global alias.lp "log --oneline -n 20 -p"
git config --global alias.ls "log --stat --abbrev-commit -n 1" # display previous log
Войти в полноэкранный режим Выйти из полноэкранного режима

Дополнительные псевдонимы git

На github unixorn есть несколько мощных алиасов git, доступных в одном пакете.

Вы можете установить их с antigen, добавив следующий пакет в конфигурацию antigen.

antigen bundle unixorn/git-extra-commands@main
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь у вас есть доступ к удобным псевдонимам.

Если вы случайно сделали пару коммитов в неправильную ветку, вы можете использовать git-move-commits 2 feat/myFeatureBranch, чтобы переместить их в правильную ветку.

Вы можете git-checkout-pr 586, чтобы проверить pull request по id с GitHub.

git-what-the-hell-just-happened покажет вам результат выполнения последней команды.


вывод git-wthjh, показывающий последнюю команду

git-churn покажет вам, какие файлы часто меняются в вашем хранилище. Это полезно для выявления очагов слияния. Возможно, вы захотите разделить эти файлы.

git-incoming покажет, что вы собираетесь удалить. git-outgoing покажет вам, что вы собираетесь выталкивать.

git-thanks покажет, кто внес вклад в ваше репо.

git-wtf покажет текущее состояние вашей локальной ветки.


Вывод git-wtf, показывающий текущее состояние файлов

Поскольку вы установили fzf, вы можете добавить несколько хороших псевдонимов, чтобы использовать fzf для поиска в вашем git-репозитории.

gcoc() {
  local commits commit
  commits=$(git log --pretty=oneline --abbrev-commit --reverse) &&
  commit=$(echo "$commits" | fzf --tac +s +m -e) &&
  git checkout $(echo "$commit" | sed "s/ .*//")
}

gcob() {
  local tags branches target
  tags=$(
    git tag | awk '{print "x1b[31;1mtagx1b[mt" $1}') || return
  branches=$(
    git branch --all | grep -v HEAD |
    sed "s/.* //" | sed "s#remotes/[^/]*/##" |
    sort -u | awk '{print "x1b[34;1mbranchx1b[mt" $1}') || return
  target=$(
    (echo "$tags"; echo "$branches") |
    fzf-tmux -l30 -- --no-hscroll --ansi +m -d "t" -n 2) || return
  git checkout $(echo "$target" | awk '{print $2}')
}
Вход в полноэкранный режим Выход из полноэкранного режима

Homeshick для точечных файлов

Homeshick — это менеджер точечных файлов, использующий git в качестве общего хранилища. Это отличный способ управлять dot-файлами, которые живут в вашем домашнем каталоге.

Вы создаете репозиторий github с папкой home. Затем вы можете клонировать этот репозиторий с помощью homeshick, и он симлинкует файлы в вашу домашнюю папку. Он спрашивает, прежде чем перезаписать файлы.

Вот, например, мое хранилище homeshick


Список файлов Homeshick как пример

Теперь, если я внесу изменения в файл в папке home, я могу отправить его в репозиторий, и он будет обновлен в общем хранилище (git).

Затем я могу выполнить простое обновление homeshick refresh для обновления файлов в моей домашней папке на всех других машинах Mac или Windows, и все будет синхронизировано. Это очень мощный инструмент.

Подробные инструкции по работе с homeshick можно найти на странице homeshick на github.

Установки Mac по умолчанию

Существует множество «скрытых» настроек Mac, которые можно изменить с помощью defaults write и defaults read. Это похоже на реестр Windows, но в MacOS.

На github можно найти потрясающие списки этих настроек, вот некоторые из них, полезные для разработчиков.

# Use plain text mode for new TextEdit documents
defaults write com.apple.TextEdit RichText -int 0

# Enable full keyboard access for all controls
# (e.g. enable Tab in modal dialogs)
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3

# Use scroll gesture with the Ctrl (^) modifier key to zoom (this makes mac work like Windows for this :) )
defaults write com.apple.universalaccess closeViewScrollWheelToggle -bool true
defaults write com.apple.universalaccess HIDScrollZoomModifierMask -int 262144

# Disable smart quotes and smart dashes - annoying when coding imho
defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
defaults write NSGlobalDomain NSAutomaticPeriodSubstitutionEnabled -bool false

# Disable auto-correct
defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false

# Use list view in all Finder Windows by default
# Four-letter codes for the other view modes: `icnv`, `clmv`, `Flwv`
defaults write com.apple.finder FXPreferredViewStyle -string "Nlsv"

# Finder: show all filename extensions
defaults write NSGlobalDomain AppleShowAllExtensions -bool true

# Save to disk (not to iCloud) by default
defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false

# Display full POSIX path as Finder window title
defaults write com.apple.finder _FXShowPosixPathInTitle -bool true

Войти в полноэкранный режим Выход из полноэкранного режима

Псевдонимы инструментов Unix

Вы можете добавить эти небольшие псевдонимы для встроенных инструментов unix, чтобы заставить их сообщать о том, что они только что сделали. Мне нравится получать такую проверку.

alias mv="mv -v"
alias cp="cp -v"
alias rm="rm -v"
# ...etc
Войти в полноэкранный режим Выйти из полноэкранного режима

Псевдоним sudo, чтобы он передавал ваше текущее окружение в поднятую оболочку.

alias sudo="sudo -E"
Войти в полноэкранный режим Выход из полноэкранного режима

Настройка vscode

Скажите vscode, что вы хотите использовать терминал iTerm на MacOS и использовать наш шрифт Nerd Font на обеих операционных системах.

Обратите внимание, что в Windows шрифт «Hack», а в MacOS — «Hack Nerd Font».

{
  "terminal.explorerKind": "external",
  "terminal.external.osxExec": "iTerm.app",
  "terminal.integrated.fontSize": 14,
  "terminal.integrated.fontFamily": "Hack Nerd Font",
  "terminal.integrated.profiles.osx": {
    "zsh": {
      "path": "/bin/zsh",
      "args": ["-l"]
    }
  }
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Установите zsh (Windows WSL)

В Windows WSL zsh не является оболочкой по умолчанию, как в MacOS, поэтому вам нужно установить ее.

Чтобы установить zsh, возьмите его из apt, а затем выполните следующую команду, чтобы установить его в качестве оболочки по умолчанию.

sudo apt install zsh && chsh -s $(which zsh)
Войти в полноэкранный режим Выйти из полноэкранного режима

Открыть текущую папку в Проводнике (Windows WSL)

Вы можете использовать следующий псевдоним для открытия текущей папки в Проводнике из Windows WSL.

alias open="explorer.exe $1"
Войти в полноэкранный режим Выйти из полноэкранного режима

Это имитирует команду mac finder open.

Автоматизация агента ssh для ssl-паролей (Windows WSL)

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

На WSL можно ограничиться однократным вводом пароля с помощью ssh-agent.

SSH_ENV="$HOME/.ssh/agent-environment"

function start_agent {
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
}

if [-f "${SSH_ENV}"]; then
    . "${SSH_ENV}" > /dev/null
    #ps ${SSH_AGENT_PID} doesn't work under cywgin
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi
Вход в полноэкранный режим Выход из полноэкранного режима

Определение MacOS или Windows в zshrc

В моих пользовательских скриптах мне приходится определять ОС несколько раз. Я подумал, что будет полезно показать, как я это делаю.

# detect the machine we're running on
# assume linux is wsl on Windows (although any Ubuntu should be ok)
unameOut="$(uname -s)"
case "${unameOut}" in
    Linux*) machine=Linux;;
    Darwin*) machine=Mac;;
    CYGWIN*) machine=Cygwin;;
    MINGW*) machine=MinGw;;
    *) machine="UNKNOWN:${unameOut}"
esac
Вход в полноэкранный режим Выход из полноэкранного режима

Резюме

Это все шаги, которые я выполняю на новой машине, чтобы она работала для моего рабочего процесса разработки.

Я надеюсь, что некоторые из этих инструментов и рекомендаций по настройке помогут вам получить больше от вашего терминала на Windows и Mac!

Если у вас есть вопросы, пишите мне в twitter.

Сэкономьте 30+ часов с помощью моих скриптов

На настройку всего этого у меня ушло около 30 часов.

Если вы хотите сэкономить время на настройку всего этого вручную, вы можете получить все скрипты, которые я использую для настройки всего на новой машине Mac или Windows, на сайте https://darraghoriordan.gumroad.com/l/devshell.

Вы получите

  • 14 хорошо протестированных, повторно запускаемых сценариев оболочки, которые установят все необходимое с нуля.
  • Точечные файлы со всеми псевдонимами и конфигурацией, которые я использую, предварительно настроены.
  • Запуск на Mac или Windows WSL Ubuntu.
  • В правильной структуре для немедленного потребления homeshick.
  • Полные исходники — вы можете поместить их в git-репо и редактировать под свои нужды.
  • Пожизненный доступ — я постоянно обновляю скрипты, и вы можете получить последнюю версию.
  • Моя конфигурация vscode разработчика, которая имеет много улучшений, но в частности она правильно устанавливает встроенный терминал и шрифты.
  • Все мои псевдонимы и функции.
  • Конфигурация git, ориентированная на разработчиков.

https://darraghoriordan.gumroad.com/l/devshell — 29 АВСТРАЛИЙСКИХ ДОЛЛАРОВ

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *