Найти в Дзене
Одиночная палата

/GNUser/Downshift

Оглавление

Пару недель назад наткнулся на видео по украшательству терминала от маковода. Не то что бы я не видел раньше что-то подобное, но этот ролик затянул и оказался весьма полезным и интересным. Изложено всё очень подробно и наглядно ровно с таким количеством комментариев, с каким не скучно, но и не тик-ток на 4 минуты. Ну и потом пошло поехало. Ютуб с места в карьер порекомендовал еще один похожий видосик, затем другой, третий… пока всё-таки я не решил всё это опробовать на практике. Уж очень красочно обо всём рассказывают. В том числе и отечественные видеоблогеры.

Что понравилось именно. Во-первых, что рассказывают про это всё разрабы разрабы, не сисадмины, не какие-то розовые хипстеры, и не адские фаны фряхи и арча. И что хоть во многих материалах в качестве платформы фигурирует мак c iTerm2 или даже винда с powershell, речь об опенсорсных проектах и программах, которые изначально всё-таки разрабатывались и существуют для и в пингвиней экосистеме.

Да и вообще эмулятор терминала и даже оболочка тут играет далеко не главную роль. Главным объектом всех этих, скажем так, художеств является тот самый легендарный Vim, ну и его более модное продолжение NeoVim. А что еще более важно, то что из него делают не просто хайповую вещицу, а вполне себе такой взрослый и эффективный инструмент разработчика - альтернативу если не сразу IDE, то уж для большинства редакторов кода уж точно.

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

Но и это еще не всё. Авторы видео настаивают на том, что скорость увеличивается не только при работе с тяжелыми файлами, но и в целом по прямому и качественному набору текста. К последнему, конечно же, у меня возникли вопросы. Ну, просто потому что сказать, что вим сложный в его полнофункциональном смысле, это ничего не сказать. Он ну очень своеобразный и очень много времени требует что бы просто запомнить что там у него и где (ну, где понятно, а вот как) и начать сносно в нем что-то писать в принципе. А быстро, со всеми этими приблудами, на русском? Терзали меня смутные сомнения. И не зря.

И теперь немного гадостей.

Русский язык

Если вот только программировать, и только на латыни. Если ваши строки в вашем тексте не длиннее условных 80 символов. То, да. О прелестях вим-а в таком виде я в общем был знаком и ранее. Быстро допилить какой-то дефолтный конфиг, может даже отредактировать разметку или пару запросов к базе - отлично. Подсветка в виме работает из коробки и не требует вообще никаких украшательств и специальных плагинов. В виме работает спеллчекер, поиск по файлам, регулярки и всё базовое, нужное для быстрого и эпизодического редактирования.

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

Проблема решается. Довольно просто… но с одной оговоркой. Кстати, о решении в иностранных видосах, конечно же, вы не услышите совсем. Есть вариант с дублированием всех хоткеев на русской раскладке, но это не выход, потому что проблемы тогда перемещаются в командную строку. Абсолютно невозможно переключаться каждый раз, когда нужно что-то ввести во встроенную консоль. (Наверное можно сделать так, что туда вообще не надо будет лазить, кроме каких-то сложных одноразовых вещей, но всё-равно выглядит это как один большой костыль).

Более православное решение это родная переключалка раскладки вима (которая оказывается сидит здесь еще с предыдущего vi). Выглядит в конфигурации .vimrc она следующим образом:

set keymap=russian-jcukenwin
set iminsert=0 " Чтобы при старте ввод был на английском, а не русском (start > i)
set imsearch=0 " Чтобы при старте поиск был на английском, а не русском (start > /)

Переключается раскладка по дефолту клавишами <C-^> (именно так обозначаются горячие клавиши в виме - это CTRL+^). Собственно не очень важно каким именно сочетанием это делать, важнее сказать что, к тому что бы не пользоваться при этом системным переключателем нужно привыкать очень долго и серьезно. Вот я сейчас сижу очень мучаюсь, то и дело переключая контекст с вима на браузер и обратно. Думается, еще сложнее это делать если печатать текст двумя разными способами в виме и еще каком-то втором более привычном редакторе.

Поэтому мой совет - по началу пытайтесь редактировать в виме всё что можно. Даже если надо запостить комент в любимом хабре наберите текст сперва в виме, а потом ggVG "+y и вставить в формочку.

Перенос строк

HTML страницы и просто вот такие тексты в формате markdown, и даже длинные комментарии в коде без мягкого переноса строк редактировать просто нереально. Автоматический хардбрейкинг… может наверное выручить, но ровно до тех пор, пока не придется зачем-то редактировать этот же текст в более обывательском редакторе. Всё в той же форме в браузере например. А вот мягкий перенос в виме это еще одна штука, к которой надо откровенно привыкать. Вот прям до физической боли.

Бродить в нормальном режиме между строчками вим научить можно.

set wrap
set linebreak
nnoremap <expr> j v:count ? 'j' : 'gj'
nnoremap <expr> k v:count ? 'k' : 'gk'
nnoremap <expr> <Down> v:count ? 'j' : 'gj'
nnoremap <expr> <Up> v:count ? 'k' : 'gk'

Но надо понимать, вся эта красота перестает работать в режиме ввода. Либо надо переключаться, либо бегать взад назад по словам (ну или этими замысловатыми моушенами, но тут непонятно как считать слова или символы в бок). Я пока привыкнуть не могу ни к какому способу. Чувствую, абзацы у меня через какое-то время сократятся до предложений. А предложения до 80 символов. Ну да ладно. Поживем увидим.

Грамматика

Одна из самых соблазнительных фишек вима в наличии плагинов подключения к т.н. LSP серверам, предоставляющим всё это программистское кунг-фу типа автодополнения, линтеров и форматировщиков. LSP сервера есть ко всем мыслим языкам программирования и их диалектам. Таким образом вим одним движением превращается в универсальный мегакомбаин для всего и вся. Умеют это и некоторые графические редакторы, но вот и вим тоже в них умеет и прямо практически самостоятельно. Чуть чуть докрутить.

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

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

Тимакс

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

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

Опять же, такое умеет и сам вим безо всяких тимаксов. А что бы иметь параллельно несколько терминалов достаточно запустить несколько терминалов(!), как бы это странно кому-то не показалось. Зачем возиться с еще с одной прокладкой я, честно говоря, не понял. Может у маководов какая-то своя с этим связанная проблема? Например, там же, много где расхваливаемый эмулятор терминала Alacritty, ничем не лучше кдешного konsole, который точно так же умеет перекрашиваться, становиться прозрачным и даже прятать терминалы во вкладки (чего, кстати, кажется, этот самый алакрити не умеет). Только дополнительно ломает и без того выгнутый в электродугу мозг. У маководов не работает konsole?

ZSH

Или точнее сказать Oh-my-zsh - занятная штука так же в основном украшательская и более программистская. В основе альтернативная оболочка и набор приблуд к ней. Очень понравилось играться с прилашением командной строки, с плагином к гиту и более гибкое автодополнение. Тем не менее к производительности труда всё-же имеет, наверное, опосредованное отношение, так как прямо никак не влияет. Особенно учитывая то, что я адепт великого и ужасного Far Manager. И печальная новость в том, что фарыч никак не интегрируется с вимом и его цветными товарищами.

Если назначить в менеджере альтенативным редактором вим, то у него напрочь пропадают уже так понравившиеся цвета, а в месте с ним и всякие подсветки и прочие вкусности. Что печально совсем. (Возможно найдется тот джедай, который когда-нибудь заставит фар пронимать цвета в консоли? Ну пожалуйста! А может появится тот кто перебиндит горячие клавиши фара в вим-подобные? А может это буду я?). Поэтому oh-my-zsh - выход.

Оверол

Ну и закончить хотелось бы на оптимистической нотке. Любого вида разрабам попробовать вим или неовим стоит. Просто как упражнение для мозга. Как еще одна настраиваемая игрушка. Как способ пописать программы на еще одном языке (для NeoVim это Lua). Не могу однозначно топить за повышение эффективности ввода программного кода, так как сам еще толком не пробовал. Но, подозреваю, что смысл в этом действительно есть. Одни только моушены чего стоят. А еще я, например, только сегодня узнал, что в виме можно выделять не построчно, а по вертикали. Причем выделенный ряд, если он состоят из цифр, то его можно мгновенно превратить как в эксельке в последовательность от единицы нажатием пары-тройки кнопок. Быстро.

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

Возвращаясь обратно к легковесности. Компьютеры нынче конечно мало замечают разницу между 4 гигами и 100 мегами потраченной оперативки, но знаете как-то на душе неспокойно. А завтра что - 16 будет мало? А как на счет, того что все нормальные инструменты постепенно превращаются в эдакие ролевые игры с покупками. Где каждый раз нужно прокачиваться и бесконечно за что-то платить. У каждой IDE опять же свои какие-то горячие клавиши, к которым снова и снова надо привыкать, хоть и не в таком количестве.

Знаете, что? А вот сломаю ка я себе голову и выучу систему одну и навсегда. Что бы вообще больше не менять. Зачем эти все тяжеловесы нужны? Что бы чуть удобнее разместить мне больше кнопок? Такой себе бонус. Подумалось мне.

Я вообще люблю по всякому оправдывать свои действия, даже самые дурацкие. Но этот случай как будто бы действительно стоящий. Тем более, что в итоге разработка обратно скатывается с тысячекнопочных RAD интерфейсов в консоли, в удаленные сервера, облака, докеры, пайплайны и девопсы. Дауншифтиг ли это? Наверное, всё-же нет. Это такой параллельный мир, возможно возрождающийся.

Ну и в конце надо обязательно упомянуть, что всё вышесказанное имеет смысл действительно для очень специфической категории граждан. Для разрабов, по большей части бекэндеров, для девопсов, для админов может быть. И чуть чуть, наверное, даже для дата саенистов и журналистов. Для тех, кому надо очень много и правильно печатать.

PS: Набрано в NeoVim в формате markdown (markdown-preview.nvim) под Green Day - American Idiot