Oh my zsh подсветка синтаксиса

Oh My Zsh — Улучшаем iTerm

_AMD_

Основатель trigon.im и gm-donate.ru. Интересуюсь айти, текстами, продажами. Меломан, интроверт, альтруист

_AMD_

Эта инструкция написана для Mac’овского iTerm, но при помощи несложных манипуляций может применяться и в других термианалах в т.ч. на удаленных Linux машинах

TL;DR (Вкратце)

  1. Установка HomeBrew
  2. Установка оболочки zsh
  3. Установка оболочки для zsh 🙂 (Oh My Zsh)
  4. В iTerm делаем, чтобы вместо Bash юзался Zsh
  5. Меняем дефолтную цветовую схему в iTerm
  6. Устанавливаем пропатченные шрифты с доп. символами
  7. Устанавливаем тему OMZ (Oh My Zsh)
  8. Устанавливаем плагины OMZ
  9. Прописываем все это в настройках OMZ

Установка HomeBrew

Это аналог пакетного менеджера apt в Linux. Через него гораздо проще устанавливать многие вещи, вроде оболочки Zsh и многих плагинов для нее

Установка Zsh

Оболочка, типа всем известного баша, но с кучей настроек и возможностей для кастомизации

Установка Oh My Zsh

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

Меняем оболочку на Zsh

Открываем настройки iTerm > Profiles > Default > Command: /bin/zsh
При перезапуске iTerm у вас уже будет Zsh (пока что ненастроенный)

command > /bin/zsh

Установка цветовой схемы iTerm

  1. Скачиваем репозиторий с кучей-кучей схем
  2. В readme.md по скриншотам ищем схему, которая понравилась (у меня Afterglow. Люблю ее еще с Sublime Text 3)
  3. Находим ее в repo/schemes и испортируем в iTerm через Preferences > Profiles > Default > Colors > Color Presets. > Import

Установка Powerline Fonts

Нужны для корректного отображения символов во многих темах. Без него в темах могут быть закарлючки вместо иконок

Изменяем в iTerm Profiles > Default > Text > Change Font > Meslo LG S Regular For Powerline (Последнее можете выбрать другое, но обязательно кириллический и для Powerline)

Установка темы для OMZ (Oh My Zsh)

Тема и делает всю красоту: добавляет особые фичи, изменяет оформление и тд

Список стандартных тем можно посмотреть здесь
Я использую нестандартную Powerlevel9k. Если хотите ее же:

Если вам приглянулась какая-то из стандартных, например, как мне, Agnoser, то переходим к следующим шагам, игнорируя этот. Установка самой темы будет в конце

Установка плагинов для OMZ

Плагины добавляют новые алиасы к коммандам, а в некоторых случаях и изменяют вид терминала, например, при входе в папку .git репозитория

Список стандартных плагинов здесь. Я использую git docker docker-compose osx zsh-syntax-highlighting

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

Ниже мы активируем его, другие плагины, темы и немного поправим настройки OMZ

Настройка Oh My Zsh

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

У меня конфиг выглядит так:

Ссылки

Subscribe to Блог _AMD_

Get the latest posts delivered right to your inbox

KeePass — удобный и безопасный способ хранить сотни разных паролей

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

Monero. Linux CPU mining (Ubuntu)

Майнинг монеро основан на алгоритме CryptoNight, который устойчив к майнингу ASIC’ами. Особенностью алгоритма является возможность майнинга, как на CPU так и на GPU. У меня завалялось несколько серверов, поэтому я

Subscribe to Блог _AMD_

Stay up to date! Get all the latest & greatest posts delivered straight to your inbox

Источник

Подсвечиваем zsh с zsh-syntax-highlighting

Есть такой замечательный shell — fish. И всем бы он замечательный, но уж жутко я привык к zsh и многим его фичам, которых нет в fish, и наоборот: в zsh не было одной очень понравившейся мне возможности — in-line подсветки синтаксиса. Точнее, я так думал что не было, или не было до недавнего времени. В общем не это важно. Теперь это она есть в виде дополнения к zsh, и называется zsh-syntax-highlighting.

Установка проста и нетривиальна. Даже не уверен, что можно назвать «установкой».

Добавляем в конфиг zsh:

При следующем запуске терминала всё уже будет работать:

В репозитории есть 5 видов подсветок:

  • main — «главная подсветка»
  • brackets — подсветка парных скобок
  • pattern — подсветка определённых пользователем паттернов
  • cursor — подсветка курсора
  • root — подсвечивает команды, если текущий пользователь — root

По-умолчанию включен только main. Для включения какого либо из остальных необходимо добавить в файл конфигурации zsh массив ZSH_HIGHLIGHT_HIGHLIGHTERS , с нужными «подсветками»:

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

Pattern на мой взгляд наиболее интересная подсветка. Эту подсветку можно использовать, чтобы «подсветить» пользовательские команды. Например, чтобы дополнительно обратить внимание на «потенциально опасные команды». Для примера можно выделить фон для команды rm -rf красным цветом:

Читайте так же:  Не работает подсветка салона ауди 100 с4

Ну и собственна цвет для курсора:

И цвет для команд суперпольвателя root:

Лично себе я оставил только три подсветки: main, brackets и pattern. Курсор у меня и так «подсвечивается», и для для root пользователя у меня цвета тоже меняются.

Можно так же создавать свои «подсветки», но я в это не углублялся так как нет такой нужды. Чуть более подробно это описано на соответствующей страничке проекта на github.

Источник

Oh my zsh подсветка синтаксиса

12 contributors

Users who have contributed to this file

  • Arch Linux: community/zsh-syntax-highlighting / AUR/zsh-syntax-highlighting-git
  • Debian: zsh-syntax-highlighting package in stretch (or in OBS repository)
  • Fedora: zsh-syntax-highlighting package in Fedora 24+ (or in OBS repository)
  • FreeBSD: pkg install zsh-syntax-highlighting (port name: shells/zsh-syntax-highlighting )
  • Gentoo: app-shells/zsh-syntax-highlighting
  • Mac OS X / Homebrew: brew install zsh-syntax-highlighting
  • NetBSD: pkg_add zsh-syntax-highlighting (port name: shells/zsh-syntax-highlighting )
  • OpenBSD: pkg_add zsh-syntax-highlighting (port name: shells/zsh-syntax-highlighting )
  • openSUSE / SLE: zsh-syntax-highlighting package in OBS repository
  • RHEL / CentOS / Scientific Linux: zsh-syntax-highlighting package in OBS repository
  • Ubuntu: zsh-syntax-highlighting package in Xenial (or in OBS repository)
  • Void Linux: zsh-syntax-highlighting package in XBPS

Simply clone this repository and source the script:

Then, enable syntax highlighting in the current interactive shell:

If git is not installed, download and extract a snapshot of the latest development tree from:

Note the source command must be at the end of

Note that zsh-syntax-highlighting must be the last plugin sourced.

The zsh-syntax-highlighting authors recommend manual installation over the use of a framework or plugin manager.

This list is incomplete as there are too many frameworks / plugin managers to list them all here.

Add antigen bundle zsh-users/zsh-syntax-highlighting as the last bundle in your .zshrc .

Clone this repository in oh-my-zsh’s plugins directory:

Restart zsh (such as by opening a new instance of your terminal emulator).

Zsh-syntax-highlighting is included with Prezto. See the Prezto documentation to enable and configure highlighters.

Add zgen load zsh-users/zsh-syntax-highlighting to the end of your .zshrc .

Add zplug «zsh-users/zsh-syntax-highlighting», defer:2 to your .zshrc .

Add zplugin load zsh-users/zsh-syntax-highlighting to the end of your .zshrc .

Any of the above methods is suitable for a single-user installation, which requires no special privileges. If, however, you desire to install zsh-syntax-highlighting system-wide, you may do so by running

Источник

Ansible: настраиваем zsh терминал с antigen, autosuggestions, fzf и красивым prompt одной командой

Я провожу в терминале много времени, поэтому хочется, чтобы все было красиво, быстро и удобно. Из этого рождается постоянное желание его настраивать, пробовать разные плагины. Шеллом я выбрал для себя zsh лет 5 назад, пару лет назад нашел oh-my-zsh для его удобной настройки.

Со временем к этому конфигу добавились некоторые сбоку торчащие части в виде powerline и percol.

Недавно я решил пересобрать все так, чтобы избавиться от ненужных плагинов, добавить нужные, сделать легкую установку и обновление. В итоге появилась роль ansible-role-zsh, которая полностью настраивает терминалы на локалке и на моих серверах.

Особенности:

/.zshrc
полностью локальная (в систему ничего не ставится, все хранится в

/.oh-my-zsh )
оставляет возможность юзеру вносить свои настройки через

/.zshrc.local

  • одинаково работает на macOS, старом Debian, Ubuntu, CentOS
  • нормально выглядит на разных цветовых схемах (но лучше всего на Solarized Dark)
  • встроенная подсветка синтаксиса (помогает реже ошибаться и лучше читать длинные команды)
  • автодополнение по истории команд (помогает реже нажимать Ctrl+R )
  • отображение времени для долго выполняемых команд (помогает реже использовать time )
  • Демонстрация фич за 1 минуту:

    Раньше я пользовался powerline, который отвечал за command prompt (строку состояния) и percol для интерактивного поиска. Обе утилиты написаны на python.

    Они хороши, когда я нашел percol, скорость работы в терминале сразу выросла, я радовался этому в блоге, но ставилось это все не очень красиво (bash инсталлером), имело некоторые проблемы при работе нескольких юзеров с красивыми терминалами на одном сервере.

    Также в некоторых случаях проявлялись недостатки утилит: терминал грузился с небольшой задержкой (около 1 секунды), percol тупил на больших объемах текста.

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

    По этим причинам я поискал, чем их можно заменить и нашел.

    fzf, замена Percol

    Fuzzy finder написан на Go, имеет кучу звездочек, судя по описанию, заточен на работу в Vim, но и в других местах работает.

    При выборе смотрел еще на peco, они похожи, оба написаны какими-то японцами на Go, я выбрал fzf по следующим критериям:

    • больше контрибьюторов, вообще пульс проекта бьется примерно в 2 раза чаще
    • заточен под vim и tmux, при этом хорошо работает и в обычном терминале
    • настраивается через параметры командной строки и переменные окружения, а не через отдельный конфиг
    • короче на одну букву 🙂

    У fzf есть некая крутая фича автодополнения разного через ** , я не проверял, но автор плагина fzf-zsh пишет, что он конфликтует с zsh-autosuggestions , я ему верю.

    Powerlevel9k, замена Powerline

    Тему powerlevel9k я нашел случайно, потом проверил, по запросу на Github powerline zsh он второй (после самого powerline).

    Тема навороченная, позволяет много всего, я воспользовался некоторыми из фич:

    • настройка всего через переменные окружения (сегменты, их расположение, цвета)
    • добавление кастомных сегментов через те же переменные

    Как и powerline, тема требует установки патченных шрифтов powerline fonts, я использую шрифт Droid Sans Mono, 12pt. Шрифт и цветовая схема — две вещи, которые нужно установить вручную.

    Читайте так же:  Tp v56 pa671 уменьшить ток подсветки

    zsh-autosuggestions

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

    Работает это так: при вводе команды плагин читает историю и дописывает серым последнюю команду из истории, начинающуюся так же.

    Если нажать Enter, выполнится ваша команда, а не из автодополнения (это хорошо, случайно вызвать не ту команду будет сложно, хотя у некоторых автодополнений бывают такие проблемы). Чтобы подставить дополненную команду, нужно нажать кнопку, забинденную на действие autosuggest-accept , по умолчанию это →.

    Но до стрелочки вправо постоянно тянуться неудобно, поэтому я сначала забиндил автодополнение на backtick (обратную кавычку, которая слева от единицы). Это было очень удобно: прямо рядом с Tab и работает похоже на Tab . Но позже выяснилось, что это ломает работу Midnight Commander: на одних системах он перестал переключать путь во внутреннем шелле (что полезно: через mc переходим в нужную папку, нажимаем Ctrl+O , вводим команду, выходим из внутреннего шелла, или наоборот бывает удобнее перейти в папку через шелл, а потом произвести действия в mc), на других системах mc вообще зависал через пару переходов по папкам. Я погуглил проблему, в трекере mc есть такой глюк, в последней версии 4.8.18 зависания убрались, но путь так и не стал меняться, поэтому я стал пробовать другие хоткеи: Ctrl+Space , Ctrl+I , все они так или иначе глючили.

    В итоге пришел к такому: я сам mc пользуюсь редко, поэтому на всех системах, где бываю не только я, я забиндился на Ctrl+U , а на личных — еще и на кавычку. В плейбуке забиндено только на стрелочку.

    Еще в ansible-role-zsh работа плагина ограничена 15 символами, то есть через 15 символов он перестает предлагать команды.

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

    zsh-syntax-highlighting

    Про этот плагин можно сказать не особо много: подсвечивает текущую введенную команду, раскрашивая на лету.

    Главный плюс в том, что вы видите, что опечатались по красному цвету слова. Не скажу, что это must have, но удобнее становится.

    В то же время у плагина есть сразу несколько косяков.

    На системах, где zsh , вызывает крах терминальной сессии, поэтому в плейбуке есть защита от активации плагина на таких системах. Случай редкий, я сделал это ради Debian Squeeze.

    Плагин должен подключаться последним, а не то не знаю что будет и знать не хочу.

    Конфликтует с zsh-autosuggestions, проявляется в вылетании сессии при попытке повторно применить конфиг .zshrc .

    Про это есть соответствующий issue и автор zsh-autosuggestions говорит, что исправление уже в devel ветке, я не проверял, но если это так, после релиза v0.3.4 должно все исправиться.

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

    zsh-command-time

    Пока наводил порядок в этом проекте, реализовал одну из своих давних хотелок: вывод времени выполнения для команд, которые выполняются долго. До этого я либо смотрел на часы в правом углу терминала и сравнивал с часами в предыдущей команде, либо сразу запускал команду с time . Теперь этого делать не надо.

    Внешний вид темы в разных цветовых схемах

    Я использую цветовую схему Solarized Dark, но чтобы не огорчать коллег, которые заходят на настроенные мной сервера, я проверил, как выглядит терминал на стандартной палитре Putty, на стандартной палитре Ubuntu, на встроенных темах iTerm:

    Установка

    Итак, если вам понравилось, предлагаю сначала посмотреть работу вживую, в Vagrant:

    Перед установкой на рабочую систему внимательно прочитайте это:

      Роль не установится, если у вас уже есть директория

    /.oh-my-zsh , переименуйте ее, если она у вас есть.
    Роль затрет ваш

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

    /.zshrc.local , этот файл инклюдится в конце

    /.zshrc и ansible его не трогает.

    Если все устраивает, можно установить роль через ansible-galaxy :

    Потом создать плейбук вроде такого:

    Сохранить, например, в zsh.yml . После этого роль можно применить к локальному юзеру:

    Как применить к другим юзерам и серверам пользователи ansible думаю разберутся.

    Проверено на Debian 6, Ubuntu 14.04, Ubuntu 16.04, macOS 10.12, CentOS 7.

    Все доступные переменные не стал выносить в README.md, их можно посмотреть
    в defaults/main.yml.

    Выводы

    Я понимаю, что конфиг терминала — очень личная вещь, не уверен, что будет много желающих воспользоваться именно моей ansible ролью, поэтому я постарался сделать ее максимально настраиваемой. Если будут желающие использовать, пожалуйста, оставляйте issues.

    Конечно, это не последний конфиг, например, пока я писал эту статью, я нашел antigen, менеджер плагинов для zsh, который написан по аналогии с Vundle для Vim, заточен на работу в паре с oh-my-zsh и избавляет от ручной установки плагинов. Это как раз одна из проблем, которую я решал написанием роли. Поделитесь, кто пользовался.
    UPD 03.04.2017: переписал роль с использованием antigen.

    В комментах хотелось бы найти новых вкусных плагинов, пожалуйста, напишите, какие плагины вызвали у вас чувство «как я жил без этого раньше?»

    UPD: добавилась поддержка CentOS, спасибо, BeeVee!

    Источник

    Оцените статью
    Охраны в доме нет
    Adblock
    detector