За что так любят Vim?  Публичный пост

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

В этих комментариях люди пишут что Vim это лучший редактор, даже для фронтенд-разработки. Люди рассказывают, как не имея возможности юзать родной Vim, ставят Vim-плагины на VS Code, Sublime, браузер, холодильник, кошку и жену.

Когда мысль "я чего-то тут не понимаю" возникла у меня впервые, я посмотрел несколько видосов на Ютубе, где Vim превращают в среду разработки на %language_name%, а так же прошел Vim tutor (не помню, часть или весь, но суть я понял).

Я понял что в Vim есть некоторые удобные хоткеи, к которым деды привыкли, потому что Vim в каждом линухе из коробки, а также из него можно сделать что угодно (но нужно быть достаточно упоротым, обкуренным мануалами и т.д, в общем на мой взгляд - не удобно).

И вот сейчас у меня снова возник вопрос "может я чего-то тут не понимаю?".

Наверняка здесь есть любители Vim, кто может подсказать, за что конкретно они его любят, прям на пальцах, за какие механики, какие хоткеи и т.д. Чего совсем нет в других редакторах/средах (или есть, но только с Vim-плагином)?

46 комментариев 👇
Антон Давыдов, Архитектор / консультант 25 июня 2020

Использую вим уже больше семи лет.

Мне сложно сказать, что vim как редактор - это лучшее что есть на рынке. VimL - боль, плагины примитивные (особенно в сравнении с emacs).

Для меня плюс вима - новые абстракции в работе с текстом, которые редактор представляет (из коробки + плагины). Т.е. редактируя текст, я могу оперировать словами, строками, внутренностями блоков, абзацами или еще чем-то. Этого не хватает в других местах, где я пишу текст или код, думаю поэтому так популярно делать vim mode для других редакторов/програм/браузеров.

Самое интересное, что работа с вимом напоминает работу с коммандами вида команда данные, только в случае вима все наоборот команда текстовая_абстракция. Яркий пример - dw, где d - удалить, а w - слово.

Шесть лет назад написал статью об истории редактора, где как раз об этом подробно.

  Развернуть 1 комментарий

Навигация по словам — ценная штука.

Но, справедливости ради, она есть буквально везде. На виндоусе зажимаешь Ctrl, на маке — Alt, и навигация, выделение и удаление делаются по словам.

(Разумеется, я не пытаюсь оспорить чьё-то личное удобство с вимом/емаксом, особенно в более сложных сценариях.)

  Развернуть 1 комментарий

@Yakov, в виме не надо стрелки тыкать для этого, руки остаются на месте (home row).

  Развернуть 1 комментарий

@omnster, ну это тоже фиксится на раз. Я перенес стрелки на ijkl и кайфую и без вима.

Я время от времени вимом пользуюсь и мне очень не хватает режима несколких курсоров. Как это обходится в вим?

  Развернуть 1 комментарий

@lopin, есть три варианта:

  1. visual mode и там редактировать все
  2. :norm комманда
  3. плагин который добавляет курсоры как в саблайме (https://github.com/terryma/vim-multiple-cursors)
  Развернуть 1 комментарий

@lopin, да ну везде все фиксируется на раз :)

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

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

Первое время мне нравилось, что можно руки с home row вообще не убирать, даже модификаторы вроде ctrl практически не нужны. Потом поставил себе пару плагинов, чтобы latex было удобнее писать и заметки делать. Потом выучил всякие штуки с регулярными выражениями и так далее.

  Развернуть 1 комментарий

Дело привычки, имхо. Я долгое время всё писал в Sublime, потом понял, что есть и другие варианты и даже IDE. Вопрос запоминания хоткеев самый сложный, ставить плагины для переопределения не хотелось.

VIM абсолютно прекрасен для запуска на удалённом сервере, никаких гуёв не нужно. Удобно навигируешься по проекту, по дефенишнам прыгаешь. Но, на локальной машине не знаю зачем оно в 2020.

  Развернуть 1 комментарий
Anatoly Shipitsin, Специалист по НЕХ 25 июня 2020

А как же emacs? :)

  Развернуть 1 комментарий

С Emacs-то вроде всё понятно, его используют либо аристократы Lisp-разработчики, либо безумные деды :)

  Развернуть 1 комментарий
Anton Satin, Фуллстэк/Лид 25 июня 2020

Я задался примерно тем же вопросом примерно зимой и накатил как ни странно emacs. Потому что emacs можно сделать как vim, а вот vim сделать как emacs уже сложнее. Но это лирика.

Так вот после небольшого привыкания становится классно и удобно. Удобно бегать по документу, удобно бегать по файлам, удобно не тянуться к мышке каждые 5 секунд. Пару раз я рейджквитил и откатывался на VS Code только что бы понять что мне стало резко не хватать normal mode и всяких возможностей быстро прыгать по документу.

Еще я бы добавил кастомизируемость. Это было моей второй причиной свалить с VS Code - его можно настроить лишь до определенного момента. Например, меня страшно бесят некоторые выкрутасы LSP серверов для TS и Elixir а поменять их в вс коде довольно муторно.

Я не очень хочу продавать vim/emacs, это во многом вопрос предпочтений, но мне кажется если тебе хочется понять как и почему люди это делают - стоит попробовать поставить какую нибудь сборку, попользоваться, потом всегда можно откатиться.

  Развернуть 1 комментарий
Andrey Shinkevich, Software craftsman 25 июня 2020

Я люблю Vim из-за хоткеев – правой рукой удобно навигироватья(hjkl). Да и команды удобно нажимать, если привык к слепой печати и модальная система отличная. Но emacs круче как редактор, надо только использовать некоторые кейбиндинги от вима. Да и org mode многим очень нравится как средство ведения заметок и todo листов. Вот классная сборка для начала: https://github.com/hlissner/doom-emacs. А вообще это просто набор привычек – люди обрастают конфигами, скриптами и настройками за жизнь и им очень удобно. Они не хотят куда-то слазить и что-то менять. Да и сейчас, когда есть реализация language server protocol для многих языков и можно настроить многое в любом редакторе и нет большого смысла в смене редакторов.

  Развернуть 1 комментарий

Спасибо за ссылки!

  Развернуть 1 комментарий
Semyon Martynchik, Саппорчу сервера с Linux на борту 25 июня 2020

TL;DR: Vim для правки конфигов.

Для меня ценность Vim в том, что он есть везде. Зная базовые приемы работы с ним, на любом сервере по SSH можно отредактировать что угодно — конфиг, скрипт, дамп БД. На локальном компьютере тоже использую его для быстрых правок, если уже открыт терминал или если хочу поправить/создать конфиг.

Писать код в нем не пробовал. Чтобы полноценно работать с Vim, нужно перестроить свой мозг. Страшно, затратно, последствия. После этого, жизнь уже никогда не будет прежней и я скорее всего пойду ставить Vim-плагин на микроволновку.

  Развернуть 1 комментарий

Плюсую, для правки конфигов на локальной машине или удалённой, vim прекрасен

  Развернуть 1 комментарий
Dmitry Kabak, JavaScript Developer 26 июня 2020

Я очень много пишу разного текста - конфиги, код на куче разных языков (си / ардуино / джс (основная работа) / питон / дажеджаваиногда) и всегда было приятно, если для этого не нужно запускать отдельные приложения (а ещё консоль нужна всегда, в ней гит, докер, логи, сервера, вообще всё). Поэтому мой путь был таков:

  • visual studio, notepad++, eclipse, idea - было ещё на винде, я был молод и глуп
  • саблайм, появился с первым маком, впервые был классный быстрый редактор под любой язык. Встроенная консоль была неудобной, чуть более сложная функциональность - линтеры, ошибки, подсказки - вкручивалась очень сложно, поэтому с первой возможностью пересел на:
  • атом! Новая эпоха, электрон, миллионы плагинов, я писал свои, устанавливал десятки для поддержки всех возможных языков и их комбинаций. Было весело, потом стало тормозить и медленно развиваться, и я перешел на новую модную штуку:
  • VSCode. По сравнению с атомом - отличная скорость, вылизанный интерфейс, офигенный юикс, постоянные апдейты с красивыми чейнджлогами которые я с удовольствием читал, шикарная поддержка типов в джс даже если не пишешь на тайпскрипте, много штук просто работают из коробки (отступы в файлах на новой строке, подсказки, автоимпорты, плагины в разы качественнее, чем в атоме). Но в какой-то момент (подключил внешний монитор) стал таки сильно раздражать лаг от печатания, после git checkout tsserver выжирал 300% цпу, и я решил попробовать в 25й раз вим (но впервые начал писать сразу код на работе в нем)
  • вим! Быстро работает, открывается прямо в моём красивом и настроенном терминале (Kitty). Теперь на любой проект (а их в течении дня может быть 2-5) у меня открыто отдельное окно терминала, в котором в первой вкладке почти всегда neovim. Конфиг взял чей-то готовый, допиливал по необходимости. Теперь это не просто редактор, а часть воркфлоу, причем одинаковая для разных проектов, языков, и просто текстовых файлов тудушки. Добавил tsserver через coc-nvim, и все умные плюшки поддержки джс из vscode работают и в виме, настолько же медленно, но к счастью асинхронно и не мешают писать код.

Короче, советую пробовать и экспериментировать) Я могу тоже перейти в емакс, vscode, или в xi. Но мне нравится интегрировать разные приложения и подходы вместе, составляя приятный для себя пайплайн превращения идей в проекты.

  Развернуть 1 комментарий
Tim Lavnik, Backend Engineer 26 июня 2020

Есть вещи, которые тебя впирают, а есть те, которые не очень впирают. Вот смотрю я стрим Антона Давыдова (комментатора выше), и понимаю, что это искусство - так управлять своим кодом с помощью пальцев и терминала.
Когда что-то нравится, ты этим начинаешь интересоваться. Пусть бы мне обещали скорость 10x, но это не доставляло бы удовольствие - это дело бессмысленное.
Vim - это не просто другой язык для управления кодом. Это не перейти с "русского", на условный "английский" в мире IDE. Это научиться общаться вообще без слов. Конечно, это небольшая гиперболизация, но что-то в этом есть.
Вот, кстати, канал парня, который сделал увлекательный курс, который научит летать. Больше для новичков. https://www.youtube.com/channel/UC8ENHE5xdFSwx71u3fDH5Xw

  Развернуть 1 комментарий

Круто, спасибо! Я первый урок посмотрел, там интересное у автора выделение текста цветом (у кейвордов выделение цветами, а остальной текст обычным серым). Интересно, для чего это?

  Развернуть 1 комментарий

Когда-то освоил вим в самом базовом понимании (вимтутор + что-то ещё по мелочи), но не проникся.
Самое неудачная на мой взгляд идея - наличие нескольких режимов (основной и инпут). Не понимаю, почему это хоть кому-то нравится.
Почему-то в "вюзивуг" редакторах нет такой проблемы, может быть потому, что там хоткеи для всех действий с кусками текста повешены на shift/ctrl/alt/cmd и не надо придумывать два режима. Постоянно тянуться к мышке - одна крайность, к эскейпу - другая (и пространственно, и метафизически).

Обычно, если спрашивал адепта вима, какое крутое преимущество вим даёт - мне демонстрировали что-то типа "а вот смотри какую хитровывернутую операцию тут можно сделать, а в других редакторах нельзя". Поскольку я такие вещи делаю примерно никогда - не впечатляет.

Иногда размышлял по поводу того, что же именно в виме плохо. Однажды мне попалась на глаза книжка про UX. Называется она "Психбольница в руках пациентов". Если грубо, то вим - редактор не для людей, потому что те, кто его делал, не думали про людей вообще. Это "хакерский" инструмент, примерно как язык шелла.

Например - почему переход в конец строки - циркумфлекс, а начало строки - доллар? Потому что так сделано в регекспах. Это "юзабилити" для хакеров, из тех времён, когда программистов и компьютеров было мало, все наизусть знали язык регекспов и поэтому у тебя в редакторе есть такое мнемоническое правило. С тех пор сменился не один президент и нет никакой потребности делать именно так. К счастью, в современном мире существует такое понятие, как UX, а если этой задачей занимаются программисты, то продуктом никто не пользуется - туда ему и дорога.

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

А на повседневной основе пользоваться для себя не вижу никакого смысла, потому что есть же нормальный редактор, и имя ему - VSCode :)

  Развернуть 1 комментарий

Долор с кареткой перепутал.

  Развернуть 1 комментарий

@omnster, по аксиоме Эскобара

  Развернуть 1 комментарий

Если постараться выделить суть vim, самый сок, то вот:

Чаще код мы читаем, а не пишем. Если и пишем, то львиная доля не с нуля а в духе «скопировать строку выше, и изменить название переменной». Так почему бы для навигации использовать не только стрелочки и клавиши home/end а пол клавиатуры.

Ну ещё принцип композиции команд важная идея, но это на пальцах не объяснить уже.

  Развернуть 1 комментарий
Таня И., Network engineer 29 июня 2020

Я люблю вим:

  • за то, что у него навигация вся внутри основного блока клавиатуры;
  • за то, что я могу общаться с ним, буквально перенося команды с человеческого языка на язык команд: «перейти к N строке, удалить N строк, скопировать строку в буфер обмена, вставить скопированное до курсора, после курсора, повторить последнее действие, заменить один символ и т.д.»;
  • люблю его за макросы;
  • люблю мощные возможности редактирования, в том числе и с помощью регэкспов;
  • за то, что он есть везде, пусть даже и vi;

Короче, вим для меня гораздо удобнее всяких нано, мседит и прочих редакторов. Когда речь идёт именно о редактировании текстов, виму нет равных. С помощью вима можно переноситься по тексту так быстро, насколько быстра твоя соображалка :) Емакс не пробовала и не хочу из-за малой распространённости. Вим — это такой универсальный язык общения с любой рабочей станцией или сервером. С ним не пропадёшь :)

  Развернуть 1 комментарий

Для меня самая главная фича vim/emacs это консистентность управления во всем редакторе. Одними и теми же командами (перемещение, поиск, ввод текста итд) я управляю в основном окне, в панели с файлами, в терминале, в меню - везде. А в idea/vscode в меню одно управление, в панели с файлами другое, где текст набираешь - третье. Vim-плигин только в emacs нормальный, в остальных редакторах он чаще всего только на ввод текста действует, а в дургих местах редактора уже нет.

  Развернуть 1 комментарий
Igor Kislitsyn, Программист 2 июля 2020

Просто писать в виме — это удовольствие. Это складывается из множества факторов, все уже были перечислены в комментариях. Для меня вим это:

  1. Консистентность. Я точно знаю, как редактор ответит на ту или иную команду, а если не знаю, то могу угадать. Язык команд удивительно логичен: если я знал, что d - delete, a - append, а D - delete until the end of the line, то я знаю, что A - append at the end of the line. И так с каждой командой.
  2. Модульность языка команд. Опять же, зная, что d - delete мы открываем для себя целый мир: di( - удалить внутри скобок, dt. - удалить до символа '.', d} - удалить до конца абзаца и так далее. Если нужно не удалить, а, например, скопировать, поменяется лишь одна буква. На аккорды с ctrl, alt и shift такое количество модификаций не распихаешь.
  3. Оперирование текстовыми абстракциями. Не нужно елозить с зажатым шифтом по тексту, чтобы выделить всё внутри фигурных скобок или весь абзац.
  4. Консистентность. Когда пришлось временно съехать с линукса на мак, только вим вёл себя точно так же, как и везде (в остальных приложениях часть биндингов съехала с ctrl на cmd). Даже на андроиде вим ведёт себя точно так же, как на компе.
  5. Автоматизируемость. Когда оперируешь текстовыми абстракциями, гораздо проще писать макросы, вроде "на каждой строке оберни всё от четвёртого слова до конца строки в кавычки". В виме так можно, даже без регулярок.
  6. Кастомизируемость. По этому параметру вим обскакал только emacs (трудно спорить с редактором, из которого можно сделать wm).
  7. Консистентность. В виме удобно редактировать любой текст и не нужно отказываться от давно выработанных привычек. И не нужно каждый раз рычать на ворд за то, что он удаляет пробел перед словом по ctrl+backspace, а vscode - нет.

И это только вершина, есть огромное количество вещей, которые в виме делать просто и весело. Многие из них кажутся избыточными на первый взгляд (например ctrl+a - инкремент числа под курсором), но потом начинаешь удивляться, как раньше жил.

  Развернуть 1 комментарий

Vim добавляет в процесс монотонного набора текста удовольствие. Можно написать много слов, почему это так приятно, но ты не поймешь, пока сам не проведешь с ним пару недель. Просто начни писать код в нем, или накати плагин с ним в свою любимую IDE, и начни использовать его для работы. Первые несколько дней-недель будет больно, но когда преживешь их, поймешь, за что мы его так любим. Алсо, реккоммендую https://neovim.io/. Это по сути клон обычного vim, только с отрефактореными исходниками, и улучшенной производительностью.

  Развернуть 1 комментарий

Когда говорят VIM имеют ввиду консольный вим с плагинами? или гуевый MacVim/gVIM? Пробовал использовать, но начал с настройки и кастомизации. Добавляешь пару плагинов и хваленая скорость тает на глазах. Да и настройка конфига отличается(гуй не гуй), в некоторых случаях получить желаемый результат затруднительно.
Вот по пайтону, есть пример vimrc?

  Развернуть 1 комментарий

@facetheheat, Обычно имеется в виду консольный. Но если интересеен vim, проще всего начать с vim-плагина для вашей IDE или редактора. vimrc для питона можно нагуглить целую кучу, но имхо, лучше этого не делать, а начинать писать свой с нуля. Я не использую vim как IDE, поэтому плагинов у меня там минимум. В основном я сижу на https://plugins.jetbrains.com/plugin/164-ideavim + pycharm. По поводу производительности - попробуйте NeoVim, но только внимательно подбирайте плагины. Некоторые действительно могут медленно работать.

  Развернуть 1 комментарий

@ChasingRainbows, Спасибо. Т.е. под vim обычно понимают просто раскладку и хоткеи.

  Развернуть 1 комментарий

Ну vim - это такая вещь, которая ускоряет работу x2 раз.

С ним в основном больно отвыкнуть от идеи "мы перемещаем курсор и меняем текст" и привыкнуть к "мы расфигачиваем сразу целые ЛОГИЧЕСКИЕ блоки текста".

Сам в Jetbrains IDE/Sublime Text добавляю vim-плагин и херачу счастливо.

  Развернуть 1 комментарий

Фраза про логические блоки не слишком понятна неискушённому.

Можно видео с комментарием, где будет видно, что значит «расфигачиваем блоки текста»? Это было бы куда нагляднее.

  Развернуть 1 комментарий

@Yakov, например можно глянуть видос:

(таймкод 4:00).

Я имел ввиду всякие пируэты вида "заменить слово", "удалить внутри скобок", "сдвинуть абзац вправо" (http://vimdoc.sourceforge.net/htmldoc/motion.html#object-select), а также типа "повтори предыдушее действие" (http://vimdoc.sourceforge.net/htmldoc/repeat.html).

В комбо с мультикурсорами из Sublime Text получается вообще бомба.

  Развернуть 1 комментарий
Стас Бушуев, Программист 2 июля 2020

VIM, даже без плагинов, очень хорош по двум связанным причинам:

  1. Богатый набор примитивов редактирования, навигации и указания текстовых объектов
  2. Дополнительный уровень абстракции, который позволяет комбинировать примитивы

Только из-за этих двух пунктов в совокупности я и не могу уже лет двадцать из него выйти.

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

  Развернуть 1 комментарий
Andrey Rakhubovsky, quantum information postdoc 25 июня 2020

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

  Развернуть 1 комментарий

Всё кроме модальности звучит как про VS Code =) А в чём фишка модальности, чем она облегчает жизнь?

  Развернуть 1 комментарий

Речь ведь только про консольные клиенты? Потому что я не понимаю, чего из этого может не быть в современных sublime, atom, vscode?

  Развернуть 1 комментарий

@valerysilin, с консолью то всё понятно, но как я понял - люди в Vim разрабатывают, на постоянной основе

  Развернуть 1 комментарий

@TepMex, вот тоже таких встречал, но не к месту было спросить)

  Развернуть 1 комментарий

@TepMex, ну это удобно, печатаешь-печатаешь, потом нажал <esc> и можешь перемещаться по тексту, не убирая рук с клавиатуры. Это если вкратце.

Если развернуто, то у vim очень продуманная модальная система, ей долго учишься, потом очень тяжело отвыкнуть. Вот канонический текст на эту тему https://stackoverflow.com/a/1220118/767725 , хотя я сомневаюсь, что его кто-то захочет читать целиком.

  Развернуть 1 комментарий

@omnster, вот это интересно, спасибо. Я люблю такое читать, [эффект Линди] (https://en.m.wikipedia.org/wiki/Lindy_effect) говорит о том, что в древних, но ещё живых, технологиях, что-то есть

  Развернуть 1 комментарий

@TepMex, "древних, но еще живых" это очень своеобразная формулировка в данном случае.

  Развернуть 1 комментарий

Один из его вариантов, vi, есть по умолчанию в любой системе. Зашел по ssh - отредактировал файл. Удобно.

  Развернуть 1 комментарий

nano какой-нибудь сейчас тоже везде есть. Так себе аргумент

  Развернуть 1 комментарий

@vvzvlad, далеко не везде. Так что минимум команд vi стоит знать :)

  Развернуть 1 комментарий

@vvzvlad, на линуксах семейства RedHat частенько не было, так люди впервые и сталкивались с невозможностью выхода из Vim. Один из каноничных сценариев: ставлю какую-нибудь Центу себе на ПеКа, чтобы настроить интернет или DE - надо поправить какой-нибудь конфиг, идешь его редактировать - открывается Vim. Интернетов у тебя нет, погуглить "как выйти из Vim" ты не можешь, поэтому хард ресет, и всё по новой. Для установки nano нужен Интернет =)

P.S. Я в итоге таки загуглил по дорогущему WAP

  Развернуть 1 комментарий

@TepMex, мне повезло, у меня на тот момент был журнал хакер со статьёй про вим лол

  Развернуть 1 комментарий
Misha Novik, Java developer 25 июня 2020

Возможно мой комментарий покажется несколько странным, однако я начал использовать вим после того как понял, что после полного рабочего дня начинали онемать пальцы на правой руке, которой пользовался мышкой(туннельный синдром). Возможно я себя обманываю, но все же мне кажется что после того, как начал использовать вим и не дергать постоянно руку к мышке - рука перестала онемать от слова совсем. Сам вим я не нахожу удобным для того чтоб писать код вне какой-либо IDE или без миллиона плагонов, но как люди уже высказывались, пару недель и уже перестаешь задумываться про все эти странные хоткеи и все будет казаться +- понятными и удобными

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб