Oh-My-Zsh! A Work of CLI Magic — Tutorial for Ubuntu
I’m a big fan of the command line interface… I hate using my computer mouse! This motivated me to search for great tools to enhance my user experience on the CLI. I came across Oh-My-Zsh during my internship. Some friends convinced me to use this shell because of its simplicity and adjustability. As a bonus, the CLI is extendable with many plugins.
This is a list of its capabilities:
- Command validation
- Spelling correction
- Sharing of command history among all running shells
- Themeable prompts (Agnoster, RobbyRussell, …)
- Directory history
- Startup/shutdown scripts via zshenv , zprofile , zshrc , zlogin , and zlogout
- Strong autocomplete capabilities. You can use the TAB key to navigate through the different options and use enter to select the right folder. Bash for example would print all the options. This is fairly spammy and pollutes your scrollback.
- Add plugins: e.g. Git plugin with a huge list of useful Git aliases.
This plugin shows the active branch and gives visual feedback about your Git status:
— Green: branch if no changes occurred
— Yellow with a circle icon: untracked files
— Yellow with a plus icon: files ready to be committed
Installation Guide
I’m performing this installation guide on my Ubuntu 16.04 Virtual Machine. To show you the underlying power of Oh-My-Zsh, I will install the Git plugin (Git-core). This plugin gives visual feedback about the Git status of a project.
- Install prerequisite packages
$ sudo apt install git-core zsh - Install Oh-My-Zsh from Robby Russell’s repository
$ sh -c “$(curl -fsSLhttps://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" - Install the Powerline font to spice up your CLI with icons
$ sudo apt install fonts-powerline - Change theme from ‘robbyrussell’ to ‘agnoster’ for the legendary Oh-My-Zsh theme
$ nano
To actually see the theme, you have to source your .zshrc file like this: source
/.zshrc . If everything worked out fine, you should see something like the cover image!
Extra: Set zsh as our default shell. Execute this in your default shell, in most cases this will be bash. If you execute this command in zsh, it won’t change anything:
$ chsh -s $(which zsh)
Note: If you use sudo it will change the shell for root, but not for your working user. Besides that, make sure to logout and login again to see the changes.
Install Plugins
All plugins listed on the plugins Github page are pre-installed with Oh-My-Zsh at
/.oh-my-zsh/plugins . Custom plugins can be installed at
/.oh-my-zsh/custom/plugins . To use a plugin, you can simply add it to the plugins list in your
/.zshrc file. Add wisely, as too many plugins slow down shell startup. Leave a blank between each plugin.
Colored-man-pages
In this example, I’ve installed a useful plugin to give color highlighting to your man pages . To be able to use the plugin, source your .zshrc file:
$ source
Zsh-syntax-highlighting
Another great plugin is syntax highlighting for your shell. Besides that, this plugin has the capability to verify the correctness of your command.
This plugin isn’t installed with Oh-My-Zsh. Navigate to
/.oh-my-zsh/custom/plugins and clone the code from Github into this folder:
$ git clone https://github.com/zsh-users/zsh-syntax-highlighting
You will see a folder named zsh-syntax-highlighting . This is the name that needs to be added to the plugins list.
Zsh-autosuggestions
You can also use zsh-autosuggestions for command completion. It suggests commands based on your command history. Very useful! To select the proposed command, press the right arrow key.
Installation is the same as with zsh-syntax-highlighting :
$ git clone https://github.com/zsh-users/zsh-autosuggestions
And add zsh-autosuggestions to the plugins list.
Takes Care of Alias Enthusiast
Directory History
Oh-My-Zsh automatically remembers the 20 last directories you have visited. You can list the history chronologically with dirs -v or just d .
Normally, you can use cd +1 to go to the previous directory and so on. Oh-My-Zsh made this even more straightforward, now you can use just the number of the entry in the directory history you want to visit… 1 .
Other Interesting Aliases
- alias : List all aliases. You can pipe the output to grep to search for a particular alias.
- / : cd /
Well-known Problems & Solutions
Corrupt History File
It can happen the history file gets corrupt. Don’t ask me the specific details. Each time you launch a new terminal, you get this message:
Let’s fix it with the following commands. Make sure you are in the root of homefolder. The fc command lists, edits, or re-executes commands previously entered to a shell. The history command allows you to use words from previous command lines in the command line you are typing.
Conclusion
Oh-My-Zsh is just awesome!
Useful Links and Sources
This article was made with the help of TheLedger.
Oh My Zsh!
Хочу поделиться очень отличным шелом, а по большей части, фреймворком созданным для него, который превратит вашу консоль в очень информативный и продуктивный инструмент.
Данный материал пригодет только для пользователей unix-подобных систем, а именно Linux и MacOS. На MacOS не знаю что да как, но судя по всему установка и настройка совершенно не отличаются друг от друга. Соответственно его можно ставить и на веб-сервера.
Что это и зачем оно
Немного введу в курс дела, чтобы вы понимали что это такое и что оно даст. Во-первых, потребуется установить новую оболочку для терминала Zsh и переключиться на неё (кто не в курсе, они живут рядом с друг-другом и не затирают аналоги, так что можно всегда вернуться обратно, например на bash в ubuntu, + можно каждому юзеру выбирать свою, так что это совершенно безопасно). Во-вторых, мы поставим фреймворк для Zsh, который позволяет писать различные плагины, темы и т.д. для данной оболочки, что, собственно, и делает её такой удобой, так как люди написали кучу годноты.

Я не могу вам описать всех возможностей, ибо некоторые из них не так заметны и не сразу бросаются в глаза. Например, при указании пути до файла\папки Tab в Zsh, делает то же самое что и в bash, но куда круче, а я заметил это спустя неделю, так как не обращал внимания. Он мало того что может учитывать регистры папок и поправлять вас, так и список папок также можно визуально перебирать табом, что просто очень удобно и ускоряет работу.
Я вообще изначально ставил данный шелл и фреймворк только ради Git плагина, который показывает (если вы находитесь в папках с репозиторием), актуально ли текущее состояние репозитория, в какой ветке находимся, имеются ли новые изменения в файлах, есть ли коммиты или изменения. В общем всю необходимую информацию. Не нужно проверять ветку через git branch -v , проверять есть ли изменения через git status и т.д.
У него есть куча интеграций с различными программами и системными утилитами, которые позволяют сделать работу с терминалом намного, намного приятнее. Ведь, особенно, с Drupal 8, работать с ним нужно все чаще и больше.
Установка Zsh и Oh My Zsh
Первым делом нужно установить оболочку Zsh, для этого в Ubuntu необходимо просто запросить данный пакет, так как он находится в официальных репозиториях:
Далее нам необходимо поставить фреймворк Oh My Zsh. Разработчики предлагают два варианта установки, по сути они одинаковые, вам просто предоставляется выбор как вытянуть скрипт установщика, wget или curl , это лишь важно в тех случаях, когда на системе нет одного из них (частенько можно встретить отсутствие curl), и вы не хотите ставить пакет ради этого, или нет прав. Я также пишу вам два варианта, а какой использовать решайте сами:
После данной установки, у вас запросят пароль чтобы переключить шел для текущего пользователя на Zsh. Вводим, и всё готово!

Из коробки он хоть уже и дает больше информации, как по мне, он выглядит хуже оригинального. Для этого в OMZ есть поддержка тем и плагинов, которые могут в корне менять оболочку.
Где и что находится
Данный раздел я не мог упустить так как он может очень сильно помочь в дальнейшем. Фреймворк Oh My Zsh находится в папке
/.oh-my-zsh — там, в свою очередь, находятся все файлы фреймворка. А сама папка ничто иное как репозиторий Oh My Zsh. Но удалять папку просто так не стоит, там для этого есть специальный скрипт, ниже напишу как.
Все настройки для Oh My Zsh находятся в файле
/.zshrc. О нем подробнее будет ниже.
Установка плагинов
Начнем с установки нужных нам плагинов. Из коробки там стоит только git, больше никакие плагины не активированы. Список всех додступных плагинов поставляемых с фреймворком можно посмотреть на странице wiki, с описанием для чего они используются.
- npm — добавлят поддержку автодополнения к команде npm
- vagrant — так как я часто пользуюсь vagrant из-за Drupal VM, то мне он тоже не помешает. Также как и npm добавляет поддержку автодополнения. Там же есть и docker;
- composer — в 8-ке очень активно использую composer, а данный плагин опять же, добавляет автодополнение, и помимо этого различные полезные синонимы команд. Например cu = composer update ;
- sudo — частенько бывает и такое, что вбиваешь или копируешь команду из интернета, но для неё требуются права супер-пользователя. Постоянно переводить курсор и дописывать муторно, а данный плагин позволяет просто нажать два раза Esc , и он сам добавит sudo в начало команды;
- web-search — а иногда случается ситуация, что роешься в консоли и забыл какую-то команду, нужно гуглануть, и чтобы не переключаться на браузер, не кликать на строку поиска, данный плагин позволяет написать google drupal 8 composer , и в браузере по умолчанию сразу откроются результаты.
Там куча других плагинов, можно писать свои, выбирайте на свой вкус и под свои задачи, я продолжу гайд как поставить указаныне выше плагины (остальные ставятся абсолютно также).
Для того чтобы включить данные плагины (они уже есть в комплекте), достаточно отредактировать файл
/.zshrc . Для этого, в ubuntu, достаточно написать nano
/.zshrc , что вам удобнее. Открываем данный файл на редактирование и ищем строку plugins=(git) и добавляем туда все нужные нам плагины, учитывая список выше, вышло следующее: plugins=(git npm vagrant composer sudo web-search) . После изменения данного файла, всегда необходимо прописывать source
/.zshrc , иначе изменения вступят в силу только после перезагрузки.
Установка тем оформления
Из коробки оформление Zsh кому-то может и приглянуться, но мне оно не зашло. Называется она robbyrussell . Но есть куча других тем, по ссылке полный список тем которые идут в комплекте Oh My Zsh.
Я покажу как включать темы на примере оформления agnoster, так как оно больше всего мне по душе и иногда также требует дополнительных действий для корректной работы.
Для включеня данной темы нам опять, достаточно открыть
/.zshrc файли найти строку ZSH_THEME=»robbyrussell» и заменить стандартную тему на нужную, в моем случае agnoster , итого получается ZSH_THEME=»agnoster» . Не забываем про source
/.zshrc . И всё уже работает!

Если у вас вместо иконок Git или нету “уголков” в строке навигации, то вам нужно поставить спец. шрифты с данными иконками. Множество тем требует установки данных шрифтов, они никак не помешают, но будет работать как нужно. Если всё как и на скринах — ставить не нужно, если же нет, то ниже инструкция для вас.
Этого уже будет достаточно, можно работать. Но некоторые моменты я ещё затрону.
Настройки
Я их не правлю, но выписал с обьяснением чтобы было проще ориентироваться. Напоминаю что все они в
- CASE_SENSITIVE=”true” — чуствительность к регистру. Как я указал в начале статьи, он сам может исправлять регистр если видит что в текущем ничего не найдено. Если это мешает, установив данный параметр в true, поведение будет привычное bash;
- HYPHEN_INSENSITIVE=”true” — включает автоматическую замену между “_” и “-“. Аналогично параметру выше, но касается только дефиса и подчеркивания;
- DISABLE_AUTO_UPDATE=”true” — позволяет отключить автоматическое обновления Oh My Zsh;
- export UPDATE_ZSH_DAYS=13 — задает переодично проверки обновлений;
- DISABLE_LS_COLORS=”true” — позволяте отключить цветовую палитру при выводе команды ls ;
- DISABLE_AUTO_TITLE=”true” — отключение автоматического заголовка терминала;
- ENABLE_CORRECTION=”true” — включает корректировку команд. Например, вводя compozer он выдаст запрос: correct ‘compozer’ to ‘composer’? ;
- COMPLETION_WAITING_DOTS=”true” — включает точки ожидания ввода аргументов. Например введя composer и нажав Tab , он будет перебирать доступные команды (из-за одноименного плагина), а если ввести java и нажать таб, у него нет вариантов автодополнения (они будут появляться по мере их успешнного ввода в терминале и кэшироваться) он будет отображать красные точки для обязательного ввода которые можно отменить только Ctrl + C ;
- DISABLE_UNTRACKED_FILES_DIRTY=”true” — отключает пометку неиспользуемых файлов в пределе Git репозитория как “гразных”, что увеличивает скорость скана для git. Не могу сказать точнее что это и как это работает, но это напрямую связанно с git вообще, а не только плагином;
- HIST_STAMPS=”mm/dd/yyyy” — позволяет менять формат даты для команды history ;
- ZSH_CUSTOM=/path/to/new-custom-folder — позволяет добавить дополнительный путь до папки где будут храниться кастомные плагины и темы. По дефолту
Фиксим проблему с PATH
В Linux (не знаю как в MacOS), и в текущей версии я такой проблемы не словил, есть или можеть быть проблема что вы вбиваете команду в Zsh, а он говорит её нет. И это нормальное поведение, ведь в момент установки у вас был другой шелл, и возможно путь до бинарника указан в его индивидуальных настройках. Чтобы это исправить, достаточно указать путь до папки с бинарником(ами) в PATH переменную системы. Но bash’овский вариант export PATH=/usr/local/bin:$PATH прокатит до перезагрузки.
Вариант первый, это в файле конфига
/.zshrc раскомментировать соответсвующую строку в самом начале и добавить нужные пути, либо добавить их прямо из терминала:
Удаляем Oh My Zsh
Если вам потребуется полностью удалить Oh My Zsh и сам шелл с системы, то это делается достаточно просто:
Настройка Zsh и Oh my Zsh
Z-shell (или Zsh) — это интерактивная оболочка для операционных систем на базе ядра Linux. Даже если вы начинающий пользователь, скорее всего, вы уже несколько раз открывали терминал и выполняли там какие-либо команды. То место, где вы это делали называется командная оболочка. Оболочка, используемая по умолчанию в большинстве дистрибутивов Linux называется Bash.
Оболочка Zsh по своей сути такая же как и Bash, только намного интереснее. Она поддерживает интерактивное автодополнение по Tab, автоматический поиск файлов, интегрированные регулярные выражения, а также красивые темы. В этой статье мы рассмотрим как установить и настроить Zsh.
Установка Zsh
Для установки Zsh в Ubuntu выполните такую команду:
sudo apt install zsh
Чтобы установить Zsh в Fedora или CentOS используйте пакетный менеджер dnf:
sudo dnf install zsh
После этого вы можете запустить командную оболочку.
Настройка Zsh
Для запуска командной оболочки выполните такую команду:
При первом запуске Zsh предложит вам настроить вашу оболочку. Здесь вам нужно нажать клавишу 1 чтобы попасть в меню настройки:

1. Настройка истории
В этом меню давайте начнём с первого пункта. Там находятся настройки истории команд. Нажмите 1, затем, чтобы изменить количество команд, которые будут хранится в истории нажмите 3 (Number of lines of history to save to $HISTFILE) и введите нужное число:

Например, я увеличил количество хранимых строк до 5000. Чтобы вернуться в главное меню нажмите 0 (Remember changes and return to main menu).
2. Автодополнение
Дальше надо настроить автодополнение. Здесь можно выбрать пункт 1 чтобы оставить все настройки по умолчанию — Turn on completion with default options:

3. Раскладка клавиатуры
В третьем пункте настроек можно изменить как будут обрабатываться нажатия клавиш клавиатуры во время набора и редактирования команд. По умолчанию используется стиль Emacs, однако, вы можете включить стиль Vim если вы используете этот редактор. Для этого сначала нажмите 3, затем 1 для редактирования раскладки и выберите v для Vim:

4. Другие опции
В четвёртом пункте собраны другие опции оболочки. Их можно включить или отключить:
- Change directory given just path — менять директорию если вы введете в терминале путь к не исполняемому файлу;
- Use additional pattern matching features — разрешить использовать дополнительные символы при составлении шаблонов поиска совпадений, сюда входят символы #,
Чтобы активировать опцию нажмите её цифру, а затем нажмите s (set), для деактивации нажмите u (unset).

5. Сохранение настроек
Когда завершите, возвращайтесь в главное меню. Там, для сохранения всех изменений нажмите 0. Утилита предупредит, что в конфигурационный файл были добавлены строки настройки и редактировать их не стоит, можно редактировать только то, что до или после них. Если же вы захотите исправить что-то в них, снова запустите команду zsh-newuser-install.

После завершения настройки вы попадёте в оболочку.
6. Приглашение оболочки
Наверное, визитная карточка любой оболочки — это приглашение ввода. Именно его мы постоянно видим во время работы с оболочкой. По умолчанию приглашение выглядит слишком просто. Шаблон основного приглашения находится в переменной $PS1 или $PROMPT. Это приглашение ввода показывается при вводе любой команды и его интереснее всего настроить. Доступны такие переменные:
- %m — имя хоста;
- %n — имя пользователя;
- %? — код возврата последней команды;
- %d — текущая директория;
Кроме того, здесь поддерживаются различные цвета. Цвет может быть задан для фона или для текста. Следовательно синтаксис установки цвета такой:
В качестве назначения можно использовать fg, fg_bold или bg. А в качестве цвета:
- white — белый;
- black — чёрный;
- green — зеленый;
- cyan — фиолетовый;
- red — красный;
- yellow — желтый;
- magenta — оранжевый.
Для сброса цвета используйте конструкцию % . Дальше можно собрать своё приглашение ввода, например:
Для того чтобы это заработало в файл
/.zshrc надо добавить не только эту строчку, но и следующую:
autoload -U colors && colors
В результате вы получите такое приглашение ввода:

7. Установка oh my zsh
Если всего этого вам мало, то можно установить скрипт oh my zsh, который реализует множество дополнительных возможностей в zsh. Тут можно выбирать различные темы приглашения, добавлять плагины, например, git, добавлены различные возможности автодополнения и многое другое. Для установки этого скрипта выполните:
curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh
Скрипт установит все плагины и темы oh my zsh в вашу домашнюю папку, а также полностью заменит файл .zshrc на свой:

8. Настройка темы
Одна из самых интересных возможностей oh my zsh — темы. Темы определяют цвета текста, внешний вид приглашения и многое другое. Все доступные темы можно найти в папке

Посмотреть как выглядит та или иная тема можно на этой странице. Чтобы выбрать тему откройте файл
/.zshrc и пропишите имя темы в строчке ZSH_THEME. Именно так выполняется настройка oh my zsh. Мне, например, нравиться тема agnoster, поэтому:
Затем можно перезапустить zsh:

Но для работы конкретно этой темы надо установить пакет шрифтов:
sudo apt install fonts-powerline
9. Оболочка по умолчанию
Когда вы завершите с настройкой останется только установить zsh как оболочку по умолчанию для вашего пользователя. Для этого используйте команду chsh:
Утилита попросит пароль, а затем путь к исполняемому файлу оболочки, которую вы хотите использовать:

После этого, для текущего пользователя будет использоваться оболочка zsh по умолчанию.
Выводы
В этой небольшой статье мы рассмотрели два способа настроить zsh для личного использования. Это отличная оболочка, которая может предложить вам намного больше, чем Bash. А какая командная оболочка нравиться больше всего вам? Напишите в комментариях!
Installing ZSH
Oh My Zsh is a framework for Zsh, the Z shell.
- In order for Oh My Zsh to work, Zsh must be installed.
- Please run zsh —version to confirm.
- Expected result: zsh 5.0.8 or more recent
- Please run echo $SHELL from a new terminal to confirm.
- Expected result: /usr/bin/zsh or similar
Install and set up zsh as default
If necessary, follow these steps to install Zsh:
There are two main ways to install Zsh:
- With the package manager of your choice, e.g. sudo apt install zsh (see below for more examples)
- From source, following the instructions from the Zsh FAQ.
Verify installation by running zsh —version . Expected result: zsh 5.0.8 or more recent.
Make it your default shell: chsh -s $(which zsh) or use sudo lchsh $USER if you are on Fedora.
- Note that this will not work if Zsh is not in your authorized shells list ( /etc/shells ) or if you don’t have permission to use chsh . If that’s the case you’ll need to use a different procedure.
- If you use lchsh you need to type /bin/zsh to make it your default shell.
Log out and log back in again to use your new default shell.
Test that it worked with echo $SHELL . Expected result: /bin/zsh or similar.
Test with $SHELL —version . Expected result: ‘zsh 5.8’ or similar
How to install zsh on many platforms
Try zsh —version before installing it from Homebrew. Preferably newer than or equal to 5.0.8 .
To set zsh as your default shell, execute the following assuming a default install of Homebrew
Recent macOS versions:
macOS High Sierra and older:
Assuming you have Homebrew installed. If not, most versions of macOS ship zsh by default, but it’s normally an older version. Alternatively, you may also use MacPorts
Ubuntu, Debian & derivatives (Windows 10 WSL | Native Linux kernel with Windows 10 build 1903)
If you don’t have apt , the recommended package manager for end users [1] [2] [3] [4] , you can try apt-get or aptitude .
Other distributions that apply include: Linux Mint, elementary OS, Zorin OS, Raspbian, MX Linux, Deepin.
Arch Linux or Manjaro
To install the package:
To install the package:
To install the port:
To reduce memory usage, optionally enable zsh-mem options with

before running «make install».
Install the zsh package using the installer. Unfortunately Cygwin doesn’t have a standard command line interface. You could, however, setup apt-cyg and install zsh as follows:
The easiest way to change the default shell is to set your SHELL user environment variable. Search for «Edit Environment variables for your account» to bring up the environment variables window, create a new variable named «SHELL» and give it the value «/usr/bin/zsh/».
Alternatively: Open Cygwin (in BASH) then type:
Once the .bashrc file is open, add this line to the very top:
Close and save the file. Close and reopen Cygwin. It will execute the command every time you load the terminal and run your zsh shell.