За что так любят 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? :)
Я задался примерно тем же вопросом примерно зимой и накатил как ни странно emacs. Потому что emacs можно сделать как vim, а вот vim сделать как emacs уже сложнее. Но это лирика.
Так вот после небольшого привыкания становится классно и удобно. Удобно бегать по документу, удобно бегать по файлам, удобно не тянуться к мышке каждые 5 секунд. Пару раз я рейджквитил и откатывался на VS Code только что бы понять что мне стало резко не хватать normal mode и всяких возможностей быстро прыгать по документу.
Еще я бы добавил кастомизируемость. Это было моей второй причиной свалить с VS Code - его можно настроить лишь до определенного момента. Например, меня страшно бесят некоторые выкрутасы LSP серверов для TS и Elixir а поменять их в вс коде довольно муторно.
Я не очень хочу продавать vim/emacs, это во многом вопрос предпочтений, но мне кажется если тебе хочется понять как и почему люди это делают - стоит попробовать поставить какую нибудь сборку, попользоваться, потом всегда можно откатиться.
Я люблю Vim из-за хоткеев – правой рукой удобно навигироватья(hjkl). Да и команды удобно нажимать, если привык к слепой печати и модальная система отличная. Но emacs круче как редактор, надо только использовать некоторые кейбиндинги от вима. Да и org mode многим очень нравится как средство ведения заметок и todo листов. Вот классная сборка для начала: https://github.com/hlissner/doom-emacs. А вообще это просто набор привычек – люди обрастают конфигами, скриптами и настройками за жизнь и им очень удобно. Они не хотят куда-то слазить и что-то менять. Да и сейчас, когда есть реализация language server protocol для многих языков и можно настроить многое в любом редакторе и нет большого смысла в смене редакторов.
TL;DR: Vim для правки конфигов.
Для меня ценность Vim в том, что он есть везде. Зная базовые приемы работы с ним, на любом сервере по SSH можно отредактировать что угодно — конфиг, скрипт, дамп БД. На локальном компьютере тоже использую его для быстрых правок, если уже открыт терминал или если хочу поправить/создать конфиг.
Писать код в нем не пробовал. Чтобы полноценно работать с Vim, нужно перестроить свой мозг. Страшно, затратно, последствия. После этого, жизнь уже никогда не будет прежней и я скорее всего пойду ставить Vim-плагин на микроволновку.
Когда-то освоил вим в самом базовом понимании (вимтутор + что-то ещё по мелочи), но не проникся.
Самое неудачная на мой взгляд идея - наличие нескольких режимов (основной и инпут). Не понимаю, почему это хоть кому-то нравится.
Почему-то в "вюзивуг" редакторах нет такой проблемы, может быть потому, что там хоткеи для всех действий с кусками текста повешены на shift/ctrl/alt/cmd и не надо придумывать два режима. Постоянно тянуться к мышке - одна крайность, к эскейпу - другая (и пространственно, и метафизически).
Обычно, если спрашивал адепта вима, какое крутое преимущество вим даёт - мне демонстрировали что-то типа "а вот смотри какую хитровывернутую операцию тут можно сделать, а в других редакторах нельзя". Поскольку я такие вещи делаю примерно никогда - не впечатляет.
Иногда размышлял по поводу того, что же именно в виме плохо. Однажды мне попалась на глаза книжка про UX. Называется она "Психбольница в руках пациентов". Если грубо, то вим - редактор не для людей, потому что те, кто его делал, не думали про людей вообще. Это "хакерский" инструмент, примерно как язык шелла.
Например - почему переход в конец строки - циркумфлекс, а начало строки - доллар? Потому что так сделано в регекспах. Это "юзабилити" для хакеров, из тех времён, когда программистов и компьютеров было мало, все наизусть знали язык регекспов и поэтому у тебя в редакторе есть такое мнемоническое правило. С тех пор сменился не один президент и нет никакой потребности делать именно так. К счастью, в современном мире существует такое понятие, как UX, а если этой задачей занимаются программисты, то продуктом никто не пользуется - туда ему и дорога.
Так что для меня вим - поправить строчку в файле на удалённом сервере и что-то такое, раз уж этот редактор стандарт де-факто в *nix операционных системах. Стоит выучить на базовом уровне, как часть общей компьютерной грамотности.
А на повседневной основе пользоваться для себя не вижу никакого смысла, потому что есть же нормальный редактор, и имя ему - VSCode :)
Я очень много пишу разного текста - конфиги, код на куче разных языков (си / ардуино / джс (основная работа) / питон / дажеджаваиногда) и всегда было приятно, если для этого не нужно запускать отдельные приложения (а ещё консоль нужна всегда, в ней гит, докер, логи, сервера, вообще всё). Поэтому мой путь был таков:
Короче, советую пробовать и экспериментировать) Я могу тоже перейти в емакс, vscode, или в xi. Но мне нравится интегрировать разные приложения и подходы вместе, составляя приятный для себя пайплайн превращения идей в проекты.
Есть вещи, которые тебя впирают, а есть те, которые не очень впирают. Вот смотрю я стрим Антона Давыдова (комментатора выше), и понимаю, что это искусство - так управлять своим кодом с помощью пальцев и терминала.
Когда что-то нравится, ты этим начинаешь интересоваться. Пусть бы мне обещали скорость 10x, но это не доставляло бы удовольствие - это дело бессмысленное.
Vim - это не просто другой язык для управления кодом. Это не перейти с "русского", на условный "английский" в мире IDE. Это научиться общаться вообще без слов. Конечно, это небольшая гиперболизация, но что-то в этом есть.
Вот, кстати, канал парня, который сделал увлекательный курс, который научит летать. Больше для новичков. https://www.youtube.com/channel/UC8ENHE5xdFSwx71u3fDH5Xw
Если постараться выделить суть vim, самый сок, то вот:
Чаще код мы читаем, а не пишем. Если и пишем, то львиная доля не с нуля а в духе «скопировать строку выше, и изменить название переменной». Так почему бы для навигации использовать не только стрелочки и клавиши home/end а пол клавиатуры.
Ну ещё принцип композиции команд важная идея, но это на пальцах не объяснить уже.
Я люблю вим:
Короче, вим для меня гораздо удобнее всяких нано, мседит и прочих редакторов. Когда речь идёт именно о редактировании текстов, виму нет равных. С помощью вима можно переноситься по тексту так быстро, насколько быстра твоя соображалка :) Емакс не пробовала и не хочу из-за малой распространённости. Вим — это такой универсальный язык общения с любой рабочей станцией или сервером. С ним не пропадёшь :)
Просто писать в виме — это удовольствие. Это складывается из множества факторов, все уже были перечислены в комментариях. Для меня вим это:
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/emacs это консистентность управления во всем редакторе. Одними и теми же командами (перемещение, поиск, ввод текста итд) я управляю в основном окне, в панели с файлами, в терминале, в меню - везде. А в idea/vscode в меню одно управление, в панели с файлами другое, где текст набираешь - третье. Vim-плигин только в emacs нормальный, в остальных редакторах он чаще всего только на ввод текста действует, а в дургих местах редактора уже нет.
Vim добавляет в процесс монотонного набора текста удовольствие. Можно написать много слов, почему это так приятно, но ты не поймешь, пока сам не проведешь с ним пару недель. Просто начни писать код в нем, или накати плагин с ним в свою любимую IDE, и начни использовать его для работы. Первые несколько дней-недель будет больно, но когда преживешь их, поймешь, за что мы его так любим. Алсо, реккоммендую https://neovim.io/. Это по сути клон обычного vim, только с отрефактореными исходниками, и улучшенной производительностью.
Ну vim - это такая вещь, которая ускоряет работу x2 раз.
С ним в основном больно отвыкнуть от идеи "мы перемещаем курсор и меняем текст" и привыкнуть к "мы расфигачиваем сразу целые ЛОГИЧЕСКИЕ блоки текста".
Сам в Jetbrains IDE/Sublime Text добавляю vim-плагин и херачу счастливо.
VIM, даже без плагинов, очень хорош по двум связанным причинам:
Только из-за этих двух пунктов в совокупности я и не могу уже лет двадцать из него выйти.
По п.1 пользователей многих других редакторов не удивить, а вот п.2 практически уникальный, потому что он фактически добавляет конструкции повторения, выполнения по условию, функции. Поэтому когда я редактирую текст, то фактически на ходу придумываю маленькие программы преобразования текста, которые тут же исполняю.
Поэтому в других редакторах ощущения связанности рук, примерно как если бы пришлось программировать на языке, где отсутствуют массивы и циклы.
Модальность (возможность переключаться между режимами печатания и перемещения по тексту, грубо говоря), очень широкие возможности настройки (удобные хоткеи, а неудобные можно переопределить), большое комьюнити и куча плагинов.
Один из его вариантов, vi, есть по умолчанию в любой системе. Зашел по ssh - отредактировал файл. Удобно.
Возможно мой комментарий покажется несколько странным, однако я начал использовать вим после того как понял, что после полного рабочего дня начинали онемать пальцы на правой руке, которой пользовался мышкой(туннельный синдром). Возможно я себя обманываю, но все же мне кажется что после того, как начал использовать вим и не дергать постоянно руку к мышке - рука перестала онемать от слова совсем. Сам вим я не нахожу удобным для того чтоб писать код вне какой-либо IDE или без миллиона плагонов, но как люди уже высказывались, пару недель и уже перестаешь задумываться про все эти странные хоткеи и все будет казаться +- понятными и удобными