Вероятно, вы слышали о Vim — всемогущем текстовом редакторе, который используется повсюду и из которого люди время от времени не могут выбраться. Ваш знакомый DevOps-инженер рассказывает о том, насколько великолепен и быстр Vim, и вы, вероятно, подумали, что стоит его попробовать. Но как мы пришли ко всему этому? Каким образом одержимость Vim однажды охватила весь мир?
Если посмотреть на опрос StackOverflow 2019 года о самых популярных средах разработки, то Vim по-прежнему находится в нём на пятом месте — его используют примерно 25% веб-разработчиков. Пятое место — это довольно неплохо, учитывая, что первый релиз Vim произошёл почти 30 лет назад (да, мы не ошиблись — первая версия Vim появилась в 1991 году).
Чтобы лучше понять, как и почему Vim стал (и по-прежнему остаётся) столь популярным, нам нужно изучить, с чего всё начиналось. До
vim
существовал vi
, до vi
существовал ed
. Что это за двух- и трёхбуквенные слова, и какая история за ними стоит? Давайте будем разбираться.Перфокарты и строковые редакторы
Сегодня нам очевидны причины появления текстовых редакторов и полнофункциональных IDE
(Integrated Development Environment), но что было до них? Как вы, вероятно, знаете, на ранних этапах программирование заключалось в засовывании в компьютер листов картона с отверстиями (перфокарт). Очень важен был порядок ввода этих карт. Например, на фотографии ниже показаны 4,5 мегабайта данных, собранных в стопки из 62500 перфокарт. Представьте, что они упали и вам пришлось сортировать их заново.
С увеличением мощности и объёма накопителей компьютеров перфокарты становились всё более неэффективными, поэтому программирование эволюционировало. Со временем люди отказались от перфокарт, после чего настала эпоха «строковых редакторов». Отличным примером такого редактора является
ed
. Также стоит упомянуть предшественника ed
под названием QED.Работа со строковым редактором
Если у вас Linux или Mac OS, откройте терминал и введите
ed
. Откроется простой строковый редактор, который поприветствует вас полной тишиной. Если вас поразила эта находка (меня поразила), то можете немного поэкспериментировать с редактором. Чтобы вводить файл, наберите a
и нажмите Enter, а затем пишите свой текст. Нажав .
, а затем Enter, вы выйдете из режима добавления (вставки). Чтобы записать файл, можно ввести w myfile.txt
и нажать Enter, а в конце ввести q
и нажать Enter, чтобы выйти из редактора.# ed a Hey there! I am using ed right now, how cool. OK, that's enough. . w
myfile.txt 64 q
Как вы могли заметить, есть сходство между работой с
ed
и с современным vim
. Если вы пользуетесь Vim, то довольно быстро освоите ed
.Отец Vim по имени Vi
После
ed
появился em
— «editor for mortals» («редактор для простых смертных»). Его функциональность схожа с ed
, но он «менее загадочен» и создан для обычных людей. На основе кода em
Билл Джой разработал ex
, что расшифровывается как «extended ed» («расширенный ed»)! Он стал важным этапом, потому что наряду с предыдущими режимами у ex
был режим visual
(«визуальный»), отображающий на экране весь файл. Вы можете спросить — а почему об этом не подумали раньше? В те времена визуальное отображение файлов на компьютерах было довольно сложным трюком, и многие считали его излишней тратой ресурсов. Однако в какой-то момент преимущества перевесили возражения, и отображение редактируемого файла на экране стало современным стандартом.И так родился режим visual. Позже в операционных системах появился исполняемый файл
vi
, но мы по-прежнему можем пользоваться командами ex
, вводя :
в vi
/vim
. Редактор ex
был выпущен в 1976 году, а исполняемый файл vi
— в 1979 году. Сорок с лишним лет назад! Но как же появился vim
?Игра в имитацию
Пару лет спустя появилось множество клонов
vi
(мне больше всего нравится Elvis). Одним из них был «Vi Improved», созданный Брамом Моленаром — это имя вы видите, когда запускаете vim
в терминале. Редактору vim
удалось выделиться на фоне множества клонов vi
. Брам взял клон vi
под названием STEVIE
(хорошее имя, кстати), и заметил, что в нём не хватает множества команд vi
. Он добавил несколько новых функций и обеспечил его совместимость vi
, после чего выпустил его под названием «Vi Imitation» (позже название сменилось на «Vi Improved»). Название vim
появилось в версии 2.0, выпущенной в 1993 году, и сохраняется по сей день. Но как vim
добился своей славы? На то время он имел множество великолепных возможностей и был совместим с vi
. Функции и совместимость сделали его привлекательным для многих.Полвека работы
Если посмотреть на важнейшие команды для работы с Vim:
h
, j
, k
, and l
, то все они уходят корнями в эпоху vi
. В то время на клавиатуре Билла Джоя не было курсорных клавиш. Кроме того, клавиша ESC
находилась на месте современной TAB
. Посмотрите, как это выглядело тогда:Команды замены текста, например,
:%s/text_to_replace/text_to_replace_it_with/
, тоже пришли из той эпохи. Необходимость ввода :
для выполнения команды — это ответ на полную тишину ed
, которая встречала пользователей, впервые вошедших в редактор.Этим я хочу показать, что
vim
стал результатом более чем полувекового накопления хороших идей, а также серьёзных усилий по сохранению обратной совместимости. Да, полезные функции, возможно, сделали Vim знаменитым. Но актуальность ему обеспечивала совместимость практически с любым редактором. Сегодня в SSH можно запустить Vim, или, по крайней мере, Vi. Это одна из самых важных причин изучать его сегодня.Если вы не взаимодействуете со множеством серверов и не работаете на них с файлами, то смысл повсеместного наличия Vim вас не коснётся. Однако он всё равно может оказаться для вас ценным.
Заключение
Надеюсь, этот пост пролил свет на то, как Vim стал тем, чем он является сегодня. Также я тешу себя надеждой, что вдохновил вас попробовать его. Никогда не знаешь, когда он может понадобиться, возможно, Vim настолько вам понравится, то вы решите использовать его постоянно.
Кто знает, возможно режим Vim есть в вашей IDE или VSCode. Я не хочу сказать, что Vim должен заменить всё, чем вы сейчас пользуетесь, но его изучение и настройка улучшат ваши навыки. С другой стороны, самое главное — не редактор, а то, что вы с его помощью делаете!
В конечном итоге, нужно найти подходящий редактор (или инструмент), который позволит вам выполнять свою работу ещё лучше.
На правах рекламы
Аренда облачного сервера на Linux или Windows — выбирайте одну из предустановленных ОС, либо устанавливайте из своего образа.
Подписывайтесь на наш чат в Telegram.
Jogger
Сложно найти более переоценённый программный продукт, чем vim. Реально, он на сегодняшний день не имеет никаких достоинств в сравнении с графическими редакторами. Зато имеет кучу недосататков. Единственное, почему он хоть как-то актуален — это потому, что по-умолчанию установлен во всех *nix системах. В задачах «отредактировать одну строчку в конфиге» его гора дикого легаси только мешает, а для задач типа «писать огромную программу с нуля» всё же лучше и удобнее пользоваться ide с графическим интервейсом. vi (и даже vim) был действительно очень функционален и продвинут в своё время. Сейчас нет причин им пользоваться, кроме ностальгии. Сейчас конечно набежит толпа фанатов и заминусует это комментарий, но это, имхо, только доказывает мою правоту.
skymal4ik
Для меня это отличный инструмент, который позволяет через голый терминал удобно редактировать сложные файлы конфигурации и тестировать их прямо через редактор (! systemctlt reload nginx) на удаленных серверах.
Из-за мер безопасности не всегда удобно и возможно копировать текст в ide или другой редактор (на своём компьютере у меня стоят sublime text и vs code). И лишние действия по копированию опять же.
Так что зря вы так, просто надо понимать где какой инструмент использовать. Ну и да, не считаю себя фанатом, но нравится сама концепция режимов и аура чего-то таинственного из прошлого.
fzn7
Коллега все верно сказал. Единственное преимущество — как правило, установлен в системе по умолчанию. Стараюсь не редактировать конфиги на железе т.к. это уже само по себе попахивает нафталином. В случае необходимости использую nano, на который вечно шикают
бабки у подъездапостольку поскольку. В целом практика порочная — деплой скрипты должны быть написаны и писать их приятнее в родной Idea. Писать их надо тоже на на убогом bash, который никак не получается выкорчевать по той-же причине что и vim, а хотя-бы на 3м питоне.skymal4ik
Извините, но нафталином попахивают предположения, что везде нужно всё самое современное, что без DevSecOps и третьего Питона (минимум 3.9) не прожить, а легаси, мейнфреймы и критичная инфра, где требуется надёжность и контроль (в т.ч. и со стороны бизнеса\государства, и любое изменение проходит через чейндж менеджмент и аппрувится бордой архитекторов) - не существуют.
fzn7
Нет ничего стыдного в том, что-бы ковыряться в дерьме. Стыдно когда вам это нравится
slonopotamus
Простите, как сочетаются "надёжность и контроль" с "правим конфиг nginx'а через vim на живом сервере"?
skymal4ik
Не знаю, я этого не утверждал :)
Vim - просто удобный и классный инструмент для редактирования конфигураций и скриптов, например, там, где сильно ограничен доступ (ssh+bash, и всё, никаких тебе ci\cd), а не ключ к надежности.
Надёжность и контроль в большей степени обеспечиваются другими инструментами - например, скв, тестовые среды, чейндж менеджмент, принцип 4 глаз (один делает, другой смотрит), тесты, аудит и прочие.
Я не пытаюсь сделать из vim венец творения, я просто считаю, что это классный инструмент _для определённых случаев_, и его иногда незаслуженно пытаются выкинуть или называют нафталином :)
Murimonai
То что он «живой», не значит же что он на проде. Тут кмк идея в том, что критики vim обычно сильно недооценивают разнообразие потенциальных мест применения.
Squid123
Люто плюсую за «убогий bash». Вот уж действительно икона
бабкок у подъездаПричем что удивительно виндовый batch оргазмов не вызывает — все спокойно перешли на нормальный powershell. И только «тру» лиупсоиды продолжают с упоением жрать кактус.Tim0Ur
IMHO, это для старых юниксоидов. "Нам" не понять :) Мне, как фану DOS'ов, ближе mcedit. Слышал ещё что есть emacs-маньяки, которые его достаточно успешно вместо графических IDE используют.
nick758
В том-то и прикол, что не старых юниксоидов. Я в начале 2010-х с удивлением узнал, что vim набирает популярность, появляются эмуляции этого редактора для браузера и проч. Причина этого мне до сих пор не понятна.
skymal4ik
Причина проста - комбинациями нескольких клавиш можно гораздо быстрее проводить операции над текстом\кодом - найти открывающую скобку, удалить слово, вставить отступ на 10 строках сразу, и т.д. Если вы это делаете редко, то вам это и не нужно. А кто это делает на постоянной основе те экономят много времени.
Для меня скопировать строчку в конфиге - это три нажатия на клавиатуре (yyp, yy - yank, скопировать строку, р вставить), а коллега по цеху мышью копирует строку в mcedit, клавишами стрелок идёт в конец строки, жмёт enter и вставляет правой кнопкой мыши. Сравните что легче,если вам это нужно делать много раз за день на протяжении месяцев :)
Barabashkad
и вроде да ... вы правы :-)
но как то давно ... очень давно :-)
мы с колегами провели соревнование ...
я выступал на стороне GUI :-)
так как плохо дружу с незапоминаемыми последовательностями несвязаных букв ;-)
а мой колега наоборот ;-) только консоль только клавиатура
мы взяли одно и тоже задание .... и с секундомером начали его выполнять ...
уже не помню сути задания ... но что то примерно небольшого рефакторинга кода
но через пол часа я его закончил ... а он еще минут 10 возился :-)
и вы не поверите ... через неделю он поднял Иксы на совем линуксе и обзавелся мышкой :-)
murzilka
Вашему коллеге повезло что у него нет туннельного синдрома. Обычно с ним пользоваться мышью не очень получается. Ну или получается, но не очень долго. В таких случаях люди и осознают всю прелесть вима
mistergrim
Да, конечно, туннельный синдром только от мышки бывает, а от клавиатуры вообще не бывает.
murzilka
Клавиатурой пользоваться с ним значительно проще. А вот мышкой - никак. По крайней мере так было у меня и моих коллег с подобной проблемой. Дело в особенностях движения, насколько понимаю: при использовании мыши так или иначе есть вращательные движения и движения кистью. В то время как для работы на клавиатуре кисть можно вообще зафиксировать
shikhalev
Для этого есть трекболы.
murzilka
Или можно пользоваться только клавиатурой
anonymous
Силиконовый коврик для мыши с горбиком для кисти решает проблему синдрома! Проверено!
murzilka
О, нет, поверьте, не решает. С ним только хуже, потому что горбик давит именно туда, где проблема кроется. Это я на себе лично проверял, а у меня совсем небольшие проблемы с синдромом, к счастью
nick758
ИМХО, это не причина, то, что вы перечислили могут достаточно много редакторов кода. Про поправить пару строчек на сервере — это понятно. Не понятно, почему vim стал популярен как замена IDE, причём не только в Линуксе.
google_fan
Для меня скорее наоборот — не очень понятно, что дают IDE ради чего нужно жертвовать скоростью, возможностью прозрачно работать локально и удаленно, без проблем параллельно держать больше десятка открытых проектов в разных сессия tmux.
Плюс конечно вся магия режимов vim которая позволяет делать много чего, не снимая руки с клавиатуры. Причем эта магия вам доступна, даже если вы пишете не код, а скажем доки в markdown или тикет в jira.
Что критически важного есть в IDE, что недоступно в vim?
Всякий рефакторинг, автокомплиты, автоподсветка ошибок, автоисправления ошибок и прочая магия связанная с семантикой кода ушла в language servers которые могут использоваться как из vim так и из VSCode.
Мне навскидку приходит в голову только интеграция с системами контроля версий. Для вима есть fugitive, но он уж слишком мощен для меня, так что за исключением банальных вещей типа посмотреть изменения, откатить частично, добавить в stage и прочее что легко сделать не выходя из vim, я предпочитаю делать снаружи vim. Подозреваю что в Idea можно делать дикие мержи и разрешать конфликты бодро орудуя мышкой.
Т.е. я соглашусь что наверное что-то какие-то вещи в себе типа C# или энтерпрайза на java лучше писать в идее или VS, но для обычных вещей типа python/php/golan/rust какой-то особенной разницы не будет.
Это вам взгляд с обратной стороны — от человека который лет 20 пользуется vim? но иногда пробует что нового в стане IDE ( плюс иногда вынуженный ими пользоваться как раз для java/c#)
igorp1024
del
nick758
Мне вот это и непонятно: если в IDE/редакторе нужно тянуться к мышке для операций, которые используются постоянно, то это неудобная IDE/редактор. То чем я пользовался, позволяло обходиться без мыши в большинстве случаев. Почему считается, что только vim избавляет от мыши?
google_fan
Ну скажем если я не в vim, то у меня сложности вызывают задачи вида - скопировать весь комментарий к функции, перескочить к началу абзаца, выделить до конца предложения.
Или банально - я пишу комментарий к какой-то функции и в процессе мне понадобилось посмотреть какое-то другое место в этом большом файле. Я сходил посмотрел и теперь мне нужно сказать _верни меня немедленно в то место где я писал комментарий_.
Да и вообще история перемещения курсора это вещь. Когда бродишь по большому файлу с кодом и такой "Так, в какой-то это функции я был минуту назад?"
Или макросы. Обычно когда говорят макрос, я такой, оооо, макрос, это почти программирование, лень. В виме же если мне любое действие нужно сделать больше двух раз, я создам макрос. Потому что в виме макрос это "смотри, показываю как это делать один раз, потом будешь делать сам"
Плюс вим под клавиатурой понимает только буквенно-цифровые клавиши, плюс Ctrl,Shift,Alt. Все клавиши со стрелками, PgUp,PgDn , функциональные клавиши и прочее не существуют. Двойные и тройные сочетания Ctrl-Shift-Alt не существуют. Ну точнее они существуют и вы можете ими пользоваться, но в модальном редакторе вы можете все сделать не снимая рук с центрального блока, поэтому до них таааак далеко тянуться и никому не приходит это в голову.
unsignedchar
Мне попадались комментарии такие
И такие
И такие
И даже такие
Как это выделять правильно?
Вменяемое IDE (предназначенное для работы с кодом) это просто обязано уметь. qtcreator умеет, например. И мышкой, и клавиатурой ;)
google_fan
В виме есть понятие textobject. И сам вим представляет вам какие-то действия которые вы можете сделать с этим textobject. Например удалить, выделить, скопировать. Плюс модификатор внутри/снаружи i/a. А сами textobjects могут представлять кто угодно. Есть встроенные в вим, например слово, или блок, или кавычки. Т.е. вы можете сказать - удалить все внутри кавычек di" Или выдели слово на котором я стою viw. Но textobjects могут предоставляться и сторонними плагинами. Например плагин для работы с языком может предоставить вам textobject комментарий. Как он это делает это другой вопрос. Раньше это делалось регэкспами, сейчас есть современные тулзы типа tree-sitter которые строят дерево синтаксиса. Или вам LSP сервер их может давать.
Или например вим ничего не знает про понятие функция. Но скажем LSP или treesitter представляют textobject функция и я могу использовать стандартные средства вим для работы с ней.
Или скажем плагин для работы с git может представлять вам textobject - чанк кода который вы пока не закоммитили.
Радость от этого всего в том, что мышечная память для работы с textobject у вас натренирована за годы ого-го как.
Отлично! Значит я отстал от жизни ) Раньше почему-то можно было переходить вперёд-назад, только если вы прыгали пользуясь стандартными методами ide ( скажем кликнули на метод и перешли к его определению). Скажем если вы в произвольном месте нажмёте 5 раз PgDn вернуться было нельзя.
Хорошо что это уже общая фишка.
Но в любом случае главный бонус вим то что вы этими штуками можете пользоваться везде.
Можно маркдаун редактировать в рабочей Вики, писать большие сообщения к git commit с кусочками кода и прочая. Или писать вот это вот сообщение вам (чего я увы не делаю, потому что пишу с телефона :( )
unsignedchar
Потому что холиварная тема. Навигацию в стиле vim тянут в IDE, да. А дрессировать vim для полной замены IDE это долго.
0xd34df00d
Выдрессировать vim для того, чтобы я мог писать в нём на хаскеле с привычными (по плюсам) IDE-фичами — два вечера работы. Выдрессировать idea для того, чтобы в ней писать на хаскеле, у меня в итоге не получилось, там всё время что-то отваливается, жрёт много памяти, и вообще.
unsignedchar
Если вместо хаскеля взять что-то более мейнстримное, питон или php или c++?
0xd34df00d
То есть, всерьёз предлагается сменить язык на существенно менее подходящие, если для этого языка нет адекватных IDE, отличных от вима?
unsignedchar
Если действительно для хаскеля нет других вариантов кроме vim - штош, выдрессировать vim быстрее, чем дождаться адекватного IDE .
Fortop
А существуют практические области, где хаскель это единственный подходящий инструмент? О_о
AndreyHenneberg
Не сказать, что совсем долго — в репозиториях Fedora есть готовые конфиги, причём, довольно неплохие, но это уже малопонятные монстры, лезть внутрь которых уже просто страшно.
nixtonixto
Двойной клик мыши выделяет всё слово, тройной — всю строку, предложение или абзац, в зависимости от настроек. Копипаст — да, удобней через Ctrl. А вот если надо выделить пару сотен строк, то мышью достаточно прокрутить текст в конец и кликнуть в конце с зажатым Shift. А сколько вы будете ждать, пока доедет курсор, пусть даже со скоростью 10...20 строк в секунду?
Поэтому хороши оба способа одновременно, глупо отказываться от мыши в современных ОС…
TrueBers
V200j
— и 200 строк выделены за 200мс.mayorovp
Кабы ещё заранее знать точное количество строк...
TrueBers
Для этого используется относительная нумерация строк. Достаточно прыгнуть без переноса курсора на нужный экран, найти глазами искомую строку и вместо 200 набрать то число, которое стоит рядом с этой строкой. И выделится именно так, как вы описали с Shift+Click.
Когда это на автомате происходит из мышечной памяти, лично для меня это в разы, если не на порядки быстрее скроллинга и клика мышью.
0xd34df00d
Можно знать примерное число строк, а потом доехать до нужной последовательными приближениями. Типа,
V200j50kjj
— на двести строк вниз, понял, что многовато, на 50 строк вверх, снова промахнулся на пару строк, сделал пару строк вниз.А вот относительную нумерацию лично я не люблю. Мне как-то проще работать со статическим состоянием, когда номера строк не дрыгаются от перемещения курсора.
synedra
Но ведь в GUI-редакторах тоже есть хоткеи. Не вижу большой разницы между
yyp
иHome
-Shift+End
-Ctrl+C
-Ctrl+V
с точки зрения удобства. Ну да, хоткеи вима прямо на буквах и не надо тянуться до Ctrl - но зато надо на каждый чих тянуться до Esc. Получается примерно эквивалентно по скорости, а vim ещё и надо отдельно учить.Angeld
разница тут довольно существенная
во-первых подавляющее большинство команд вим вводятся также как печатается текст, не требуют одновременного зажатия нескольких клавиш, это гораздо удобнее. Для части людей это вообще единственно возможный способ, для них придуманы залипающие клавиши.
во-вторых комбинации с функциональным клавишами ограничены количеством этих клавиш и тем, что самые простые хоткеи в виде символов отданы под ввод текста.
в-третьих учить как раз гораздо сложнее горячие клавиши в обычных редакторах, поскольку они из-за пункта 2 не особо связаны между собой( например перемещение на слово/строку/блок выполняется одной комбинацией, а удаление совершенно другой). В вим же выучив команды движения, для выполнения какого либо действия связанного с этим движением тебе надо запомнить только команду для этого действия, а не набор отдельных команд для каждого перемещения. Например: переместиться до конца слова e, удалить до конца слова de, скопировать ye, поменять регистр g~e.
в-четвертых в вим большое количество команд для перемещения и выделения, которые могут комбинироваться с командами действий. и засчет того, что команды выделения также комбинируются из нескольких клавиш( например i", i{, ip, is, a", ap, as) запоминать там надо в разы меньше, чем с обычными горячими клавишами. Запомнив десяток команд, и полтора десятка способов движения/выделения, получаешь около тысячи различных действий, которым бы потребовалась тысяча обычных горячих клавиш. А с учетом того, что большинство команд гораздо мнемоничнее комбиначии управляющих клавиш, то запомнить это на порядок проще.
Ну и отдельно учить надо и горячие клавиши, просто обычный редактор можно использовать и без них, а использовать вим таким способом так же можно, но совершенно бессмысленно, поскольку тогда он превращается в обычный редактор, и не имеет никаких преимуществ.
основной недостаток вим в том, что для использования его в качестве иде, нужна настройка. Сейчас это немного нивелируется готовыми сборками, но не всегда они достаточно удобны. Как и в редакторе большинства иде сейчас можно использовать вим режим, но он также далек от совершенства. И для многих использующих вим решить проблемы настройки проще, чем мирится с недостатками реализации эмуляторов вим. Тем более, что проблемы настройки решить можно, а с недостатками можно только смириться.
dimaaannn
Плюсов вима не понимают те, кто не научились в нём работать.
Да, он сложен на первых порах, и вызывает жжение пятой точки, когда забыл команду какой то элементарной операции, или она сработала не так, как ты ожидал.
Однако, в итоге количество запомненных пальцами команд начинает переходить в качество, и жжение начинает появляться уже в каких нибудь мессенджерах, где нужно снять руку с клавиатуры, сделать пару кликов мышью и повторить несколько раз.
Хотя в вим эта команда заняла бы ввода 5-10
символов.
AndreyHenneberg
В Geany работаю почти исключительно через клавиатуру. Что я делаю не так?
В vim базовая операция вставки выполняется с модификатором, а с наворотом — без. Да, я в курсе, что там заглавная P, но при наборе это получается с модификатор. В итоге, когда что-то правлю в vim, приходится обходиться без копирования и вставки или использовать возможности графической системы, иначе работа встанет колом. Правда, в nedit-е всё ещё хуже, потому там всё ещё более криво и нет подсветки синтаксиса. Буквы, которые надо набирать, почти никак не связаны с названиями команд, которые они обозначают. Ну да, это третья-четвёртая буква команды. И вот попробуй угадать, что «y» — это «copy». Как было в одном анекдоте, «это уму не растяжимо, это запомнить надо».
Кстати, я вполне использовал vim в качестве полноценной замены графической IDE, так что не надо говорить, что мне было лень изучать его. И да, у меня была мощная конфигурация для этого. Только вот… Знаете, стоило ненадолго переключиться на графическую IDE, как все эти загадочные коды инопланетян приходилось изучать заново, тогда как горячие клавиши графических IDE почему-то отлично сохранялись в памяти. Может быть, потому, что буквы, которые нажимались в связке с модификаторами, были первыми буквами названий команд?
И не смотря на то, что mcedit — не самый удобный редактор, когда мне надо что-то делать на сервере, я стараюсь поставить туда mc. Потому что и редактор у него довольно внятный, и разгребать кучи файлов удобнее всё-таки в двухпанельном файловом менеджере, а не в голой командной строке.
quwy
Это только потому что mcedit убогий до упора. Его авторы зачем-то пошли по пути ncedit вместо уже общепринятого на тот момент выделения со стрелками.
В человеческом редакторе копирование строки — это Shift+v, Ctrl+C, v, Ctrl+V.
Не подготовленному человеку может показаться сложным, но все эти комбинации абсолютно логичны в контексте многих других операций над текстом.
Это даже читать страшно, не то, чтобы пытаться повторить. Я, например, категорически не понимаю, что тут написано, куда это вбивать, и где тут, мать-перемать, три нажатия на клавиатуре?!
stu5002
Всмысле где?) Вот же: yyp
Вбивать туда же, куда и Ctrl+..., Shift+...
DirectoriX
… не забыв сначала выйти из режима ввода
AndreyHenneberg
Я в mcedit прекрасно выделяю стрелками с шифтом. Что я делаю не так?
Кстати, с vim я прекрасно управляюсь, но его команды не интуитивны, буквы очень странно связаны с названиями команд, тогда как Geany, особено, после настройки, горячие клавиши соответствуют названиям. А ещё, к примеру, вставка в vim нормально работает только с шифтом (заглавная P, я в курсе), что дико неудобно: базовая операция требует модификатора, а с дополнением — работает без модификатора. Просто офигеть как удобно.
И при этом я использовал vim как полноценную IDE. Правда, приходилось как-то выкручиваться и обходиться без копирования и вставки, потому что эти операции неудобно реализованы. Да, получалось медленнее, чем в том же Geany. Сильно медленнее. Но сильно быстрее. чем в Eclipse и NetBeans, потому что домашняя директория была на сервере, а связь с ним — через коммутатор на 100 мегабит. Это было в период с 2011 по 2012. Так и прыгал между ними.
Physmatik
Много современных редакторов при Стрл+С без выделения копируют строку, на которой находится курсор.
tenzink
У каждого своя история. Я всю жизнь программирую под windows (C++). Оказалось, что для всякой мелочёвки (json, yaml, md, asciidoc, txt, bat, python, ...) последний год использую vim. При этом есть лицензия на sublime text и простаивает vscode. Как-то так оказалось удобнее :)
0xd34df00d
Голым вимом, да, не особо удобно пользоваться. Однако, я пользовался полноценной IDE для плюсов (clion), пробовал полноценную IDE для хаскеля (idea с плагином), и сейчас пользуюсь вимом с плагинами для этого самого хаскеля и еще полутора языков, и не могу сказать, что в виме как-то неудобнее. Даже наоборот, работает стабильнее и отзывчивее, жрет меньше памяти, всякие фишки от интеграции с линтерами до переходов к определению и рефакторингов есть.
csl
А можете все ваши плагины перечислить, в том числе для Agda, Idris (полтора языка это они?)?
0xd34df00d
Типа официальный для идриса (но я на нём уже давно не писал, так что половинка языка — это латех), vim-agda-async для агды (раньше пользовался плагином от Derek Elkins'а, но там надо было мигрировать с питона 2 на питон 3, а это чё-т оказалось сложно для меня; надо бы уже, кстати, оформить свои изменения в виде пуллреквеста), coc для IDE-фич для практически любого другого языка, от хаскеля (через hls) до плюсов (через clangd) до эпизодических окамлей-растов-етц, когда там что-то нужно посмотреть или поковырять. Латех — через vim-latex.
Есть ещё всякая мелочёвка, но она более субъективная.
wormball
О, а не подскажете, как автодополнение в виме сделать? А то я раза два пробовал, но безуспешно.
AndreyHenneberg
Они там как-то делаются, но то, что я видел, работало через ctags, то есть автоматически не дополнялось только что набранными словами и надо было периодически запускать вручную. Тот же Geany хотя бы по открытым файлам сам собирает слова. Могу попробовать найти, если у меня это сохранилось и если такой вариант Вас устроит.
0xd34df00d
Я использую coc, там по ссылке в ридмишке лучше написано, чем если я буду куски своего
.vimrc
копипастить.event1
Я сам пользуюсь емаксом, а не этим вашим новомодным вимом, но тут про общие качества классических редакторов. Итак, классические редакторы лучше тем, что поддерживают 200 языков про которые вы слышали и ещё 500, про которые вы не слышали. Это раз. Дальше, они очень настраиваемые. И при всём при этом, потребляют на 5 порядков меньше памяти, чем эти vscode и idea. Вот прямо сейчас емакс занимает 1,5 Гб VSS с ~1000 открытых файлов, десятком терминалов (неделя аптайма), почтовым и слак клиентами.
AndreyHenneberg
Про VS Code ничего хорошего сказать не могу, ибо крив он до невозможности и не умеет элементарных вещей, а вот IntelliJ IDEA память жрёт совсем не зря. Уж поверьте человеку, который работал ещё с её первой версией, а потом тыкался в PHPStorm и PyCharm. Главное, на что уходит память — автодополнения. Причём, не только тупое автодополнение слов, а автоматическое выстраивание структуры кода (набираешь «for», а IDE сразу дорисовывает всю структуру), полей объекта или классов пакета. А так же отслеживает на лету использование переменных, ругаясь, например, на использование переменной до объявления или неиспользование объявленной. И ещё много чего полезного, для чего надо держать в памяти базу данных по проекту. Всё это экономит просто астрономическое количество времени. Если Вам надо только править конфиги, то тут, бесспорно, выигрывают Emacs и vim, но если в работе проект с сотнями или даже тысячами файлов, то картинка резко меняется. Просто во времена, когда сочинялись Emacs и vim, таких проектом как-то почти не водилось. Они были, но не в таких количествах, чтобы кто-то специально занимался созданием отдельных редакторов под это дело. Обходились конфигурациями для уже существующих.
Xuxicheta
не то чтобы я был любителем, но vscode тоже это умеет, если запущен языковой сервис.
AndreyHenneberg
Он много чего другого не умеет. Сейчас уже не вспомню точно, потому что потыкался, потыкался и оказалось, что Geany может куда больше в плане именно редактирования текста, включая простой доступ к регулярным выражениями. Например, у меня постоянно возникает потребность в преобразовании заголовков HTTP, выдранных из браузера, в питоновский словарь и вот тут без регулярных выражений не обойтись. Или аналогичное преобразование данных POST-запроса. Ну да, я обдиранием сайтов занимаюсь.
event1
Да я и сам когда-то писал на Джаве в IDEA. Редактор хороший, но потребление памяти заоблачное
Емакс это прекрасно делает. Определение ключевых слов во вводе пользователя и предложение дополнить структуру по ключевому слову не должно жрать много, ибо этих ключевых слов и соответствующих структур — пара десятков.
Допустим, в проекте 10к классов, по 20 полей в каждом. Сохранить это всё — 200к строк, допустим, по 64 байта. В сумме 13 мегабайт. Допустим, для автодополнения нужна хитрая сильноразряженная структура, в которой данные занимают 10%. Тогда будет 130 метров. Остальное — нерациональное расходование памяти.
У меня дистрибутив линукса с ядром и не только. Ещё раз повторюсь, 1000 файлов открыто постоянно. Откройте в IDEA или VSCode 1000 файлов и расскажите, какой будет результат
AndreyHenneberg
Боюсь, у Вас сильно упрощённое представление о том, как устроены подобные структуры данных. Да, достраивание синтаксических конструкций требует не особо много ресурсов, а вот работа с содержимым объектов уже начинает потреблять довольно много. Потому что надо не просто один раз всё сохранить, надо постоянно менять эти структуры, исходя из того, что набирает программист, просчитывать, что ему доступно в данном месте кода. В общем, там много чего надо. В целом, Java любит жрать память, тут я согласен. Но она же позволяет экономить время разработки, поэтому и пишут такие инструменты на ней. А открывать 1000 файлов нет необходимости, если можно в любой момент перейти не просто в нужный файл, а к нужному полю или функции любого класса. То есть, по сути, все эти файлы в каком-то смысле открыты и активно обрабатываются по сложным алгоритмам. Которые тоже место занимают.
insecto
А комментарий взяли и заплюсовали, что только доказывает вашу неправоту. Шах и мат!
beeruser
Как бы не так. Я смеялся над людьми, использующими Vim, крутил пальцем у виска…
пока не попробовал и не перешёл на него несколько лет назад с убогих виндовых редакторов — Visual Studio и прочих. Сейчас везде где можно использую Vim/Vim режим.
Ценю Vim за удобство и единообразие на трёх платформах (win/mac/linux).
google_fan
это было бы убедительно, если бы что-то подобное не говорили про vim последние лет 20.
Когда я начинал программировать — в конце 90х, люди в основном сидели в mcedit, far, editplus, в зависимости от платформы, а я решил попробовать vim.
Потом наступила эпоха IDE, в 2001 году вышли Eclipse и Idea и было объявлено что эра просто редакторов закончена, потому что код это не просто текст и понимая код IDE могут предоставлять невиданные ранее Возможности.
Года через 4 стало понятно что потребление памяти растет быстрее, чем предоставляемые Возможности и народ стал подунывать. И тут в 2004 году вышел Ruby on Rail. И люди смотрели скринкасты, где DHH и другие, в пять элегантных строчек поднимали приложение, на которые в, прости господи, EJB и JEE у тебя уходила неделя. И эти люди на скринкастах писали в каком-то магическом прекрасном редакторе который запускался за секунду, а не за две минуты как эклипс. Этим редактором был TextMate. И наступила эра возврата к истокам!
Люди копили на маки и текстмейт, а потом лупили простой код, в простых редакторах и были счастливы. Через пару лет правда авторам TextMate надоело их детище, люди страдали, писали какие-то клоны которые благополучно умирали, пока в 2008 году товарищ скиннер не выпустил Sublime Text, который был OK. И тут же было обьявлено что это The Editor и будущее программирования.
Sublime держался бодрячком лет 7, а потом вдруг оказалось что уровень хипстоты в нем совершенно недостаточен для молодежи. (Плагины на питоне? Никакого веба? Ни капельки javascript? It's sooo 2000s! ). И родился Atom! Electron, нода, плагины на js, все новое — с иголочки, что тут не любить! Новый король под горой.
Параллельно со всем этим память дешевела, закон Мура работал изо всех сил и пользоваться IDE опять стало приемлимо. Idea штамповала плагины для разных языков, захватывала ниши и становилась именем нарицательным. Говорим IDE — подразумеваем Idea.
Пока в 2015 не вышла VSCode и сразу стало понятно — this is it. Вершина ide строения, сочетающая простоту и мощь! Надо срочно переходить.
Я мог бы как и куча моих коллег вокруг, прожить всю эту удивительную историю и попробовать кучу прекрасных редакторов, или как я и сделал, все эти 20+ лет пользоваться vim который развивался, добавлял фичи и предоставлял плюс-минус схожие возможности иногда отставая, иногда нагоняя. Да, раз в 5 лет приходится поправить пару строк в конфиге, чего уж скрывать. Ну или захочется попробовать новый интересный плагин.
Сейчас кстати в виме очередная волна активности, выходит neovim 0.5 с кучей новых плюшек, все воодушевлены и клепают плагины, благо теперь не надо месяц учить vimcode чтобы это сделать.
nick758
Спасибо за ретроспективу.
По моим наблюдениям, как раз во второй половине 90-х широко использовались IDE (tc, bc, bp, позже Delphi, CBulider, VS), средний школьник/студент не представлял, что можно вызвать компилятор из командной строки.
И ещё замечание, VSCode — не IDE, это редактор кода.
AndreyHenneberg
Спасибо, что напомнили про neovim. Давно хотел попробовать, но как-то всё руки не доходили. А с исходным vim-ом беда: как только перестаёшь им пользоваться, сразу вылетают из головы все команды в стиле «это уму не растяжимо, это запомнить надо» и приходится изучать всё заново. Ну и дополнительно радуют базовые команды копирования и вставки, у которых то используемые буквы никак не сопоставляются с названием команды, то базовая функция делается с модификатором, а без модификатор выполняет какие-то дополнительные не запрощенные действия. Надеюсь, в neovim это починили.
google_fan
Это правда, единственный способ поддерживать навыки вима в актуальном состоянии - это им пользоваться. Я не очень понял что за проблемы с копированием/вставкой вы имеете в виду.
Neovim своим поведением не особо отличается от обычного вима. Ну разве что встроенная консоль. Основные отличия внутри - человеческие дефолтные настройки, поддержка асинхронных коммуникаций, что дает возможность нормально пользоваться внешними инструментами из vim, возможность писать плагины на lua вместо vimscript. И вот в последнем поддержка treesitter - что решает давние проблемы vim с подсветкой кода, и встроенную поддержку LSP.
AndreyHenneberg
Вот как раз с поддержанием навыка и проблема: графические IDE, как, кстати, и FAR и прочие подобные, используют общий набор базовых сочетаний клавиш для копирования, вставки, выделения, перемещения между словами и прочие подобные. Да, свои уникальные сочетания есть в каждой IDE, но основные — общие. Да, переходя, например, с Eclipse-based IDE на Idea-based я испытываю неудобства, потому что сочетания, сильно ускорявшие работу, перестают действовать и приходится тыкать мышкой или лазить по меню в поисках нужной функции, при том, что я и в Eclipse уже не помню, где эти функции находятся, потому что использую их через сочетания клавиш. Но я могу сразу начать писать код и делать это достаточно эффективно, потому что автодополнение запускается одним из 4 сочетаний (Ctrl|Alt)+(Enter|Space), если не автоматически, а те самые копировать, вырезать, вставить — это всего два варианта, которые работаю всегда, а чаще всего работают оба. И тут появляется весь из себя уникальный vim, который сочинялся человеком, у которого на клавиатуре не было отдельных клавиш управления курсором, как и клавиш Ins и Del. То есть проблема именно в том, что этот интерфейс не используется больше нигде. Ну да, его прикручивают к IDE (тоже специализированный инструмент и прикручивается каким-нибудь плагином) и браузерам (отдельным расширением), но по умолчанию его нет нигде, кроме самого vim. То есть надо держать в моторной памяти отдельных набор моторных навыков, не совпадающий ни с какими другими и только для одного редактора.
Что касается копирования, то тут надо помнить, какую именно клавишу автор решил использовать. Почем не C? Возможно, она занята, но как-то сильно не интуитивно использовать последнюю букву названия команды. А проблема со вставкой, то ожидается вставка в позицию курсора, а не после него, но для этого надо нажать Shift+P, а не просто P. Если просто P, то вставка будет после текущего символа. Так же и выделение: выделение захватывает символ под курсором, что не соответствует поведению всех остальных интерфейсов, как графических, так и текстовых. И это как раз очень сильно замедляет работу, потому
google_fan
Ну погодите, во-первых я не очень понимаю почему все так напирают на то что у автора не было клавиш управления курсором и контрола. ВСЕ пользователи vim считают что модальный режим это огромное преимущество vim, я вам гарантирую это. И это одна из причин почему этот редактор сохраняет популярность уже больше 40 лет.
Что касается сочетаний клавиш, и в особенности Ctrl-C. Программы которые вы перечислили поддерживают это сочетание, потому что это Window/MaсOS сочетание клавиш, а вышеперечисленные программы это Windows/MacOS программы построенные с использованием фреймворка что предоставляют эти OS. vim не является такой программой.
Тоже странное утверждение. К моменту когда это сочетание клавиш впервые попало в мейнстрим (в 1984 году вместе с первым макинтошем) vi c этими сочетаниями существовал уже 8 лет.
И использование Ctrl-C для копирования было достаточно противоречивым изменением, потому что к этому моменту у Ctrl-C уже было давно установившееся значение - abort. Поэтому консольные программы для linux/dos не могли его использовать.
y - yank
p - paste.
Совершенно разумные сочетания, для, напомню, 1974 года когда никаких стандартов не существовало.
С другой стороны вас почему-то не смущает то что `cut = Ctrl-X` а `paste = Ctrl-V`
Если посмотреть с другой стороны - то унификация редакторов с точки зрения UNIX это странно, потому что с точки зрения unix иметь одновременно несколько редакторов это дикость. Совершенно не unix-way. Если какой-то программе нужно отредактировать текст, то она должа это делать в вашем любимом редакторе. Например если мне нужно сделать git commit в windows, то я кликну правой кнопкой, выберу коммит и мой git client откроет свой собственный редактор текста (безумие!) чтобы я ввел сообщение для коммита. В linux git client запустит мне в таких случаях vim. Это одна из главных идей, стоящих, скажем, за neovim - позволить его легко встраивать в другие программы,
Сложно спорить с тем что в vim куча мелких неконситентностей, и конечно у него совершенно не интуитивно понятный интерфейс. Но у него и нет такой задачи. Интуитивный интерфейс нужен если вы планируете что вашим продуктом будут пользоваться непрофессионалы. Пилоту формулы 1 не нужен интуитивно понятный интерфейс, пилоту А380 не нужен интуитивно понятный интерфейс.
Если я любитель и мне нужно написать одну страничку с формулами в год, я возьму интуитивно понятный word и вставлю там формулу. Если я математик и пишу десятки таких страниц в день годами, то я буду это делать в совершенно не интуитивном latex.
AndreyHenneberg
Я пользователь. И я считаю, что это главный недостаток vim. Кажется, Вы где-то ошиблись в построениях.
Как конечному пользователю, мне несколько параллельно, какой он программой является или не является, мне важно, чтобы ради базовых функций мне не приходилось держать в голове отдельный набор моторных навыков для каждой программы и чтобы они не терялись, как только я перестаю использовать эту программу постоянно. В mcedit есть меню и есть подсказка по функциональным клавишам, а вот vim почему-то такой подсказки не даёт. Про Ctrl+C я согласен, для копирования, вставки и вырезания есть ещё комбинации с Ins и Del. А в сочетании с выделением с использованием стрелок и клавиши Shift выделение, копирование/вырезание и вставка оказываются как раз быстрее.
Внезапно, я это слово впервые увидел именно в документации к vim и сразу забыл, потому что оно в моём активном словаре отсутствует, а операция во всех остальных случаях называется copy.
Странно. Ну так я ими почти не пользуюсь, я использую Ctrl+Ins, Shift+Ins, Ctrl+Del.
Тут Вы сами себе противоречите, потому что для каждой задачи — свой инструмент, выполняющий её идеально. Только не «свой собственный» редактор, а тот, который в большей степени подходит для редактирования таких комментариев.
У болида F1 вполне интуитивный интерфейс: руль, педали, переключатель передач. Принципиально ничем не отличается от обычного автомобиля. Более того, скорее всего, даже педали расположены так же, как у обычного автомобиля, потому что это не может принципиально увеличить скорость реакции, а вот расположение, отличное от общепринятого, как раз может привести к сбою в моторике, для предотвращения чего придётся тратить время, делая сознательный выбор. Аналогично с самолётами: штурвал с интуитивно понятными направлениями вправо и влево, общепринятое «на себя — занчит вверх» и так далее. Куча специальных кнопочек и рычажков? Ну так они специальные и они не требуют мгновенного задействования, в отличии от штурвала самолёта или руля и педалей автомобиля, хоть гоночного, хоть гражданского.
Внезапоно, если мне нужно раз в полгода вставить формулу, я открою графический редактор и нарисую её. А если чуть чаще, то как раз задействую LaTeX, чтобы не париться с не интуитивным интерфейсом MSO, потому что в LaTeX надо просто писать тэги в соответствии с документацией. Просто потому, что формула — это текст, тэги — это текст и я говорю компьютеру словами через клавиатуру, что хочу получить. А вот когда я редактирую текст, я не говорю, компьютеру слова, я делаю это руками, поэтому это моторный навык, а не коммуникационный. Я не хочу объяснять компьютеру словами, какие элементарные действия я хочу сделать. Я хочу, чтобы это было как жест, как перестановка кубиков.
Mox
Спасибо за этот коммент, ровно все таки и было, и с vim я перешел на TextMate, и точно также охреневал с видосов DHH и скорости разработки на Rails, и вот в итоге сижу в VSCode.
mspain
>Сейчас конечно набежит толпа фанатов
Нет, тут много тупых — они тебе плюсиков насували )
>В задачах «отредактировать одну строчку в конфиге» «писать огромную программу с нуля»
Других задач не бывает? ) Я например постоянно редактирую гигантские файлы (10-30 гиг) по ssh сразу на сервере. Ты наверное и слова такого не знаешь, мой графический друг.
Уверен, что есть десятки разных задач где vim разрывает ms word (или что ты там рекламируешь )
Jogger
Да-да, конечно, кроме вас никто «сакральным» знанием про ssh не обладает.
То, что вы редактируете файлы >10гиб в текстовом редакторе говорит об одном из двух:
1. ваша сфера настолько узкая, что туда и кончик ножа не засунуть
2. вы применяете инструменты не по назначению, и вероятно более эффективно было бы использовать что-нибудь вроде sed с регулярками.
Сравнение с ms word это вообще признак того, что вы не понимаете, о чём говорите. Давайте ещё с photoshop сравним, тогда найдётся ещё больше задач, с которыми vim справляется намного лучше.
sadsnake42
Я относительно молодой разработчик, который не застал нафталиновых времен, но перешел с ваших свистящих IDE на (neo)vim+плагины несколько лет назад. И более всего меня удивляет категоричность таких высказываний. Такое ощущуние, что это какой-то комплекс, ибо других причин говорить что инструмент не нужен, что нет причин им пользоваться и что вообще «если вы минусуете, это доказывает мою правоту» — я не вижу (вас не заставляют на нем писать на работе?). Можно посмотреть статистику использования vim плагинов для разного ПО, можно посмотреть как развивается сами vim-like продукты, можно просто посмотреть публикации по теме и активность комьюнити. Кому-то нравятся возможности легкого расширения функционала, кому-то концепция режимов, кому-то удобны hotkey из коробки. Я когда-то перешел с clion, ибо мне не хватало настроек для сложных случаев (и под конкретный проект).
Сейчас пойду в статью про Visual Code и начну им рассказывать, что их инструмент не имеет никаких достоинств, ибо все что у них есть 1000 лет уже есть в vim\emacs и вообще трухакеры пользуются только терминалом, а все эти ваши окна для последних юзеров. Может тоже понаставят "+"-ов.