Обживаемся в консоли: Tmux + Vim

Это не полноценная статья, скорей краткая заметка, которая является наброском сценария для будущего скринкста.

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

TMUX

Что это

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

Откуда взялось

Пришел к нам из мира openbsd как и много чего хорошего, где был разработан как замена screen.

Зачем это

позволяет работать с несколькими сессиями в 1 окне. Вместо нескольких окон терминала к серверу — вы можете использовать одно. Позволяет подключаться/отключаться к текущему состоянию сессии. Запущенные программы и процессы продолжают работать. 

Теперь подробней

Философия tmux —   при запуске, tmux запускает сервер с 1 или более сессий. В каждой сессии может быть одно и боле окон, из 1 и более областей. Итого у нас парадигма сессия-окно-область:

Если проводить аналогию с миром GUI:

  • сессия — для Вас как отдельное рабоче место, Ваш компьютер
  • окно — аналог  рабочего стола (или набора виртуальных рабочих столов)
  • панель- окно приложения

 Что вы можете делать с tmux:

  • Одновременно держать несколько запущенных задач на одном экране. причем это не обязательно будет ваша локальная машина
  • Оставлять задачу запущенной в фоне,
  • Отключаться и подключаться к ней запускать в фоне задачу, которую обычно сложно перевести в формат фоновой, например регулярно чт-то выводящей на экран
  • Составлять свой собственный консольный рабочий стол, собственную IDE и т.д.
  • Кооперативно подключаться к одной сессии несколькими пользователями

 


Основные моменты

0. Prefix-key или управляющая комбинация клавиш. По умолчанию это Ctrl+B. Нажатие этой комбинации уведомляет tmux о том что дальше пойдет ввод управляющей клавиши, означающей команду. Короче это способ послать команду в tmux.

Команды и конфигурация.  Следует различать два вида команд:

  • Команды отдаваемые внутри tmux сессии — это Prefix комбинация + клавиша —
  • Внешние команды — набираются вместе с командой Tmux —
  • Конфиг — просто набор внешних команд, записанных в файл  и выполняемых при старте tmux.

Кстати по дефолту конфига нет. Сгенерировать можно так: tmux show -g | cat > ~/.tmux.conf

1. Сессии

Основная единица измерения. При простом запуске вы запускаете свою первую сессию с именем 0. Можно и сразу ее поименовать:

  • tmux new-session -s’my rails project’

или переименовать:

  • tmux rename-session -t 1 «my session»

Для сессии же вы задаете глобальные настройки. Управлять сессией просто:

  • tmux new — создать новую сессию с окном
  • prefix + d — отсоединиться
  • tmux list-session — список сессий с числом окон
  • tmux attach -t 0 или 1 — присоединиться к той или иной сессии вместо номера можно начать вводить имя, если сессия поименованная

можно и переключаться на ходу:

  • pefix + s — список сессий с переключениями

2. Окно

Каждая сессия делится на окна и запускается уже с одним окном по умолчанию.

  • prefix + c — создать еще окно

создаются они с номером и их так же можно именовать:

  • prefix + ,

В строке статус бара у вас показан список всех окон в рамках сессии. активное отмечено * :

  • prefix + w — список окон с переключением
  • prefix + 0-9 переключиться на окно
  • prefix + n/p — следующее или предыдущее окно

3. Панели

Каждое окно может быть разделено на несколько панелей. По сути одно окно это уже и есть одна панель. Панель- это экземпляр шела или любой другой запущенной программы ( по умолчанию просто запускается шел):

  • prefix + q  (Показать номера панелей; перейти в область по нажатии клавиши, соответствующей номеру)
  • prefix + %  (Разделить окно вертикально)
  • prefix + «  “split-window” (Разделить окно горизонтально)

перемещаться по панелям 

  • prefix + стрелка

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

# Create pane horizontally, $HOME directory, 50% width of current pane

tmux split-window -h -c $HOME -p 50 vim

#Сreate new pane, split vertically with 75% height

tmux split-window -p 75

Скроллинг внутри панели

  • prefix + PgUp — вход в «режим скролинга», после чего:
  • PgUp, PgDown — скроллинг;

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

Список домашнего чтения

VIM

Что это

Если кратко — это командно-ориентированный консольный текстовый редактор, с довольно высоким порогом вхождения, который позволяет Вам редактировать произвольный текст или код не отрывая руки от клавиатуры. И нет, сеть не в огромном сочетании «горячих клавиш» ( хотя тут вы их можете запрограммировать сколько душе угодно), это именно команды и их сокращения, что повышает производительность при работе с текстом. В чем же отличие от горячих клавишь, спросите Вы? Нельзя нажать сразу несколько горячих клавиш, а вот отдать сразу несколько команд — можно. Плюс возможности этого редактора расширяются огромным числом плагинов. 

Звучит не очень убедительно но тут лучше просто попробовать, чем слушать и читать.

Откуда взялось

Пришел к нам как дальнейшая эволюция редактора Vi, а тот вообще из эпохи динозавров)

Зачем это

Как я уже говорил, он позволяет очень удобно и быстро (естественно при наличии некоего навыка) работать с любым текстовым файлом- просто текст, код, конфиг, верстка и т.д. Помимо этого, этот текстовый редактор входит в базовый состав утилит почти любого Linux дистрибутива, от Ubuntu Server до OpenWRT. Поэтому умея работать с ним ( любить при этом не обязательно) — вы точно будете во всеоружии!

Теперь подробней

Философия vim —   для начало нужно уяснить себе, что этот редактор работает в нескольких режимах последовательно. Для начала это режим редактирования и режим команд. В первом — вы пишете текст, во втором Вы работаете с файлом. В том числе и с текстом. 

Чтобы не уподобляться 100500 мануалам в духе «как выйти из Vim перед этим сделать то и то». Вы можете пойти и почитать на эту тему, благо есть тонна отличных учебных пособий, например:

  • OpenVim — интерактивный онлайн учебник.
  • Vim Adventures — приключенческая игрушка.

Плюс на Youtube есть куча всевозможных обучающих видео. Но на мой взгляд (чисто ИМХО), есть два более простых и удобных способа:

  • Vimtutor — Не интерактивный а наоборот, очень простой учебник, который представляет собой приложение к vim. Если вы пользователь linux/unix, просто введите эту команду и выполняйте то что там написано.
  • Найдите какой нибудь сборник основных команды в виде картинки (например такой) и начните использовать!

Для начала, давайте соберем основные комбинации клавиш и команды, чтобы быть «в теме». Я буду совмещать отдельные команды и их наиболее часто (опять же, ИМХО) встречающиеся комбинации.

Управление редактором:

  • i / insert — вход в режим редактирования
  • Esc — выход в режим команд

Удаление:

  • х в режиме команд —  удалит букву под курсором 
  • d — удаление:
    • dw, de  — удалит следующее за курсором слово. «w» — включая пробел и «e» — не включая его 
    • d$ — удалить все от курсора и до конца строки
    • d^ — от начала строки идо курсора
    • d*число* или *число*d — сколько раз повторить команду удаления, например d4w — удалить 4 слова от курсора и далее вправо.
    • dd в начале строки — удалить строку, 2dd — удалить две строки

Замена:

  • r*символ которым заменяем*— набираем, установив курсор над заменяемым символом.

Вырезать/вставить:

  • Для строки:
    1. dd  — в начале вырезаемой строки
    2. p  — в конце строки, после которой надо вставить
  • Для слова:
    1. dw / d$ — в начале слова/ подстроки которые вырезаем.
    2. p — после слова/подстроки куда вставить

Отмена изменений:

  • u — отменить последнюю операцию
  • Ctrl+R — вернуть последнюю операцию
  • U-отменить все изменения в строке

Движение:

  • h, j, k, l —  Перемещение вверх/вниз, вправо/влево. Их можно заменить стрелками, но Vim-гуру рекомендуют привыкнуть именно к этим клавишам перемещения, чтобы не убирать пальцы с основной клавиатурной панели.

Поиск:

  • /*регулярное выражение* — поиск выражения/строки.
  • %*скобка* — поиск парной скобки относительно введенной

Все эти команды набираются в командном режиме (как неожиданно, не правда ли!), просто по ходу пьесы. Однако есть еще один тип команд — внешние. Имеется ввиду по отношению к редактируемому тексту. Эти команды начинаются с символа»:» и вводятся либо целиком, либо сокращенно:

  • :edit / :e *filename*— открыть файл 
  • :quit / :q — выйти
  • :write / :w *filename* — сохранить. Если не указать имя, сохранит файл под текущим именем. Если имени нет, попросит ввести.

Так же мы можем выполнить команды из операционной системы, используя конструкцию :!*commandname*

Расширение функционала

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

По умолчанию, для Vim не создается конфигурационный файл. Но мы можем сделать его — создайте в корневом каталоге файл «.vimrc» и заносите туда настройки. Ряд настроек можно почерпнуть из документации. Вот пример очень простого файла настройки:

set number
set showcmd
set incsearch
set hlsearch

set expandtab
set tabstop=4
set softtabstop=4
syntax on

Этот конфиг:

  1. включает нумерацию строк в редакторе
  2. Включается история команд
  3. Включает инкрементальный поиск (поиск по мере ввода строки)
  4. Включить подсветку поиска
  5. Заменить табуляцию на отступы пробелами
  6. Отступ табуляцией теперь будет = 4 пробелам
  7. Включается подсветка синтаксиса

Плагины

Для начала, нам необходим менеджер плагинов. Среди прочих равных я для себя выбрал vim-plug. там же, на странице есть и инструкция по установке. Ставится одной командой в консоль + добавляется секция в конфигурационный файл, позволяющая автоматически устанавливать и подключать плагины:

Из приглянувшихся мне (как не разработчику) плагинов, я бы выделил следующие:

  • nerdtree — позволяет открывать дерево каталогов / дерево файлов и папок вашего текущего проекта прямо в окне vim
  • тема оформления gruvbox. Кстати, еще больше тем и конфигов по оформлению можно найти вот тут.
  • YouCompleteMe — автодополнение для популярных языков программирования (мне как минимум интересен Python)
  • Auto Pairs — автоматическая добавка и удаление таких парных элементов как различные скобки
  • CtrlP — быстрый поиск по вводимой строке.

Ищите, пробуйте подбирайте!)

Домашнее чтение