7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Tools & Tips

Как настроить командную строку

Scroll to top
Read Time: 11 mins

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

В последнее время мне часто задаю этот вопрос: «Как вы настроили свой терминал, чтобы он так выглядел?» Если вы заметили мой терминал и вам интересно, как я его настроил, это учебник для вас! Конечно, того, что вы узнаете здесь, будет достаточно, чтобы начать создавать собственный стиль командной строки!


Прежде чем мы начнем, я хочу кое-что прояснить. Я, конечно, энтузиаст командной строки, но я вовсе не профессионал. Я чувствую себя как дома в терминале, но я далек от знания всего. Итак, сделаем следующим образом: я покажу вам, как я настроил свой терминал, но это не значит, что я смогу объяснить каждую строку кода, которую мы увидим. Будут некоторые вещи представлены так, как есть, потому что они просто работают ... и я не всегда на 100% знаю, почему.

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


Встреча с готовым продуктом

Вот как выглядит мое приветствие командной строки:

Если вы не уверены в том, что вы здесь видите, позвольте мне объяснить:

  • В бирюзовом цвете мы имеем имя компьютера; в моем случае это mothership. Затем следует двоеточие.
  • Затем у нас есть рабочий каталог, представленный в желто-оранжевом.
  • Если мы находимся в репозитории git, у нас есть информация об этом. Главное здесь - название ветки (master или tilt_in_post_class на скриншоте). Кроме того, если рабочий каталог чист, этот текст отображается зеленым цветом; в противном случае он отображается красным цветом.
  • Наконец, у нас есть индикатор батареи. Если десять треугольников зеленые и заполнены, батарея заряжена. Когда моя батарея опустеет, треугольники опустеют и в конечном итоге станут красными. Конечно, если вы не на ноутбуке, как я, это не будет так полезно для вас.

Подготовка среды

Давайте теперь сделаем несколько предварительных действий, прежде чем начнем писать сценарии оболочки.

Во-первых, есть цветовая схема. Вы можете распознать его как цветовая схема Solarized Этана Шуновера. Она довольно симпатичная, и я использовал ее как в терминале, так и в Vim с тех пор, как я ее обнаружил. Если вы хотите использовать ее в терминале, вам нужно будет установить тему. Терминал в Snow Leopard не поддерживает xterm-256color, поэтому вам нужно будет следовать некоторым специальным указаниям на странице Solarized GitHub, чтобы она заработала, если вы все еще находитесь на этой ОС.

Если вы перешли к Lion, вы можете просто установить файлы .terminal, которые вы найдете в папке xterm-256color. После того, как вы установите их (просто дважды щелкните их), вы сможете выбрать тему, которую захотите в настройках терминала. Не забудьте установить ее как схему по умолчанию.

Следующее, что нужно знать, это то, что я не использую оболочку bash по умолчанию в моем терминале. Вместо этого я переключился на zsh, который в основном совместим с bash, но имеет несколько приятных дополнений, например, лучшее автодополнение по табу. Вот как это сделать: откройте настройки системы Mac и перейдите к «Пользователи и группы». Разблокируйте панель, щелкнув блокировку внизу и введя свой пароль. Затем щелкните правой кнопкой мыши на вашем пользователе в списке и выберите «Дополнительные параметры». В поле «Входная оболочка» перейдите из /bin/bash в /bin/zsh. Это так просто.

Шрифты

Следующий шаг: получите правильный шрифт. Я использую Inconsolata в 15pt. Это бесплатный моноширинный шрифт, на который мне нравится смотреть в течение всего дня. (Помимо использования его в терминале, я использую его в Vim и TextEdit.) Вы можете установить шрифт по умолчанию из настроек терминала, прямо там, где вы выбираете цветовую схему.

Еще одна небольшая вещь - размер вашего окна: Откройте «Настройки терминала»> «Настройки» и перейдите на вкладку «Окно»; проскрольте вниз, вы можете выбрать количество столбцов и строк, которые вы хотите; Я использую 130 столбцов на 30 строк.

Аккумулятор

Помните индикатор уровня заряда батареи? Ну, для этого требуется небольшой скрипт от разработчика Стива Лоша; просто скопируйте это в файл и сохраните его как файл python; поскольку ~/bin находится в PATH моего терминала, я сохранил файл в ~/bin/batcharge.py. Как он отмечает, этот скрипт будет работать только в Mac OS X, поэтому, если вы запускаете zsh в другой системе, вам придется пропустить эту часть.

Zsh

Наконец, но, конечно же, не в последнюю очередь - oh-my-zsh. Согласно репозиторию Github, это всего лишь «Несколько функций, помощников с автодополнением и прочее, что заставляет вас кричать« OH MY ZSHELL! »»

Зачем использовать его? Для меня я решил попробовать в какой-то момент, и я оставил его установленным. Если вы пользуетесь терминалом много, немного окунитесь вокруг oh-my-zsh, когда у вас есть время. Вы можете быть удивлены тем, что обнаружите. Установка oh-my-zsh довольно проста: просто следуйте инструкциям по установке в README; они довольно прямолинейны.

Теперь у нас есть все что необходимо. Мы готовы начать создавать пользовательский терминал.


Создание файлов

Когда вы установили oh-my-zsh, он был установлен в ~/.oh-my-zsh. Откройте эту папку. Вы увидите две папки themes и templates. Внутри templates вы найдете файл с именем zshrc.zsh-template. Это шаблон для файла ~/.zshrc. Если вы уже настраивали свой терминал раньше, вы знаете, что файл .bashrc - это то место, где хранятся ваши настройки, когда вы используете оболочку bash. .zshrc - это то же самое, только уже для оболочки zsh. Поэтому откройте этот файл шаблона; вам не нужно знать, что именно происходит; в конце концов, в файле есть много комментариев, которые могут не иметь смысла. Здесь важно одно. Обратите внимание на строку, в которой говорится следующее:

Это название темы, которую использует ваш терминал. Посмотрите в папку themes: вы увидите файл robbyrussel.zsh-theme. Мы собираемся создать собственную тему, поэтому вы можете заменить эту строку именем нашего нового файла. Я неоднократно называл мою «doubleend», потому что она идет по обе стороны терминала.

Любые другие настройки, которые вы хотите внести в среду zsh, могут быть сделаны в этом файле. Если вы постоянно используете терминал, проверьте плагины oh-my-zsh (в папке plugins): там есть масса полезных вещей.

Не забудьте скопировать в zshrc.zsh-template в свой домашний каталог и переименовать его в .zshrc, прежде чем вносить изменения. Теперь в папке themes создайте файл с именем темы, заданным в файле .zshrc. Убедитесь, что вы добавили расширение .zsh-theme. Мы готовы создать собственную тему.


Создание пользовательской темы

Самая важная вещь в вашем файле темы - это переменная PROMPT. Это содержимое командной строки. Чтобы получить представление об этом, начните с этого в файле темы:

Откройте новое окно терминала, и вы увидите следующее:

Хорошо, давай приступим к работе. Нам нужно будет написать несколько функций, но мы начнем с переменной PROMPT. Это может быть не заметно при просмотре терминала, но в моей подсказке есть три строки. Первая - пустая строка, просто чтобы дать мне передышку. Вторая имеет всю информацию, а третья - стрелку. В этой третьей строке вы набираете команду. Итак, вот наш старт:

Да, вы можете делать многострочные строки, которые легко выполняются в сценариях оболочки. Но для чего $reset_color? Это переменная, которую oh-my-zsh определяет для нас; она сбрасывает цвет вывода. Для этого требуется небольшое отступление, чтобы обсудить, как мы раскрашиваем разные слова в подсказке. Вы видите, есть код - серия символов, которые переключают следующий текст в цвет. Очевидно, есть код для каждого доступного цвета. Не беспокойтесь, есть другие переменные для других цветов; вам не нужно изучать коды. К тому времени, когда мы дойдем до третьей строки, мы хотим сбросить ее до цвета текста по умолчанию; поэтому мы используем переменную $reset_color.

Если вам интересен символ стрелки, это стрелка вправо Unicode (U + 2192, & rarr;). Вот и все.

Итак, теперь наше приглашение выглядит так:

Взгляд стройный. Теперь добавим имя компьютера и рабочий каталог. Это все для этой второй строки нашей переменной PROMPT.

Начнем с установки цвета текста в синий цвет; кажется, что мы получаем этот цветовой код из ассоциативного массива или хэша; в то время как я его не использую, есть хеш $bg, который меняет цвет фона вместо цвета переднего плана (текста).

После установки цвета у нас идет %m, который выводит имя компьютера. После двоеточия и пробела мы переключаем цвет текста на желтый. Затем мы используем знак доллара и parens, чтобы добавить результат функции get_pwd. Это выведет наш текущий рабочий каталог. Если я в домашнем каталоге, я не хочу видеть /Users/andrew, я хочу видеть ~ вместо этого. Итак, вот эта функция:

Оболочка функции довольно проста, если вы уже знакомы с JavaScript. Я не уверен, откуда возник синтаксис для поиска и замены, но выглядит очень похоже на синтаксис поиска и замены Vim: если PWD содержит текст $HOME (системная переменная для вашего домашнего каталога), замените его на ~.

Теперь вот что:

Хорошо! Теперь наступает сложная часть. Видите ли, я хочу выровнять справа информацию о git и индикатор батареи. Поскольку на самом деле нет правильного выравнивания, нам нужно подсчитать количество символов текста, которое нам нужно, вычесть его из ширины окна и добавить этот интервал. Это выглядит как хак, и код довольно грязный, но это все, что я смог найти, что на самом деле работает.

Готовы? Мы вставляем интервал с функцией, которую я называю get_spacing. Поэтому добавьте $(get_spacing) до конца второй строки, так что теперь она выглядит так:

Теперь эта функция. Конечно, вот оболочка:

Внутри есть четыре части. Вот первая.

Начнем с получения результата из функции git_prompt_info и сохранения его в локальной переменной git. Затем, если длина этой строки не равна 0, мы изменяем git так, чтобы теперь была длина строки минус 10. В противном случае мы сбросим git до 0. Это, похоже, не имеет особого смысла, пока вы не поймете, что мы пытаемся здесь сделать. Мы хотим узнать, сколько символов «слотов» занимает информация о git.  Сложная часть состоит в том, что мы повторно используем переменную git: сначала она содержит строку, затем она содержит число, представляющее количество символов, которые мы имеем в git-информации. Если git равно нулю символов, мы устанавливаем git в 0; если это не так (означает, что мы находимся в репозитории git), мы устанавливаем git на количество символов в строке, минус 10. Это связано с тем, что число символов в строке содержит цветовые коды, которые на самом деле не видны, поэтому они не занимают ширину. Двойные скобки? О, они используются для вычислений.

Мы делаем то же самое для вывода батареи:

В третьей части мы выясним, сколько пробелов нам понадобится:

Еще больше математики: мы начинаем с COLUMNS, число символов равное ширине терминала. Мы вычитаем все соответствующие значения (3 для двух пробелов и двоеточие), и в итоге получим termwidth , которое нам нужно рассчитать как количество пробелов между левой и правой частями подсказки.

Теперь давайте создадим строку termwidth с числом пробелов:

Простой цикл for-in позволяет нам создавать строку; затем мы ее возвращаем.

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

Далее, информация Git. Мы добавляем $(git_prompt_info) в конец строки подсказки 2; как вы знаете, это вызов функции.

Обратите внимание, что мы не изменяем цвет перед загрузкой информации Git: функция позаботится об этом, потому что это зависит от статуса репозитория.

И вот сама функция:

Первая строка просто проверяет, находимся ли мы в репозитории Git. Если нет мы return. Если да, следующая строка echo правильную информацию. Обратите внимание на две вещи здесь: во-первых, мы используем две переменные: $ZSH_THEME_GIT_PROMPT_PREFIX и $ZSH_THEME_GIT_PROMPT_SUFFIX. Скоро я покажу вам, как они определяются. Другая вещь - две другие функции, которые вызываются. Они предоставляются oh-my-zsh. Функция current_branch возвращает текущую ветку. Однако parse_git_dirty интереснее. Если текущая ветвь загрязнена (имеет незафиксированные изменения), функция выведет $ZSH_THEME_GIT_PROMPT_DIRTY; иначе она выведет $ZSH_THEME_GIT_PROMPT_CLEAN.

У меня эти четыре переменные определены так:

Основываясь на этих переменных, репозиторий на чистой ветке мастера выводит [git: master] зеленым цветом; будет выведена грязная ветвь master + [git: master].

И, наконец, мы вызываем функцию battery_charge:

Вот функция battery_charge:

Если файл существует, мы запускаем этот файл и повторяем вывод. Обратите внимание, что мы используем обратные тики вокруг запуска файла (это не одинарные кавычки): это позволяет нам выполнить строку кода, как если бы она была в терминале. Если файл не существует, мы просто повторяем пустую строку.

И с этим мы закончили! Вот что мы получили в итоге:


Заключение

Ну, вот как выглядит мой терминал. Я форкнул проект oh-my-zsh на GitHub и добавил эту тему, чтобы вы могли ее найти. Если вы заинтересованы в том, чтобы увидеть мои другие dotfiles, они так же есть на GitHub.

Тем не менее, я еще не закончил настройку командной строки. Хотя я не вносил никаких изменений в какое-то время, я думаю о включении имени текущего пользователя (потому что я использую ту же тему на своем сервере), а также некоторую информацию RVM. Кроме того, я не уверен, зачем мне слово git; Я предполагаю, что у меня первоначально была установка, которая работала с несколькими системами управления версиями ... В любом случае, все дело в том, что это то, что вы постоянно будете настраивать. Когда я вношу изменения, я обязательно заливаю их на GitHub, так что вы сможете увидеть их там.

Позвольте мне оставить вам несколько ссылок, которые будут вам полезны при изменении командной строки:

Хорошенько повеселитесь!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.