За что так любят Vim?
Публичный постНа Хабре, и других профильных ресурсах, практически любой пост, затрагивающий тему редакторов кода, IDE и всего такого, содержит комментарии любителей Vim.
В этих комментариях люди пишут что Vim это лучший редактор, даже для фронтенд-разработки. Люди рассказывают, как не имея возможности юзать родной Vim, ставят Vim-плагины на VS Code, Sublime, браузер, холодильник, кошку и жену.
Когда мысль "я чего-то тут не понимаю" возникла у меня впервые, я посмотрел несколько видосов на Ютубе, где Vim превращают в среду разработки на %language_name%, а так же прошел Vim tutor (не помню, часть или весь, но суть я понял).
Я понял что в Vim есть некоторые удобные хоткеи, к которым деды привыкли, потому что Vim в каждом линухе из коробки, а также из него можно сделать что угодно (но нужно быть достаточно упоротым, обкуренным мануалами и т.д, в общем на мой взгляд - не удобно).
И вот сейчас у меня снова возник вопрос "может я чего-то тут не понимаю?".
Наверняка здесь есть любители Vim, кто может подсказать, за что конкретно они его любят, прям на пальцах, за какие механики, какие хоткеи и т.д. Чего совсем нет в других редакторах/средах (или есть, но только с Vim-плагином)?
Использую вим уже больше семи лет.
Мне сложно сказать, что vim как редактор - это лучшее что есть на рынке. VimL - боль, плагины примитивные (особенно в сравнении с emacs).
Для меня плюс вима - новые абстракции в работе с текстом, которые редактор представляет (из коробки + плагины). Т.е. редактируя текст, я могу оперировать словами, строками, внутренностями блоков, абзацами или еще чем-то. Этого не хватает в других местах, где я пишу текст или код, думаю поэтому так популярно делать vim mode для других редакторов/програм/браузеров.
Самое интересное, что работа с вимом напоминает работу с коммандами вида
команда данные
, только в случае вима все наобороткоманда текстовая_абстракция
. Яркий пример -dw
, гдеd
- удалить, аw
- слово.Шесть лет назад написал статью об истории редактора, где как раз об этом подробно.
А как же emacs? :)
TL;DR: Vim для правки конфигов.
Для меня ценность Vim в том, что он есть везде. Зная базовые приемы работы с ним, на любом сервере по SSH можно отредактировать что угодно — конфиг, скрипт, дамп БД. На локальном компьютере тоже использую его для быстрых правок, если уже открыт терминал или если хочу поправить/создать конфиг.
Писать код в нем не пробовал. Чтобы полноценно работать с Vim, нужно перестроить свой мозг. Страшно, затратно, последствия. После этого, жизнь уже никогда не будет прежней и я скорее всего пойду ставить Vim-плагин на микроволновку.
Когда-то освоил вим в самом базовом понимании (вимтутор + что-то ещё по мелочи), но не проникся.
Самое неудачная на мой взгляд идея - наличие нескольких режимов (основной и инпут). Не понимаю, почему это хоть кому-то нравится.
Почему-то в "вюзивуг" редакторах нет такой проблемы, может быть потому, что там хоткеи для всех действий с кусками текста повешены на shift/ctrl/alt/cmd и не надо придумывать два режима. Постоянно тянуться к мышке - одна крайность, к эскейпу - другая (и пространственно, и метафизически).
Обычно, если спрашивал адепта вима, какое крутое преимущество вим даёт - мне демонстрировали что-то типа "а вот смотри какую хитровывернутую операцию тут можно сделать, а в других редакторах нельзя". Поскольку я такие вещи делаю примерно никогда - не впечатляет.
Иногда размышлял по поводу того, что же именно в виме плохо. Однажды мне попалась на глаза книжка про UX. Называется она "Психбольница в руках пациентов". Если грубо, то вим - редактор не для людей, потому что те, кто его делал, не думали про людей вообще. Это "хакерский" инструмент, примерно как язык шелла.
Например - почему переход в конец строки - циркумфлекс, а начало строки - доллар? Потому что так сделано в регекспах. Это "юзабилити" для хакеров, из тех времён, когда программистов и компьютеров было мало, все наизусть знали язык регекспов и поэтому у тебя в редакторе есть такое мнемоническое правило. С тех пор сменился не один президент и нет никакой потребности делать именно так. К счастью, в современном мире существует такое понятие, как UX, а если этой задачей занимаются программисты, то продуктом никто не пользуется - туда ему и дорога.
Так что для меня вим - поправить строчку в файле на удалённом сервере и что-то такое, раз уж этот редактор стандарт де-факто в *nix операционных системах. Стоит выучить на базовом уровне, как часть общей компьютерной грамотности.
А на повседневной основе пользоваться для себя не вижу никакого смысла, потому что есть же нормальный редактор, и имя ему - VSCode :)
Я люблю Vim из-за хоткеев – правой рукой удобно навигироватья(hjkl). Да и команды удобно нажимать, если привык к слепой печати и модальная система отличная. Но emacs круче как редактор, надо только использовать некоторые кейбиндинги от вима. Да и org mode многим очень нравится как средство ведения заметок и todo листов. Вот классная сборка для начала: https://github.com/hlissner/doom-emacs. А вообще это просто набор привычек – люди обрастают конфигами, скриптами и настройками за жизнь и им очень удобно. Они не хотят куда-то слазить и что-то менять. Да и сейчас, когда есть реализация language server protocol для многих языков и можно настроить многое в любом редакторе и нет большого смысла в смене редакторов.
Я очень много пишу разного текста - конфиги, код на куче разных языков (си / ардуино / джс (основная работа) / питон / дажеджаваиногда) и всегда было приятно, если для этого не нужно запускать отдельные приложения (а ещё консоль нужна всегда, в ней гит, докер, логи, сервера, вообще всё). Поэтому мой путь был таков:
Короче, советую пробовать и экспериментировать) Я могу тоже перейти в емакс, vscode, или в xi. Но мне нравится интегрировать разные приложения и подходы вместе, составляя приятный для себя пайплайн превращения идей в проекты.
Для меня самая главная фича vim/emacs это консистентность управления во всем редакторе. Одними и теми же командами (перемещение, поиск, ввод текста итд) я управляю в основном окне, в панели с файлами, в терминале, в меню - везде. А в idea/vscode в меню одно управление, в панели с файлами другое, где текст набираешь - третье. Vim-плигин только в emacs нормальный, в остальных редакторах он чаще всего только на ввод текста действует, а в дургих местах редактора уже нет.
Есть вещи, которые тебя впирают, а есть те, которые не очень впирают. Вот смотрю я стрим Антона Давыдова (комментатора выше), и понимаю, что это искусство - так управлять своим кодом с помощью пальцев и терминала.
Когда что-то нравится, ты этим начинаешь интересоваться. Пусть бы мне обещали скорость 10x, но это не доставляло бы удовольствие - это дело бессмысленное.
Vim - это не просто другой язык для управления кодом. Это не перейти с "русского", на условный "английский" в мире IDE. Это научиться общаться вообще без слов. Конечно, это небольшая гиперболизация, но что-то в этом есть.
Вот, кстати, канал парня, который сделал увлекательный курс, который научит летать. Больше для новичков. https://www.youtube.com/channel/UC8ENHE5xdFSwx71u3fDH5Xw
Я люблю вим:
Короче, вим для меня гораздо удобнее всяких нано, мседит и прочих редакторов. Когда речь идёт именно о редактировании текстов, виму нет равных. С помощью вима можно переноситься по тексту так быстро, насколько быстра твоя соображалка :) Емакс не пробовала и не хочу из-за малой распространённости. Вим — это такой универсальный язык общения с любой рабочей станцией или сервером. С ним не пропадёшь :)
Просто писать в виме — это удовольствие. Это складывается из множества факторов, все уже были перечислены в комментариях. Для меня вим это:
d
- delete,a
- append, аD
- delete until the end of the line, то я знаю, чтоA
- append at the end of the line. И так с каждой командой.d
- delete мы открываем для себя целый мир:di(
- удалить внутри скобок,dt.
- удалить до символа '.',d}
- удалить до конца абзаца и так далее. Если нужно не удалить, а, например, скопировать, поменяется лишь одна буква. На аккорды с ctrl, alt и shift такое количество модификаций не распихаешь.ctrl+backspace
, а vscode - нет.И это только вершина, есть огромное количество вещей, которые в виме делать просто и весело. Многие из них кажутся избыточными на первый взгляд (например ctrl+a - инкремент числа под курсором), но потом начинаешь удивляться, как раньше жил.
Если постараться выделить суть vim, самый сок, то вот:
Чаще код мы читаем, а не пишем. Если и пишем, то львиная доля не с нуля а в духе «скопировать строку выше, и изменить название переменной». Так почему бы для навигации использовать не только стрелочки и клавиши home/end а пол клавиатуры.
Ну ещё принцип композиции команд важная идея, но это на пальцах не объяснить уже.
Vim добавляет в процесс монотонного набора текста удовольствие. Можно написать много слов, почему это так приятно, но ты не поймешь, пока сам не проведешь с ним пару недель. Просто начни писать код в нем, или накати плагин с ним в свою любимую IDE, и начни использовать его для работы. Первые несколько дней-недель будет больно, но когда преживешь их, поймешь, за что мы его так любим. Алсо, реккоммендую https://neovim.io/. Это по сути клон обычного vim, только с отрефактореными исходниками, и улучшенной производительностью.
Ну vim - это такая вещь, которая ускоряет работу x2 раз.
С ним в основном больно отвыкнуть от идеи "мы перемещаем курсор и меняем текст" и привыкнуть к "мы расфигачиваем сразу целые ЛОГИЧЕСКИЕ блоки текста".
Сам в Jetbrains IDE/Sublime Text добавляю vim-плагин и херачу счастливо.
Сесть что ли написать пост "Vim в 2023 или 20 лет любви".
Опишу себя:
Я - задрот живущий в терминале, сейчас конечно я программист на маке, но душой я остался linux админом с eeePC 901, когда ты ночами пережимаешь ядро и остальное, чтобы наэкономить памяти и батарейка работала дольше.
Так вот у вима есть два плюса:
Второй пункт очень важен, так как у меня были ситуации когда я работал в проектах с 6-ю языками программирования одновременно. Со словами "Хуже уже не будет" я добавил 7-й, да. Сейчас уже дело привычки и нежелание привыкать к новым хоткеям, да.
С запуском есть проблемы, если превратить свой конфиг в фарш (что очень легко, особенно когда у тебя больше 30 плагинов. У меня было 56). Так что тут работает только know your tools - я иногда рефракторил свой конфиг, переходил на neovim, сейчас вообще начал писать конфиг заново так как нашелся прекрасный проект по управлению конфигом.
Да и neovim уже выглядит получше, чем в старые времена.
VIM, даже без плагинов, очень хорош по двум связанным причинам:
Только из-за этих двух пунктов в совокупности я и не могу уже лет двадцать из него выйти.
По п.1 пользователей многих других редакторов не удивить, а вот п.2 практически уникальный, потому что он фактически добавляет конструкции повторения, выполнения по условию, функции. Поэтому когда я редактирую текст, то фактически на ходу придумываю маленькие программы преобразования текста, которые тут же исполняю.
Поэтому в других редакторах ощущения связанности рук, примерно как если бы пришлось программировать на языке, где отсутствуют массивы и циклы.
Модальность (возможность переключаться между режимами печатания и перемещения по тексту, грубо говоря), очень широкие возможности настройки (удобные хоткеи, а неудобные можно переопределить), большое комьюнити и куча плагинов.
Один из его вариантов, vi, есть по умолчанию в любой системе. Зашел по ssh - отредактировал файл. Удобно.
Возможно мой комментарий покажется несколько странным, однако я начал использовать вим после того как понял, что после полного рабочего дня начинали онемать пальцы на правой руке, которой пользовался мышкой(туннельный синдром). Возможно я себя обманываю, но все же мне кажется что после того, как начал использовать вим и не дергать постоянно руку к мышке - рука перестала онемать от слова совсем. Сам вим я не нахожу удобным для того чтоб писать код вне какой-либо IDE или без миллиона плагонов, но как люди уже высказывались, пару недель и уже перестаешь задумываться про все эти странные хоткеи и все будет казаться +- понятными и удобными
Для меня лично vi(m) - это во-первых привычный инструмент.
Во-вторых - среда разработки для языков, для которых нет нормальной IDE, вроде Си или Perl. Для, для Си всё ещё нет нормального IDE, только для C++ есть.
В третьих, это возможность быстро in-place поработать с текстом/кодом в плане массовых изменений, перемещений, etc. Это очень удобно, когда привыкаешь. Даже банальное 10i- чтоб нарисовать 10 черточек перед --------- RSA KEY - несравнимое ни с чем удовольствие.
Про оперирование словами, блоками, абзацами уже писали. Отдельная любовь - изменение чего угодно внутри парных символов, пользуюсь буквально всегда.
А ещё vi(m) - это эмерженси инструмент, позволяющий буквально зайти на сервер с телефона и поправить там упавший код с него-же, даже без переносной клавиатуры.
А ещё он пищит и всё портит :)
Ну и ладно, ещё есть некий налёт элитарности, когда джуны смотрят на мою работу с текстом во время докладов ;)
Но только чуть-чуть.
Многие пишут про навигацию на hjkl, но это не уникальная для vim фича, её можно сделать даже в раскладке клавиатуры, либо взять клаву с qmk/zmk прошивкой и сконфигурировать аналогичный vim слой навигации, и будут удобные стрелки везде.
И вдогонку, hjkl - не самый экономный вариант расположения стрелочек, т.к. указательный палец надо перемещать между hj, есть разные варианты, я на home row все стрелки приземлил зеркально, слева на asdf, справа на jkl;
Про удобство работы с текстом и универсальность тут уже многие написали, поэтому дополню кое-чем другим.
Я как и многие пытался переехать на вим в качестве основного редактора кода.
Ставил готовые сборки типа LunarVim, AstroVim и т.д. Они меня все отпугнули своей монстроузностью. Вим с сотней плагинов теряет свою легкость и интуитивность. Сложно им пользоваться когда у тебя количество хоткеев x10. Некоторые подобные сборки еще лагали)
В итоге я написал собственные конфиги для Vim и Neovim добавив лишь нужные плагины. Vim для базового редактирования текстов, Neovim для базового редактирования кода.
Но
В качестве основного редактора кода я стал использовать VS Code с Vim-плагином. В этом варианте я получил нормальный UI (поиск и замена, просмотр диффов, человеческие табы) и удобство редактирования кода.
Привычка к хоткеям и insert\command\visual режимам, мне не даёт перейти на другой редактор. Я пытался и vscode и pycharm перейти, пробывал с vim mode, но не то. В обычных редакторах vim mode позволяет только перемещаться по тексту в активном окне, а вот уже управлять привычным(для vim) образом окнами(буферами) нет.
С точки зрения работы с текстом, хз, я использую небольшое количество команд, перемещение\замена\поиск\git. Что то продвинутое, нет, так как забываю длинные комбо сочетания.
С появлением LSP, vim стал очень продвинутым редактором, факстически можно поставить расширение coc, разобраться как его настроить и всё, больше особо плагины для vim не нужны. Ну может ещё, что то для работы с файловой системой(NerdTree) и буферами(BufferExplorer).