Pull to refresh

Comments 370

Vim позволяет тому, кто умеет им пользоваться, значительно ускорить работу с кодом.

ПО сравнению с какой программой? nanо, блокнот? НЕ сказал бы что у меня есть проблемы с скоростью написания кода. скорее проблемы с скоростью понимания но скакать по вкладкак довольно удобно и мышкой. а клавиши Page Up Page Down помогают делать это быстро
НЕ сказал бы что у меня есть проблемы с скоростью написания кода

Ну так тут и не утверждают, что у вас есть проблемы с написанием кода.
Написано же: ускорить работу с кодом.
Как вим может хотя бы сравниться по скорости (я уж молчу о каком-то ускорении) в хотя бы такой банальной, но крайне нужной при чтении кода операции, как клик по имени функции/метода в идешечке?
Ну вы кликаете не мышкой, а комбинацией gd. Мышку при этом брать в руки не надо.
Да, но сначала надо довести курсор до названия, а это уже чисто физически дольше. Есть, наверное, команда для поиска по названию, но если между курсором и нужным методом есть похожий текст — это поможет плохо.

А если надо в обратную сторону — какой будет вимовский аналог «show usages»?
это довольно быстро. Слэш набираете и далее то, что ищете
/это_ищу

Если похожее, то жмёте «N».
А реальное преимущество перед мышью будет тогда, когда вы ищете то, что за пределом экрана.

Ну прям как Ctrl+F, чудеса. Жаль, что vim найдёт аналогичные строки и, например, в комментариях. Или, например, если я хочу посмотреть все использования переменной i внутри цикла (и у меня есть другие циклы с такой же i) — vim будет искать аж по всему документу. Какая досада.
Ну хватит уже осуждать то, в чем не разобрались. В ВИМ полно вариантов для поиска внутри строки, файла, абзаца, фукнции и т.д.
И в целом проекте (размазанном по куче файлов) он тоже ищет?
А если у меня одна переменная перекрывает область видимости другой — он тоже это корректно обработает?
И в целом проекте (размазанном по куче файлов) он тоже ищет?

Ну да. 7 лет назад я отлично изучал с помощью него кодовую базу django.
А если у меня одна переменная перекрывает область видимости другой — он тоже это корректно обработает?

Допускаю, что не для всех языков, но на C и Python с парой дополнений это делалось.

А зачем средствами редактора текста делать то, что является задачей IDE?

Вот именно. Зачем вообще использовать vim для работы с кодом, когда это задача IDE? Конфиги — допустим, но код…

А код это всегда 100500+ строк размазаных по сотням файлов?

Не всегда 100500 строк в сотнях файлов, но зачастую хотя бы тысяча строк в десятке файлов.

Ну мне повезло. Тысяча строк в десятке файлов меня не ставит в тупик.


IDE безусловно удобная вещь, это ещё не говоря о языках/платформах где без неё вообще не возможно что-то вразумительное сделать. Например, разработка под Андроид.


Честно, я не понимаю вашего негатива в сторону vim. Может всё-таки разрешите людям использовать удобные им инструменты?


P/S. Тут ещё emacs фанаты не набежали, они бы вам рассказали про правильное сочетание клавиш.

Да редактируйте хоть sed'ом если вам так удобнее. Просто vim-фанаты обычно:
— Вот я попробовал vim и трава стала зеленее, а сахар — слаще. Короче, vim — лучше, чем любое другое средство редактирования, все переходите на него, карма очистится (даже на Хабре).
— Чем лучше-то?
— Чем другое средство редактирования.

А, ну это уже классика. Переход с обсуждения инструмента на его фанатов.

Не-не-не, вы прям сейчас посмотрите комментарии под этой статьёй (или любой другой про vim): все любители vim'а его прям боготворят, а как дело доходит до «всё равно лучше использовать IDE», так сразу «ничего не знаю, vim — это блокнот + схема управления». Потому что он и есть блокнот со своей схемой управления.

Нет ну сравнивать vim и блокнот (я так понимаю классический notepad.exe) совсем странно. Vim вполне можно допилить с помощью плагинов до "почти" IDE. Тем более что сейчас существует LSP. Да и сочетания клавиш можно запилить любые. Есть даже извращенцы которые Emacs mode делают.


Vim корректнее было бы сравнивать с тем же Emacs, Sublime text (тоже кастати был очень популярным с армией фанатов), Notepad++ (на винду всегда ставлю).

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

это абсурд, это ты привык думать в контексте vim, а не он такой удобный. Я пользуюсь vim когда нужно что то совсем небольшое поправить на удалённой машине, для этих задач он неплохо подходит, но ни чем не лучше nano или mc для тех кто привык работать с ними.
Но автор заявляет что VIM магическим образом позволит очень сильно ускориться при работе с кодом после глубинного понимания этой «волшебной» утилиты. Но это полный и бездоказательный бред. Единственный обоснованный плюс vim это наличие данного редактора на 99% posix платформ.
И мне абсолютно не понятно зачем из буханки хлеба делать автобус, а потом ещё и учиться его водить.

Наличие команд ускоряет работу с текстом
В нано нет команд
В вим есть


Банальный пример, получить буст в скорости работы можно, перейдя с нано на вим и зная только лишь, как работает команда delete. Ситуации, когда необходимо удалить большое количество строк в каком нибудь конфиге, возникают очень часто, и в nano вы 20 раз нажмете ctrl+k, а в vim — выполните простую d20d. Одна только эта мелочь может сэкономить десяток секунд жизни. Из таких мелочей и складывается магическое ускорение работы. Когда знаешь и применяешь кучу возможностей вим, это становится реально заметно

Как-то странно Вы скорость сравниваете. Где оценка времени на ТОЧНЫЙ подсчёт строк, которые надо удалить? Если их штуки три, выгоды нет, если штук двадцать девять — уже надо точно знать, СКОЛЬКО. Ошибся на одну — и никакого тебе преимущества. В классическом же редакторе я выделю строки почти не глядя, за исключением крайних строк. И удалю скопом


Мне это напомнило анекдот, извините.


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

P.S. Я не против vim, честно. На днях по приколу часа два в нём просидел, работая над примерами кода, и даже не заплакал ни разу, почти понравилось. Раздражали только длительная (четыре клавиши, Карл! Esc, :, w, Enter) команда сохранения файла и отсутствие сохранения по потере фокуса. Автосохранение по таймеру не предлагать, укушу.


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

:set relativenumber и ничего не надо считать. Вумная система сама покажет сколько строк от текущей строки. Как вниз, так и вверх.

d20d


Я, например, очень плохо измеряю на глаз, 20 строк надо удалить или 21. У меня так:

d20d
#fuck
u
d19d


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

1. есть 100 других способов это сделать, включая подключение по sftp и редактирование хоть в visual code
2. то что это ровно «20» срок совсем не очевидно, это ещё нужно напрячься посчитать

да и вообще для редактирования конфигов на сервере я сам всегда использую vim и не вижу тут смысла спорить так как ни одним другим редактором я и не пользуюсь для этих целей. Но речь идёт именно о редактировании кода на локальной машине.
Простите что вклинился, но я у себя в нано выделяю область и только потом уже удаляю, можете мне подсказать что я делаю не так??
Всё так. А если нужно выделить область между скобками (функцию в С/С++, массив, или кусок структурированных данных в пару мегабайт)?
Не спорил с удобством вима или превосходством нано — просто был удивлен тому что надо нажимать 20 раз сочетание клавиш, вместо выделения области и удаления её

а как вы выделяете без нажатия на кнопки?
если имеется в виду выделение мышкой, то перенос рук туда-сюда ещё хуже

В плюсах, когда базовый класс в одном файле, класс-наследник в другом — так и получается.
В обычном C, когда функция описана в одном файле, а используется в другом — тоже.

Затем, что именно редактиировать код в Vim на порядки удобнее чем в "традиционном" редакторе. У меня просто под Visual Studio стоит плагин VimVs, а под VS Code стоит VSCodeVim, и я могу одновременно, не переключаясь использовать все преимущества и фичи и того и другого.

Зачем вообще использовать vim для работы с кодом, когда это задача IDE?
Вы говорите так, словно IDE не содержит редактор, а у вим нет плагинов, превращающих его в IDE.

Посоветуйте для python, пожалуйста. Нужны autosuggestions и справка, запуск и отладка внутри vim.

vim-lsp (или любой другой lsp клиент) — вот все что умеет lsp сервер, то будет и у вас, плюс сразу поддержка других языков. Go, C/C++, Rust, Python, etc.
Для деббага есть DAP — но еще сырое. Лично я больше на Go пишу и для деббага использую vim-delve.
Думаю для python тоже что-то есть.

Смотря про какой язык речь. Тонны бойлерлейта Java/C# действительно, наверное, удобнее ворочать в IDE.


Навскидку во всех без исключения остальных языках — хорошим разработчикам IDE только мешает.

А как вы сравниваете IDE и Vim? Можно пользоваться Vim для конфигов, и IDE с Vim плагином для кода, и использовать все плюшки мира)

Есть такая вещь как easymotion и подобные, позволяют довольно удобно навигироваться по коду без мышки.

Спуститься в реализацию метода, он же show usages, если используется в определении метода: gd
Обратно: Ctrl — o

А как курсор-то поставить на нужное место? Двигать курсор — медленно, поиском — тот еще костыль.
Можно по номеру строки:
:<номер строки>

но обычно в vim курсором перемещаются по файлу, поэтому проблемы, что курсор неизвестно где — не возникает, он уже итак где-то рядом с названием метода
номер_строки g

;)
Ту же команду можно закодировать по разному. Забавно.
А когда есть 10 разных наследников на который из них оно меня приведёт? Или если нужно увидеть всех кто унаследовал этот класс? а какая команда развернёт C++ макрос? И самый главный вопрос дебажить код надо принтами или для реализации выпадающих списков при просмотре локальных переменных в точке останова тоже есть плагин?

И вы действительно кликаете?
В любой нормальной IDE для этого есть горячие клавиши. В IDE от JetBrains это Ctrl-B, например.

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

Симулятор, что ли, запилить, чтобы показывал случайный кусок кода и мерял затраченное время…

Кликни мышью на конец файла в полтыщи строк, а я посмотрю. И поприкалываюсь. Для упрощения задачи можешь даже заранее руку на мышь положить. :))

Ухватить мышью прокрутку, потянуть вниз до конца экрана.
Прокрутить полосу прокрутки в конец — 1 секунда. Кликнуть — ну, пусть ещё одна (хотя наверняка меньше). 2 секунды максимум. За две секунды vim-пользователь нажмёт свои 1-2-3 (или сколько там надо) клавиш и будет с пренебрежением смотреть на мышеюзера всё оставшееся время, аж целую секунду. О ужас. Секунду!
А как в виме выгляжит команда «перейти на вызов именно той функции, которая мне нужна, хоть я его еще даже не вижу на экране и про него вообще пока не знаю»? Это охренительно полезная штука, я ради нее одной готов ночами вим изучать.

А как это выглядит в ${IDE}? Запишусь в очередь на изучение ;)

Я это к тому, что пассаж про конец файла в полтыщи строк вообще непонятно о чём. Зачем может быть нужно кликать неизвестно куда? Если я хочу посмотреть функцию, значит, ее вызов уже есть на экране.

Ёмоё. Я уже устал писать. Я почти все время работаю в Visual Studio с плагинонм VsVim. Если мне надо перейти на начало/конец файла, то я нажму gg или G, если мне надо вырезать или скопировать строковой литерал, то я нажму dia или yia, и т.п., если же мне надо перейти на определение/реализацию/использование метода, то я просто нажму F12, или Shift-F12, или Ctrl-F12 (шорткаты Visual Studio), вот и все. Мне же в ответ все время пишут: "Если используешь vim, то значит отключай нах совсем мышь и ***дуй в свой vim". Разговор с глухим.

Это везде есть.
«перейти на вызов именно той функции, которая мне нужна, хоть я его еще даже не вижу на экране и про него вообще пока не знаю» — это оно разве?

Перейти на вызов функции (а их может быть несколько), хоть он даже не видит его на экране и вообще про него не знает. Оно.

>> Это везде есть.
В vscode, помню, не нашел как ни старался.
Значит не везде ;)
qtcreator, pycharm это тоже умеют.
vscode — тот ещё универсальный комбайн с кучей плугинов. Почти как vim :D

Охотно верю, я к тому, что перейти в конец файла в любом редакторе займет столько же времени, как и в vim.


Я как-то пытался освоить vim, но для себя я решил, что он того не стоит. На его изучение нужно потратить довольно большое количество времени, а выгода непонятно когда наступит, учитывая что для большинства vim-овских команд в IDE (я сейчас, в основном, использую IDE от IntelliJ, но и в других будет +- также) есть свои аналоги — комбинации клавиш. И судя по всему, таких как я большинство.

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

В этом случае можно часто используемым командам назначить комбинации из клавиш, которые есть на клавиатуре

Да чего уж мелочиться, давайте сразу придумаем что-то типа RCtrl+LShift+Numpad* — RCtrl+RShift+Alt+Esc — LCtrl+LShift+AltGr+Win+S. Для сохранения файла, например.

Да зачем придумывать. Вон, в Visual Studio дефолтно, например, "Open folder" — Ctrl-Shift-Alt-O, "SQL Explorer" — Ctrl-\-Ctrl-S. Чрезвычайно удобно, и, главное, что очень легко запоминается.

А как в vim папку открыть, простите? Или «он же редаааактор, только с одним файлом умеет» опять? Почему вы не привели в пример просто открытие файла, которое везде (в современных графических приложениях) Ctrl+O?
И как часто вы папку открываете? Раз в день? 2 раза?
Так же как и файл?
А, пффф, так и в VS папка и файл открываются одинаково мышкой через «Файл».
Ну не знаю, Shift+; e <пробел> против Ctrl+O? На мой взгляд, в vim надо больше клавиш нажать.
Но как мы уже выяснили раз 20, наверно: если вам нравится нажимать больше — нажимайте больше (в обе стороны работает).

Ага. Только, вот, после Ctrl-O еще надо хвататься за мыш и по диалогу елозить прицеливаясь куда надо.

После Ctrl+O фокус ввода уже находится в поле для имени файла. Если у вас открыта нужная папка — точно так же вводите MyFile.txt (и окошко вам даже подскажет, можете стрелкой на клавиатуре выбрать) и нажимаете Enter для непосредственно открытия.
vim быстрее только там, где работа с текстом автоматизируется. При наборе текста число нажатий на клавиши везде одинаково.

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

И сколько раз мне стрелку жать, вместо одного таба, чтобы файл выбрать?

Столько же, сколько и Tab, в том числе если набранные символы являются началом имени только для одного файла — одно нажатие на стрелку.
upd: Хотя Tab же наверняка дополняет имена аналогично bash'у? Тогда Tab в некоторых ситуациях чуть выгоднее
Ctrl+End. Не мышью, конечно, но и vim для этого учить не надо

Зачем учить какой-то Ctrl-End. Мышью ведь удобнее протянуть ползунок в самый низ.

конечно, это ведь нужно прочитать где-то, что Ctrl+End, время потратить

И вы действительно кликаете?

Да, действительно. Все ищу способ, как бы еще одну мышь подключить под вторую руку. И тогда вообще можно будет еще и код писать на экранной клавиатуре. :)))

  1. Перенастройте клавишу Caps Lock (но это необязательно)

Caps Lock действительно самая бесполезная клавиша, но лучше на нее повесить переключение языков, если вы «счастливый» носитель кириллического языка, конечно же.

Ну нет, нет же!


/sarcasm on
Caps Lock надо переназначить на LCtrl/LControl (потому что emacs-ом надо пользоваться.)
/sarcasm off,


а нижнюю левую (у меня это fn) — уже на переключение языков.


Еще можно нижнюю левую на один язык, а нижнюю правую пожертвовать для другого (и наклеить на них аутентичные надписи ЛАТ/РУС.)

Menu — переключение на En
Shift-Menu — переключение на Ru
И индикатор текущей раскладки становится не нужен!

На макбуке у меня настроен так, чтобы при обычном нажатии Caps Lock она работала как Esc, а в комбинации с другой клавишей — как LCtrl. По мне удобно.
Кстати, LCtrl на месте капслока — место довольно каноничное. У меня такая вот клавиатура завалялась:

тыц

Тут та же петрушка: Control (СУ) под мизинцом, внизу раздельные переключатели раскладки. Умели ведь!


Кликми

image

Так еще и английские буквы стояли там же, где похожие русские, и можно обойтись без дурацкой qwerty.

Вот да! Помню, был у меня электронный словарь с фонетической клавиатурой (только обратной — от QWERTY) и это было чертовски удобно.

Не напоминайте мне об этой боли. Из-за этого мне пришлось, в срочном порядке, изучать ассемблер, по книжке Питера, нашего, Нортона. Потому что с такой раскладкой, без резидента переназначающего клавиши, играть на Искре 1030 в любимых леммингов (управление как на спектруме — qaop) не было ну совершенно никакой возможности! ;-)

У меня и сейчас такая, но без надписей. Вот фото из сети
Заголовок спойлера
image
У меня четыре языка, так что не вариант. Чтобы однозначно переключиться на нужный, я повесил каждый язык на сочетания ctrl+1, ..., ctrl+4. То есть, не глядя ни на клавиатуру, ни на монитор, я могу однозначно выбрать язык, на котором пишу.
И что вешать на капслок пока не очень придумал.

Четыре, это жестко.
никогда так не замочивался, трех хватало, особенно мило когда хотя-бы один RTL язык.
А Ctrl+num это жеш табы терминала, не?

Caps Lock совершенно точно не самая бесполезная клавиша. Клавише Fn это звание подходит гораздо больше. Или, если выбирать среди клавиш с индикатором состояния, то Scroll Lock.

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

Бесполезных клавиш много разных. Только расположены они обычно не самым удобным или постоянным образом, чтобы на них вешать что-то полезное. Иногда они оказываются не такими уж и бесполезными.
Fn во многих случаях не выходит за пределы самой клавиатуры (в смысле невозможно детектировать нажатие и отпускание программно, поскольку клавиатура не порождает код нажатия или отпускания сразу после Fn, только если после нее, соответственно, нажать или отпустить другую клавишу). Кроме того без него иногда недоступны PgUp, PgDn, Home и End. Да и всякие полезности через нее часто работают вроде управления яркостью экрана и громкостью звука, включением-выключением тачпада и т.п… А еще ее иногда вообще на клавиатуре нет.
Scroll Lock часто расположен нестандартно (искал на своей клавиатуре, нашел — Fn+F12). На другой клавиатуре вообще не нашел.
Не зря то же переключение раскладок часто вешают на Ctrl, Alt и Shift в разных комбинациях. Только это порождает свои проблемы, поскольку данные клавиши часто задействованы в других комбинациях, что часто приводит к спецэффектам (часто встречаю — MS Word, переключение по Alt-Shift, сразу после переключения раскладки часто переводит в меню, после чего клавиши с буквами приводят к выбору различных пунктов меню, когда безобидно, а когда и что-то серьезно-неприятное может произойти).
Вот и получается, что CapsLock единственная "ненужная" клавиша, которая находится в подавляющем большинстве клавиатур на одном и том же месте, реально используется по назначению крайне малым количеством людей, почти не задействована в популярных и стандартных сочетаниях клавиш, иногда еще и состояние на клавиатуре подсвечивается. В результате прямо просится на место переключателя двух раскладок (при желании можно и трех, но это немного сложнее и не так удобно).

Caps Lock совершенно точно не самая бесполезная клавиша. Клавише Fn это звание подходит гораздо больше. Или, если выбирать среди клавиш с индикатором состояния, то Scroll Lock.

Ага. Особенно на ноутбуке, где, у меня, например, тот же Ins без Fn вообще не нажать. А переназначать Esc на ScrLock смысла нет, так как ScrLock удалена от букв еще дальше.

позволяет пользоваться в браузере клавиатурными сокращениями Vim, отвечающими за перемещение по документу (H, J, K, L и так далее).


Ну, вообще-то в наше время, в отличие от тех времен когда их вводили, уже и на всех клавиатурах есть стрелки и pgup-pgdn, и сам вим научился их понимать…

"… вы что, до сих пор жарите сосиски на той маленькой сковородке?"

С одной стороны — да, а с другой у клавиш управления курсором те же проблемы, что у мышей:


  1. Надо убирать руки с «основной» клавиатуры.
  2. Местоположение не стабильно.
Учитывая тоннельный синдром, необходимость постоянно менять положение рук — это благословение, а не проблема.

Перерывы и разминку надо делать, а не полагаться на полумеры

Перерывы по определению короче, чем время работы. И перерыв можно пропустить, а работу — нет.

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

Смысл HJKL в том, что эти символы рассчитаны под правую руку в её дефолтном положении на клавиатуре. Они требуют минимум движений из дефолтного положения, и, соответственно, минимум времени. Стрелки требуют больше.

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

жарю. У меня нет стрелок, решил тут по старой памяти взять полноразмерную клаву — очень неудобно.
Использую капс плюс qwe asd zx для навигации, получается прям быстрее.

Это не столько vim научился их понимать, сколько терминал

Использование Vim как среды для разработки без плагинов невозможно. Так что, основная сложность тут будет мэйнтейнить персональный конфиг на 500+ строк. Примерно поэтому, когда я понял, что солидную часть времени я трачу не на собственно работу, а на настройку Vim, то ушел на VSCode. Даже на серверах его использовать уже не особо хочется.


Жаль, что даже в рамках Neovim мало что меняется. Поддержки PCRE нет и не предвидится. Удаление текста как было реализовано через одно место, так и осталось. Мультикурсор только через сторонние плагины. Унылый VimL с его глобальной областью видимости и т.д.

Есть варианты. Например сам vim я пользую только в консоли для быстрых правок. Для написания кода безусловно удобнее использовать IDE. Но к счастью одно другого не исключает и существуют плагины для большинства редакторов позволяющие внедрить самую востребованную функциональность vim. Такие же плагины есть и для браузеров. Добавляем к этому i3wm с vim подобными хоткеями и практически полностью отказываемся от мыши(изредка использую touchpad).

а мне это нравится, мейнтейнить конфиг на 500+ строк, я вот прям удовольствие получаю, когда оптимизирую свой конфиг. Тоже самое про весь мой сетап — tmux, dwm, mutt, etc.

Использование Vim как среды для разработки без плагинов невозможно. Так что, основная сложность тут будет мэйнтейнить персональный конфиг на 500+ строк.

500+ строк — это фигня.
У меня скрипты на javascript для Notepad++ (плагин jN) по объему к 400 кб. приближаются. В самом большом, реализующим Intellisense для js, vbs, php Intell.js — сейчас 3,5к строк. И все равно эта хрень довольно часто ошибается. :( Надо бы доделать.
И в итоге функций не так уж и много добавил:


Заголовок спойлера

Скрипты->Список функций Ctrl+1
Скрипты->Перейти к определению F12
Скрипты->Вернуться назад Ctrl+-|Alt<-
Скрипты->Пойти вперед Ctrl++|Alt->
Скрипты->addToHistory..print
Скрипты->Tags navigation
Скрипты->Tags navigation->Перейти к тегу на выбор Ctrl+Shift+3
Скрипты->Tags navigation->Список тегов script Ctrl+4
Скрипты->Список объектов (Intell.js) Ctrl+2
Скрипты->Список объектов тек.файла (Intell.js) Ctrl+3
Скрипты->
Скрипты->Включить отладку Intell Ctrl+Shift+F9
Скрипты->Intelisense run ctrl+I
Скрипты->Intellisense (вкл/выкл) ctrl+F8
Скрипты->Перечитать шаблоны
Скрипты->UntilMenu
Скрипты->UntilMenu->UntilMenuCut
Скрипты->UntilMenu->UntilMenuCut->Comment selection Ctrl+/
Скрипты->UntilMenu->UntilMenuCut->Удалить строки длинее N Ctrl+Shift+K
Скрипты->UntilMenu->UntilMenuCut->Обрезать строки длинее N
Скрипты->UntilMenu->UntilMenuCut->testCMakeParser Alt+T
Скрипты->UntilMenu->Разбить строки на сегменты по 110 симв. Ctrl+Shift+S
Скрипты->UntilMenu->Удалить пустые строки Ctrl+Shift+E
Скрипты->UntilMenu->VimComplete Ctrl+L
Скрипты->UntilMenu->Сортировать строки
Скрипты->UntilMenu->Сортировать строки Desc
Скрипты->Закрыть окно сообщений Ctrl+Shift+Q
Скрипты->Templater Shift+F12
Скрипты->
Скрипты->Скобки
Скрипты->Скобки->Вставить последние 'скобки' Ctrl+B
Скрипты->Скобки->Выбрать и вставить 'скобки' Ctrl+Shift+B
Скрипты->Скобки->Выбрать и вставить 'скобки'-2 Ctrl+Shift+V
Скрипты->Скобки->
Скрипты->Скобки->Вставить скобки каждой строке
Скрипты->Скобки->
Скрипты->Скобки->Открыть каталог настройки
Скрипты->Форматировать
Скрипты->Форматировать->Форматировать Ctrl+Y
Скрипты->Форматировать->Открыть конфигурацию tidy
Скрипты->Форматировать->MinifyCSS
Скрипты->Форматировать->Форматировать *.html (тек.дир) Ctrl+shift+Y
Скрипты->
Скрипты->Time addition(2.45+20 = 3.05) Ctrl+Shift+D
Скрипты->Eval selection Ctrl+Shift+C
Скрипты->sWaper Alt+W
Скрипты->en/decode URI Ctrl+F6
Скрипты->Punto switcher F6
Скрипты->Text processors
Скрипты->Text processors->Combine lines into paragraphs Ctrl+Shift+A
Скрипты->Text processors->Объединить текст в строку Ctrl+Shift+P
Скрипты->Отфильтровать текст по выделению Ctrl+Shift+L
Скрипты->
Скрипты->Тест квадратной скобки Ctrl+[
Скрипты->Translate…
Скрипты->Translate...->getWordTranslation Alt+F11
Скрипты->Translate...->
Скрипты->Translate...->To мessage
Скрипты->Translate...->Append selection
Скрипты->Translate...->Reaplece selection
Скрипты->Translate...->
Скрипты->Translate...->Edit translate file list
Скрипты->Translate...->
Скрипты->Translate...->E:\Utils_Dicts\001.txt
Скрипты->Translate...->E:\Utils\Qdictionary7\Dicts\enrus.dic
Скрипты->Translate...->E:\Utils\Qdictionary7\Dicts\rusen.dic
Скрипты->Translate...->E:\Документы\Литература_English\Словари\001-Словарь.txt

Помимо ZZ есть еще, не менее удобная, ZQ которая завершает vim без сохранения открытого файла.
Помнится, когда я первый раз попал в Vim — я как минимум полчаса разбирался, как из него выйти. Какое сочетание клавиш не нажмешь, комп только квакает и ничего не происходит((( «Как выйти из Vim » — самый популярный запрос в гугле про Vim
Если бы добрые люди не подсказали, застрял бы в нем навсегда.
Это как до такого додуматься — «esc ->: -> q»

у меня это решалось проще: перезапуском компьютера :)

Кстати, да, прочитал. Лет через 5 после своих попыток освоить VIM.

И он останется висеть в списке остановленных, пока вы не fg'шнете его
kill -9 достаточно эффективно убивает.
Да, это не самый лутший способ выхода из vim, но мне помогло ;)

Да я 10 лет в vi работаю! Просто не знаю как из него выйти.

на самом деле, Николай Васильевич Кнут не сжигал четвёртый том искусства программирования, а случайно удалил его, пытаясь выйти из vim ©
Еще как пользуюсь. И для правки конфигов, и для мелкого программирования, во студенчестве делал в нем (в связке с LaTeX) курсачи, презентации и писал диплом. Почта, кстати, тоже на нем вместе с mutt. В браузере vim-образный tridactyl. В общем, зависимость этот редактор вызывает жуткую.

Кстати, по поводу стрелочек (клавиш управления курсором) и hjkl. Мало того, что до стрелочек надо руку отрывать от алфавитно-цифрового блока, так еще и на многих ноутах они могут быть размещены совершенно «дизайнерским» образом.
В браузере vim-образный tridactyl.

Я поступил радикальнее. Поставил qutebrowser


так еще и на многих ноутах они могут быть размещены совершенно «дизайнерским» образом.

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


Клавиатура для морожнопалочковопальцевых

macpooke

Лет 10 тому назад, я активно пользовался conkeror'ом. Потом был uzbl.

Главная проблема таких браузеров в том, что средства для подавления нежелательного контента сильно уступают таким вещам как ublock, umatrix, privacy badger etc.

И если 10 лет тому назад с этим можно было мириться, завернув браузер через squid с тем же rejik'ом, то сейчас всякой динамической гадости и трекеров стало несоизмеримо больше.

Потому пользуюсь обвешанной лисой. Благо, что хоть возможность худо-бедно изменять интерфейс через userChrome.css еще сохранилась.

В qutebrowser встроенный адблок. Особой разницы, по сравнению с той-же лисой или brave, не заметил. Единственное что немного печалит, так это отсутствие интеграции с KeePassXC. Но ничего, будет время, порефакторю свои workflow скрипты для i3wm, заодно попробую прикрутить keepassxc-cli к браузеру.

Главная претензия к встроенным adblock'ам — отсутствие element-hider'a. То есть, хочется иметь возможность вручную вырезать мешающий элемент, не полагаясь только на списки.

Вместо keepass, по старинке, пользуюсь связкой текстовика, gpg и grep.
Vim — это один из примеров hard to learn, f**king hard to master. И если его использование для редактирования каких-нибудь конфигов на сервере я ещё могу понять (хотя у вас что, даже mc не стоит, что вы не можете более человеческий mcedit использовать?), то программировать в нём… Да будь он хоть трижды быстрым блокнотом, я думаю всё равно медленнее, чем пишу, а писать всё равно стоит в IDE из-за навигации, контекстного поиска, интеграции с отладчиком и т.д.
А уж vi-расширения для браузеров — это, простите, что-то вида «я не смог адаптироваться к графическому миру, поэтому использую клавиатуру».
Но к счастью во многих больших IDE есть поддержка vim-mode. Это по крайне мере msvc и PyCharm. Вроде и в VScode есть, но я им не пользуюсь.
И представляю насколько уныло бы было без этих плагинов.

Так что всё хорошо вместе.

А про mcedit не понял:
Если там нет vim mode, то на кой леший он нужен? Это же неудобно.
А если есть? То на кой леший он нужен? Это же бессмысленно.

Если там нет vim mode, то на кой леший он нужен?

А на кой везде нужно пихать vim-mode? Родные средства навигации — это что-то плохое? Почему вы (и другие) считаете, vim такой мегаудобный — потому что «я потратил неделю на изучение этих сочетаний клавиш, теперь хожу и выпендриваюсь»? Или просто вы не в состоянии использовать что-то другое? Адаптируетесь плохо, например.
Может, вы к смартфону тоже подключаете внешнюю клавиатуру, чтоб и там использовать vim-комбинации?
А чего так пригорать-то?

Что такое родные средства навигации? Родные для кого?

Vim действительно удобный. И в некоторых (в большинстве) OS после установки (ещё без пакетов) в системе гарантировано есть vi (даже не vim). И какие-то настройки нужно призводить именно так.

Зачем нужно изучать «родной» nano, mcedit и пр. со своими поистине интригующими новыми очень родными свойствами?

Vim находится в актуальном состоянии, под множество ОС, действительно очень удобен.
Никто его не превращает в IDE. Но поддержка в самих этих IDE vim режима намекает, что это довольно востребовано.

Родные для кого?
Для той программы, которой вы пользуетесь.
И какие-то настройки нужно призводить именно так.
Ну да, ведь мы же так часто пользуемся чистыми ОС приличный срок, и лишь потом dnf/apt-get install stuff.
Зачем нужно изучать «родной» nano, mcedit и пр.
Вы не поверите, но основные команды там прям на экране написаны, даже изучать не надо, достаточно просто в экран посмотреть.
Но поддержка в самих этих IDE vim режима намекает
Поддержка мыши или общепринятых Ctrl+X/C/V/F/H тоже намекает, что они очень удобны. А ещё они работают в гораздо большем количестве приложений сразу, без конфигурации.
Для той программы, которой вы пользуетесь.

Нет, для меня. Для той программы что я пользюсь запилили плагин с vim-mode. Это плохо?


Вы не поверите, но основные команды там прям на экране написаны, даже изучать не надо, достаточно просто в экран посмотреть.

Зачем, если есть родной vi/vim?


Поддержка мыши или общепринятых Ctrl+X/C/V/F/H тоже намекает, что они очень удобны.

Конечно удобны и главное привычны, так или иначе но Windows занимает 90+ процентов дестктопа.


А мне за 20 лет работы с Unix системами + X удобно то, что выделение сразу в буфер обмена копирует и фокус ввода за мышкой следующий.

Это всё звучит как смесь стокгольмского синдрома и синдрома утёнка: «Я страдал, пока учил, но теперь я без него не могу жить. Поэтому хочу, чтоб он был везде»

Это у вас какой-то синдром, что вы пытаетесь доказать людям для которых vim удобен, что он неудобен.


Желание сохранить удобный и привычный интерфейс это как раз нормально. Иначе бы не было столько плача про "Как плохо сделали в Win10 интерфейс".

Скорее «желание натянуть привычный интерфейс на всё, что запускается», потому что если для тех же IDE ещё можно понять, то для браузеров…

Про браузеры вам расскажут люди которые этим занимаются.


Лично я начал полноценно осваивать браузеры параллельно с vim. Поэтому привык к их интерфейсам. Так же и с MS Office, LibreOffice. Вообще нет проблем. Даже с Windows особых проблем нет, кроме упомянутого выделения — копирование в буффер обмена.


А вот с IDE, да. Прямо как собака Павлова — вижу код, значит :wa! Потому что работаю чаще c vim чем с IDE, поэтому и выход — установить vim плагин.

UFO landed and left these words here
Если ты даун, то и не поймешь никогда
Фу, как грубо. А самое главное — каково ваше обоснование? «Все вокруг мышеюзеры, а я — д'Артаньян»? Для себя можете хоть бинарно команды в USB отправлять, кнопка нолика под мизинцем правой ноги, а единички — под языком. Но оскорблять других просто ВОТ ТАК?
Может, у вас просто тяжёлый день выдался? Если так — советую поспать.
UFO landed and left these words here

"Из-за таких идиотов, как ты все нормальные программы урезают функционал, потому что 90% даунов и домохозяек его не юзает, поэтому остальные обойдутся. Только дегенераты и нацисты навязывают всем свое мнение. "


Ужос какой. Ваше мнение безусловно более важно, ага.

все нормальные программы урезают функционал, потому что 90% даунов и домохозяек его не юзает
То есть вы хотите, чтобы каждая прпограмма поддерживала все функции всех предыдущих версий, а также ещё и имела встроенную интеграцию схем управления от других? Это как, запустил Word — а он не поддерживает vim-схему, значит сразу говно? Или, простихосподи, запустил Steam, а он тоже не поддерживает — тоже «дауны и домохозяйки» виноваты? Может, ещё и микроволновка должна перемещаться по столу, если на ней нажимать hjkl?
Поддержка мыши или общепринятых Ctrl+X/C/V/F/H тоже намекает, что они очень удобны.

Проблема многих комментаторов в том, что они забывают добавить "мне": "мне удобно". И им сложно понять других, когда им говорят что убирать руки с клавиатуры и тянуться к мышке для того, чтобы переключить вкладку — бывает не так удобнее и быстрее, как нажать однажды выученное сочетение клавиш.

Не «бывает не так удобнее и быстрее», а «мне бывает не так удобнее и быстрее»
Если вы когда-нибудь пытались донести до упорной девушки, что хоткеи в фотошопе или ворде удобней и быстрее, чем мышка, или, в том же ворде, не надо табами и энтерами отступы делать, потому что это неудобно, то вы должны понимать то, чему сейчас противитесь. Просто используйте вашу память и прожитый опыт.
Не знаю, с чего бы ВИМу быть таким уж удобным, если все его «фичи» разрабатывались под вполне конкретную древнюю клавиатуру, а вовсе не по принципам эргономики.
Полбеды, если бы просто под древнюю клавиатуру, так ведь под древние терминалы. Все эти приколюхи типа модальности — они ровно оттуда, из времен коннекта в 300 бод, когда набор текста уже сам по себе был челленджем и инструмент, позволяющий набирать текст, не дожидаясь визуальной обратной связи, реально помогал. Ну так это было, на минуточку, сорок лет назад, кое-что с тех пор поменялось…

Угу. Объёмы кода. Да что там кода. Конфигов! Выросли в разы! И вим с этими объёмами помогает ну очень хорошо разбираться. Вы-ж не жалуетесь на то что linux яляется идейным продолжателем и носителем идей unix, родом из 1969-го. А MacOS, так и вообще прямой потомок этого самого unix.

Почему VİM, а не TECO? ТЕСO теперь вообще летать будет.

Вместо teco сейчас emacs. Ломать пальцы, выдавая емаксовые комбинации, как-то особого желания нет… Но у емакса тоже есть свои приверженцы. Но вообще, по эзотеричности, к нему ближе sed.

В большинстве своем многие программы используют уже устоявшиеся комбинации клавиш:crtl+c ctrl+v. Почему-то в vim пошли своим путем

Ctl-C/Ctl-V работают с буфером обмена. Где буфер обмена у консольного приложения?

Вот прям вижу, как 100% пользователей vim и всяких vim-плагинов для приложений сидят исключительно в консольке. Вы, небось, тоже через elinks комментарий оставили?

Нет, но Windows Terminal с PowerShell у меня запущен постоянно. И речь шла совсем не о том. Изначально Vi/Vim были консольными редакторами еще тогда, когда GUI с clipboard вообще не было. И вообще, как я уже и сказал — Ctl-C/Ctl-V вполне себе работают в Vim. Просто зачем мне, например, жать Shift, потом семь раз жать стрелку вниз, а потом еще жать Ctl-C, когда я в vim я для этого просто жму "7yy"

Если у вас GUI, то мышкой будет (потенциально) ещё быстрее, потому что не надо будет считать строки/слова/символы.
Если у вас CLI, то то же самое, потому что даже консольный режим в Linux'ах уже много лет как поддерживает мышь.

А там и не надо считать. :set relativenumber включён постоянно и сразу кажет сколько строк нужно скопипастить/удалить/сдублировать/закомментировать etc.

Если у вас GUI, то мышкой будет (потенциально) ещё быстрее, потому что не надо будет считать строки/слова/символы.
У вас есть опыт или вы пишите так вам хочется? Мне достаточно набрать vi" и я выделил текст в кавычках. Я за это время не успею перенести руку с клавиатуры на мышь и обратно, не говоря уже о том, что у меня нет опыта в шутерах, чтобы так быстро и точно, не промазав ни на символ, выделить текст. Номера строк отображаются слева, их не нужно долго считать, что позволяет довольно быстро, даже на созвонах подсказать в какой строке править текст.
Шутеры не помогут, для выделений катайте Стар-/Варкрафт(=

Покажите мне буфер обмена в SSH сессии, буду вам премного благодарен. ;-)

Знаете, в чём ирония? Вы наверняка открываете SSH-сессию из графической ОС (я крайне сомневаюсь, что ваш рабочий компьютер не имеет графического режима). А если вы работаете в графической ОС, то ваш терминал уже умеет работать с системным буфером обмена. Windows Terminal, MSYS Bash, Putty, XShell, Gnome Terminal — все они умеют копировать в системный буфер обмена текст с экрана, а также вставлять текст обратно из буфера.
Если вы назовёте графическую оболочку терминала, которая не умеет использовать буфер обмена ОС — я буду крайне удивлён, но благодарен за любопытную информацию.
UPD: только что проверил JuiceSSH на Android — она тоже умеет работать с системным буфером обмена.

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

Не мешает, да. Но зачем? Чтобы целенаправленно лишить себя графического окружения?

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

Почему же не поверю, поверю. И даже поверю, что у вполне современных стоечных серверов тоже может быть исключительно CLI, да без мыши.
Правда, есть два нюанса: чаще всего код для них пишут не на них самих (а в изначальной статье рекомендуют именно программистам переходить на vim), и редактирование конфигов != программирование (я писал об этом где-то на этой самой странице). Если хотите — интерпретируйте мою мысль как «программисты, оставьте vim админам»

А потом такие "программисты" ставят IDE на сервер. Видел, знаю.

Ну знаете ли, некоторые и на Node.JS (и именно на JS, даже не TS) пишут части бекенда, в которых критична скорость и надёжность. А кто-то всерьёз заявляет, что подставки из красного дерева для акустического кабеля звук очищают от помех.
Если человек, грубо говоря, не очень умный, то ему и пристрастие к vim не поможет. А если достаточно умный — он сам решит, что эффективнее использовать для задачи: vim, VS Code или вовсе скрипт на AWK написать.

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

Если вы работаете исключительно в рамках одного приложения (будь то vim, emacs, mcedit или ещё что угодно консольное) — безусловно, вам без разницы что использовать, тут на первое место выходят исключительно личные предпочтения.
Однако как только вам понадобится взаимодействовать с другими приложениями (коллеге в Slack задать вопрос и приложить кусочек кода, скопипастить из Stack Overflow или ещё что угодно) — вы будете вынуждены использовать команды терминала.
Вы можете сказать «при чём тут другие приложения, мы тут vim обсуждаем», но учтите, что мой предыдущий комментарий — это ответ на
Покажите мне буфер обмена в SSH сессии
Однако как только вам понадобится взаимодействовать с другими приложениями (коллеге в Slack задать вопрос и приложить кусочек кода,

Вовсе нет. Если мне надо скопипастить в слак, например, абзац, внутри которого я нахожусь, то я просто нажму "+yip


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

"+yip — 5 кнопок, нужно запомнить. А выделить и скопировать первые 4 аргумента функции, например? Vs 1 движение мыши, которое работает одинаково что для абзаца, что для предложения.

С учётом Shift — 6 кнопок (при условии, что это именно "+, а не «кнопки с "+» и можно использовать '=)
С учётом Shift — 6 кнопок

А для мыши можно еще посчитать миллиметры, которые ею проехать надо, и нажатия кнопки мыши, и Ctrl-C за две кнопки.

Лучше вообще считать не нажатия кнопок, а суммарное время выполнения всех операций с текстом за час/день, с учётом «блин, да что ж там за кнопка-то, v или S» (независимо от наличия vim-штуки, я, например, в VS Code часто пытаюсь переключить заголовочный/исходный файл с помощью F4, потому что много работал в Qt Creator'е).
Если у вас в вашем vim/Neovim/IDE с vim-плагином получается быстрее, чем в Notepad++/IDE без vim-плагина — вам, конечно, имеет смысл использовать vim-штуки. Если же vim-штуки тратят больше времени, то вы лукавите, возможно даже самому себе.
В любом случае, никто не заставляет вас резко отказаться от вашего уклада.
вы лукавите, возможно даже самому себе.

Ага. А еще у меня биполярное расстройство, клиническая социопатия, и Эдипов комплекс с самого детства. Именно поэтому я использую вим, вместо поклонения Великой Мыши :)))

Вот именно. Vim позволяет делать очень крутые трюки с текстом, но запоминать правила составления заклинаний — :-/

Да вот как раз в вим все легко запоминается. Я бы мог и в обычной VS все нужные мне команды к шорткатам попривязать, только вот там я бы уже точно хрен что запомнил типа каких-нибудь Ctrl-Alt-K-Shift-F

Я же говорю — у меня это давно на автомате. И я реально нажму их быстрее чем даже просто руку на мышь буду переносить, не говоря уже о всем остальном.


И запоминается, кстати, очень легко если знать. "+ — использовать буфер обмена, y — "копировать", ip — "абзац". Два-три раза так сделаешь, а потом уже это делаешь вообще на автомате буквально одним движением. Тут, вот, например, сказали, что ZZ это "сохранить и закрыть файл", а я, если честно, про это даже и не знал — всю жизнь просто уже рефлекторно жму :wq и все, но надо будет теперь ZZ тоже попробовать :)

Не троллинга или хейта ради, а интереса из-за спрошу: правда ли, что вы вообще не убираете руки с клавиатуры с момента начала работы и до перерыва? Я не могу поверить в это, если это правда, а если не правда, то все «это быстрее, чем убирать руку с клавиатуры» звучат несколько натянуто.
Только что проверил
"+yip — копирует, но не в системный clipboard, а во внутреннй буфер vim. Немного не то.
y4t, — ничего не выделяет и не копирует.
А вот не ОК.
Если мне надо скопипастить в слак, например, абзац, внутри которого я нахожусь, то я просто нажму "+yip
Вставьте в Slack из буфера vim'а, желательно без команд терминала-оболочки.
Everybody vim-gangsta until «ну значит нельзя».

Ну сказали же, что не работает, значит не работает :)))

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

IDE vs vim — это вовсе не спор, это как лакмусовая бумажка: если человек топит за IDE, почти наверняка писать код он умеет только по подробной подсказке, на среднем уровне. Чтобы убедиться в чем-нибудь — ему всегда хватает версии «Мойша напел».


Я никогда не встречал настоящих профессионалов, которым бы требовались «умные» среды разработки.


Так вот. В дебианах системный клипборд по умолчанию отключен. Надо накатывать что-то типа gtk-vim. fkthat просто уже от усталости и твердолобости собеседников перестал воспринимать этот разговор всерьез, да и зачем?

Если некоторые заклинания работают только у автора, и он не может объяснить почему — из этого следует, что он крутой профессионал В VIM. Ну ок ;)
Не знаю, как у крутых специалистов по набору и копированию, а у меня чаще всего чтение и поиск (по всему проекту). Тут ide удобнее.
А иногда нужно смотреть какие то diff'ы — тут vim удобнее. Или преобразовать кусок файла из одного формата в другой без скрипописания — тут vim вне конкуренции.

Иногда консольный vim собирают без поддержки системного буфера обмена. Проверяется так:
:echo has('clipboard')

Если «1», значит все должно работать (у меня прекрасно работает).

90% комментирующих не смогли разобраться с clipboard в vim и комментируют, что "НЕ РАБОТАЕТ!!11".
(сейчас будут писать — "это мне надо потратить время чтобы просто настроить клипбоард" — не хотите не тратьте, только не надо писать что не работает)

Подозреваю что vim у вас собран без поддержки буфера обмена. В этом можно убедиться при помощи заклинания vim --version|grep -o '\-clipboard'

А выделить и скопировать первые 4 аргумента функции, например?

y4t,

Func1(a,b,
Func2(x,y),
c,d,e)


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

Ну я такое никогда не напишу (и у нас в команде тоже не напишут, ибо правила для стиля), так что мне по большому счету все равно. Но, если так надо, то visual mode или маркеры никто не отменял. И даже выделение мышью (сюрприз!) тоже работает точно так же как везде.

ну это не правда, у меня vim янкает в системный clipboard — выделяю кусок код, жму y и потом ctrl-v браузере.
Если надо ставить что-то в терминал — у меня в tmux prefix+p вставляет (по аналогии с vim). Еще у меня есть десктоп в офисе, когда удаленно работаю по SSH, так


    ForwardX11 yes
    ForwardX11Trusted yes

и теперь я могу y в vim на удаленном сервере и и ctrl+v в браузере у себя на локалхосте.

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

Это не устоявшиеся комбинации. Это просто стандарт. (Привет IBM CUA93!). Но это стандарт на взаимодействие с графической оболочкой и софтом под неё. Родился он благодаря тому, что софтописатели 80-х лепили хоткеи кто во что горазд (до сих пор помню хоткеи word-star подобных текстовых редакторов Ctr-K-C, Ctrl-K-V и это вот всё), но вы-ж не жалуетесь на то что в мире далко не один стандарт, ну например на пивоварение. Просто кому-то ближе ибм-овский стандарт (который приняли Apple и Microsoft) и активное использование мыши, кому-то вим-биндинги, которые хоть официальным стандартом и не являются, но тем не менее активно используются.

А при чем тут мышь? CUA не предполагает ее наличия, в общем случае. Стрелки — это перемещение, стрелки + ctrl — это быстрое перемещение (по словам), стрелки + shift — это перемещение и выделение, home/end/pgup/pgdn — это перемещение на начало/конец/по страницам, и тоже можно совмещать с модификаторами. И это таки не просто стандарт, а широко используемый стандарт, первая версия которого появилась еще до графических оболочек, под DOS уже была.
Почему-то в vim пошли своим путем

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

У vim очень легко запоминающиеся команды, если понять принцип. Наример, если просто запомнить, что "d" это удаление, то сразу же запоминается, что "dd" это удаление строки, "12dd" это удаление 12 строк, "d7w" это удаление 7 слов вперед, "dG" удаление до конца файла и т.д. Так же и со всем остальным.

«d» это удаление
Допустим
«dd» это удаление строки
Удаление-удаление — это строка… как-то странно, но ок.
«12dd» это удаление 12 строк
Ага, число + команда = «выполнить команду Х раз»
«d7w» это удаление 7 слов вперед
Так, стоп. Почему число внутри команды? Почему не 7dw? Или, аналогично, почему удаление 12 строк не d12d?

"Число + команда" — повторить команд число раз. "Команда + перемещение" — применить команду к тексту в пределах перемещения. Поэтому "12dd" и "d7w" сработает, а "d7d" скорее всего нет.


"12dd" — "12 + удалить строку"
"d7w" — "удалить + перемещение на 7 слов вперед".

То есть вторая d в dd — это перемещение? Одна и та же буква меняет значение в зависимости от положения в команде?
Вы, конечно, простите, но это примерно та же самая причина, по которой римские цифры сложнее арабских — «символ тот же, но если слева, то вычитаем, если справа прибавляем».

Нет. Обычно дубль команды это "применить команду к целой строке". Например: ">>" это табуляция текущей строки, а ">}" или ">%" это соответственно табуляция абзаца или "блока" кода. А есть еще не только перемещения, но и "диапазоны" (ranges). Например, ">i{" это табуляция всего, что между ближайших охватывающих фигурных скобок, а "diw"/"yiw" это удаление/копирование всего слова на котором курсор и т.п.


Некоторые неудобства в Vim это м.б. копирование/вставка между буфером обмена UI (хотя, в большинстве случаев, Ctl-C/Ctl-V будут работать), и случаи, если надо постоянно переключаться между кириллицей и латиницей (решается настройками)

С тем же успехом можно сказать, что римские проще: палочка всегда означает единицу, а крестик — десять. В то время как арабские — «символ тот же, но если слева, то десятки/сотни/т.д., если справа — единицы».

Да, проверил, работает. Просто как-то по привычке удобней 12dd нажать (потому что дважды жмакнуть на d проще). Вот чего так и не могу осилить, как ">" применить, скажем, трижды к двум строкам? Делаю "2>>..", потому что другого по сей день в голову так и не пришло.

Да, сработает. Но это с visual mode, а с ним-то вообще все что хочешь можно. Вот, интересно, как бы без него.

Удаление-удаление — это строка… как-то странно, но ок.

Согласен, страннее некуда. То ли дело логичное и очевидное Ctrl-Shift-H для замены текста.

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

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

Вы серьёзно? mc для консольного режима, конечно не необходим, но он значительно позволит сократить время и нервы при манипуляциях с файлами. Или вы на каждый случай будете писать ls-cd-ls-mv-mv-mv-ойнетадиректория?
Тут можно поспорить.
Если вы сисадмин-эникейщик, ковыряетесь с разными системами, разными файлами — то возможно mc вам сокращает нервы.
А в моей практике, я обслуживаю одинаково настроенный парк или дженкинс нод или кластеров или софта, который разрабатываем мы, имена файлов почти известен наизусть. И тут даже ls не всегда нужен…

При наличии autocompletion даже ls не всегда нужен. Двухпанельник (у которого тоже vim интерфейс) я запускаю исключительно для заливания музыки на телефон.

Вы не поверите, но есть консольный файловый менеджер vifm, в котором вся навигация точно такая как в виме. Даже конфиг, как в виме. Пользуюсь им уже 2 года, полет отличный


скрин

Навскидку:
У VIM хорошая подсветка синтаксиса
Во времена тормозящих удаленных шеллов редактировать файлы было еще той задачей
Пакетная обработка файлов и макросы
У VIM хорошая подсветка синтаксиса
У vim модсветка синтаксиса на регулярках, со всеми вытекающими: длинные строки не подсвечивает, в сложных файлах(когда комбинируется сразу несколько синтаксисов, например php(js, html и сам php) она часто ломается, и иногда чинится прокруткой вверх, иногда нет.
А уж vi-расширения для браузеров — это, простите, что-то вида «я не смог адаптироваться к графическому миру, поэтому использую клавиатуру».

Нет. Это банально быстрее. Пример — открытие ссылки. Пальцы гораздо быстрее нажимают две-три клавиши (в зависимости от количества ссылок в видимой области страницы), чем перемещение правой руки к мыши, перемещение самого курсора мыши и клик. Даже на ThinkPad, где руку к мыши перемещать не нужно, курсор ведомый трекпойнтом моментально к нужной ссылке не переместится. В случае-же вим биндинга, ссылка открывается со скоростью мысли.

Осваивать Vim — это, пожалуй, страшно. Или, точнее, очень страшно

Никогда если честно, не понимал — почему вима так боятся.
Чтобы пользоваться примерно на уровне обычного блокнота Windows — нужно освоить не много клавиш. Это «hjkl» (Либо стрелочки для казуальщиков) для перемещения, «i» для вставки и «o» для вставки новой строки, «esc» для выхода из режима редактирования и :w/:q/:wq для сохранения/выхода/сохранения и выхода.

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

Кроме того есть vimtutor, с которым во всём можно разобраться буквально за 2 дня

Разбираться 2 дня, что бы «просто набрать текст». Вы сами вдумайтесь в абсурд этой ситуации.

Вы забываете о том, что садитесь за компьютер не впервые. А разбираться 2 дня не нужно, минимальный набор элементарен.

Чтобы "просто набрать текст" для освоения хватит минут 15.

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

P.S. При этом я лично ни разу не фанат vim, и при наличии возможности предпочитаю пользоваться mc.
Страшно прочитать пару страниц инструкции что-ли, до того как начинать пользоваться?
Так дело в том, что большинство других редакторов (кроме emacs, пожалуй) вообще не требуют накаких инвестиций времени в мануалы перед началом работы. А из vim'а вы натурально не сможете выйти, если никогда не сталкивались.
>А из vim'а вы натурально не сможете выйти, если никогда не сталкивались.
Ну да, этот анекдот уже тут рассказали :) Однако хочу заметить, что там есть хелп — а значит его можно прочитать. Ну т.е. я бы просто называл это ощущение слегка иначе. Неспособностью читать мануалы, например, или даже скорее нежеланием. Потому, что если вы возьмете другой текстовый редактор, ну допустим Xedit, то там тоже чтобы выйти, нужно ввести команду. Если вы ее не знаете — то у вас тоже будут проблемы. Quit или Exit? Это тоже страшно? Ну в общем, слово страх тут как-то не очень уместно выглядит.

XEDIT это тот который на IBM-овских мейнфреймах, с REXX скриптованием и этим вот всем?

Да (правда, он далеко не только там был/есть). Но это не так важно на самом деле — главное это просто наличие команд, которые так или иначе надо выучить. Таких редакторов до vi была куча.

Да, я в курсе про наличие The Hessling Editor. И вообще большой любитель REXX. Но пользуюсь vi / vim ибо везде есть.

Разбираться 2 дня, что бы «просто набрать текст». Вы сами вдумайтесь в абсурд этой ситуации.

"Лучше день потерять, а потом за полчаса долететь".


А на самом деле vim не так страшен, как его порой малюют.
При необходимости могу легко с ним справиться (и даже справляюсь, когда надо бывает).
Но все же не люблю его. Причем не за клавиатурные сочетания, а за необходимость переключения между тремя режимами как минимум (вставка, навигация и ввод команд).
Причем режимы эти визуально отличимы очень плохо. Чуть не дожал кнопку или промахнулся — и несколько секунд дезориентации обеспечены. Тут простые переключения раскладки и режима вставки/замены иногда доставляют. А в виме еще "веселее" получается.

На самом деле эта проблема очень просто решается: вы практически всегда находитесь в командном режиме. Нашли место, где нужно дописать код — o<набираете пару строк><Esc>. Визуальный режим вообще используется довольно редко и исключительно для того, чтобы выбрать блок, к которому надо применить операцию, после применения сразу переход обратно в командный режим происходит.


Чуть не дожал кнопку или промахнулся — и несколько секунд дезориентации обеспечены.

В любой непонятной ситуации можно ещё раз нажать Esc.

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

Всё просто. Если ты незнаком с vim, тебе понадобилось на каком-нибудь удалённом сервере срочно поправить всего один какой-то файл, там из текстовых редакторов есть только vim (как ни странно, достаточно распространённая ситуация), а ты не умеешь им пользоваться, то большого удовольствия первое знакомство с ним не даёт.
По сравнению с тормозами редактора, если монтировать файловую систему через sshftp или curlftps, то ощущения крайне приятные. Лично я на него так и перешёл и теперь уже использую даже локально
Ну вот автор сказал, что ему было очень страшно, но почему не объяснил ;)

Я вот тоже не понимаю этих прыжков вокруг сложности vim.

Когда я был зеленый, и не знал о *никс ничего, мне показали как подключаться по ssh и как редактировать текстовый файл через «vi », и пару хоткеев. Остальное man vi. И я просто так и делал, без лишних стонов «а где тут мышка и любимый блокнот/ворд». Так и освоил.
Проблема в том, что потом такие vim-еры начинают ставить vim-mode на каждый утюг, потому что большинство редакторов и любые другие приложения с инпутами юзают общепринятые hotkeys. Так может лучше не создавать себе сложности на пустом месте, когда профит околонулевой.
Вообще ничем, не замечаю его(= Разговор о том, что незачем агитировать ставить vim тем, кому он вообще не сдался, при этом бездоказательно заявляя, что с ним фичи начнут закрываться в 5 раз быстрее, конверсия взлетит и нефть подорожает.
>Разговор о том, что незачем агитировать ставить vim тем, кому он вообще не сдался

В упор не вижу никакой агитации. Статья называется «Как освоить Vim», а не «Переходите с Идеи на Вим».

За статью респект. Сам использую его где только можно (плагины к VS и VS Code, консольный Vim, как замена notepad), и, CapsLock, как раз, уже давным-давно переназначен на Esc :)

А еще в vim есть замечательный режим vimdiff, ещё более замечательный режим накладывания патча прямо из .diff файла, киллер-фича «прогнать выделение через однострочный фильтр на шелле»… Ради этого приходится терпеть странные комбинации клавиш ;)
Я уже лет 5 с вим-биндингами везде, где можно(wm, IDE, браузер, шелл), из них года 2 вместо полноценного IDE использовал vim/neovim с плагинами, свистоперделками, пасъянсом и поэтэссами. Измеримого ускорения в наборе текста/кода я не заметил (тем более есть коллеги, которые ещё быстрее меня набирают и без всякого vim-а), но удобно, это да, гораздо удобнее, чем выделять/кликать мышкой или в раскоряку нажимать хоткеи типа alt+shift+blahblah. И потом, главное в програмировании не скорость набора текста, чай мы не секритутки, а суровые code mokey.
Капс у меня переназначен на смену раскладки, короткое нажатие шифта — на ESC.
Писать код в виме перестал, это возможно, это удобно, но зачем, если есть продвинутая IDE? Сейчас максимум — править удалённо конфиги на сервере.
Изначально перешёл на вим из-за боли в запястье — туннельный синдром сказывался. Не могу сказать с уверенностью, что именно вим спас меня, но тем не менее работать стало ощутимо легче — не нужно было пользоваться мышкой и раскорячиваться с хоткеями, а потом и боль ушла.
Порекомендую ли вим — определённо да. Заставляю ли, агитирую ли, призываю ли — определённо нет, если вам и так удобно — зачем что-то менять?
Спасибо за статью, вдохновила. Уже кайфую: поставил vimium — это то, что мне надо, помню во времена старой доброй Opera, у нее как раз тоже была навигация по элементам сайта хоткеями.
Спойлер
Спойлер-ссылка в хабре кстати не отрывает вимиум. Он видимо ждет именно клика :)
ZZ — сохранить документ и выйти из Vim

Много где пишут про этот вариант, но почему-то почти нигде про делающий то же :x, а мне он почему-то кажется удобнее.

:x клавиши находятся в разных частях клавиатуры. Надо две руки. В случае ZZ, это две соседние клавиши — левый шифт и Z. Почти как даблклик мышкой.

В случае ZZ, это две соседние клавиши

Спасибо, стало понятнее, почему расхожусь с предпочтениями большинства: у меня они не соседние) Ну и ещё мне нравится, как :x соотносится с :w — в голове эти две вещи логично рядом укладываются.

У меня тоже есть клава с похожей раскладкой. Почти соседние. Всё равно одной рукой можно нажимать.

Вбрасыватели «VIM vs IDE» — угомонитесь, пожалуйста. Нет никакого «vs». Никто не заставляет никого вылезать из уютной IntellijIDEA, нырять в темный страшный vim и собирать в нем ынтырпрайз-проекты на яве. Есть дохренищщщща задач для нормального текстового редактора вне IDE и помимо конфигов. Вот просто навскидку, первое, что в голову приходит:
— тексты с не-WYSIWYG разметкой: LaTeX, markdown и подобное. Особенно если это надо лишь время от времени, а не 40 часов в неделю
— старые языки, например asm PDP-11. Представьте себе, он еще не помер, и процессор серийно выпускается.
— новые языки, например, ассемблер NM6403-6407.
— Чужие языки, например, надо чей-то код внезапно однажды на питоне посмотреть и поправить, хотя по работе питон не нужен от слова абсолютно.
— огромные по размеру таблицы данных в виде plain text, которые завесят наглухо практически любой другой редактор. Причем, с прекрасной возможностью поиска по этим данным путем регулярок, а также выборки нужной пачки этих данных.
— сложные и регулярные манипуляции с текстом, например, периодически необходимое преобразование опять же данных, полученных в текстовом виде (результаты записи контрольных приборов, полученных от сторонней организации, повлиять на формат записи нельзя), с выборкой и заменой части этих данных по какому-то (не буду слишком подробно) правилу, тут скрипты vim влегкую уделывают любые макросы. Причем, макросы там тоже есть.
— необходимость работать с зоопарком кодировок с перебросом текста на кириллице из одних кодировок в другую — vim удивительно всеяден и позволяет делать это настолько легко, что не надо совсем задумываться над процессом и последовательностью операций.

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

Некоторые вопросы решаются другими средствами. Но зачем? Если есть инструмент, который перекрывает этот спектр с запасом (я еще не все вспомнил, за что люблю vim).

Это кое-что из того, что в моей повседневной работе встречается более-менее регулярно. И VIM здесь великолепен портясающей настраиваемостью, подсветкой синтаксиса под все, что надо (и очень легко добавить еще), скриптуемостью, всеядностью по кодировкам, форматам конца строки и размерам, кучей возможностей редактирования, поиска и замены из коробки, переносимостью между кучей ОС (забрал свой vimrc — и на чужой машине ты как дома), встраиваемостью сторонних утилит в процесс редактирования и поиска (типа ctags из простого), и, черт побери, ругаемой всеми модальностью, которая поначалу кажется чем-то диким, а потом не понимаешь, как без нее другие обходятся. Многое из этого (и еще много чего не перечисленного) есть и в других редакторах, но все это есть в одном месте. Наверное, emaсs не хуже. Говорят, в принципе, такой же, я не пробовал. Но nano, mcedit и тому подобное… Конфиги править — может быть.

Да, для шарпа я буду пользоваться студией, для явы — идеей, благо теперь есть и бесплатные версии, возможностей которых для меня хватает. Но IDE для LaTeX? Для PDP-11? Или вспоминать, как работает iconv (передаваемы параметры и все такое), и где-то добывать ее под винду, когда интернета на рабочей машине нет, и вообще он далеко?

Я не знаю, кто хуже — веган, который всех остальных при каждом удобном случае брезгливо честит трупоедами, или любитель шашлыка, пытающийся перепрошить вегана. Не надо так.
Прекрасный комментарий, по-моему, его можно (после небольшой доработки) отдельным постом публиковать)
А по поводу титульного вопроса статьи — вот мой рецепт:
1) при возникновении необходимости сделать какое-то действие, например, промотать открытый файл, в котором курсор на нижней строке так, чтоб строка с курсором стала посередине, не тянуться к мыши с колесиком прокрутки, а выяснить (:help, google, stakoverflow) как это делается в vim. Это будет поначалу дольше, чем крутнуть ролик, но это еще учеба
2) записать в шпаргалочку: «zz — прокрутить строку с курсором в середину окна»
3) после разрастания шпаргалки больше двух страниц а5 упорядочить подсказки по темам: поиск, редактирование, настройка, командная строка, регистры вставки и т. д.
4) при возникновении предпосылки к п.1 сначала смотреть свою шпаргалочку.
5) изредка пересматривать шпаргалочку и удалять то, что уже прекрасно запомнилось.

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

Дело в том, что возможностей у VIMа немеряно, но каждый пользуется ограниченным подмножеством. Надо свое подмножество выяснить опытным путем и отточить.
Надо свое подмножество выяснить опытным путем и отточить.
При условии, что вам вот действительно нужен именно vim и никаких более user-friendly альтернатив нет и не предвидится. В противном случае 99,9% пользователей проще сразу взять что-то иное. Да, пусть там надо будет вместо 4 клавиш нажать 8, зато гораздо быстрее освоить.
Разумеется, осваивать vim надо при условии, что нужен vim. То есть, если вы решили, что vim, пожалуй, нужен. Всерьез осваивать что угодно, если оно не надо — совершенно бессмысленно, хотя бы потому, что со временем навык без подтверждения заметно падает. Хоть vim, хоть английский, хоть питон.

Насчет юзер-френдли альтернатив (только если не предвидится) — еще раз повторюсь, для десятка разных задач, решаемых одним инструментом, существенно лучше освоить один этот инструмент, чем десяток юзер-френдли отдельных. Какие бы френдли они ни были к юзеру, их все равно надо осваивать. А перед этим про них надо узнать, их надо выбрать из множества альтернатив (вероятно, попробовав по нескольку штук руками), их надо скачать и установить (и они будут жрать место и ресурсы), с ними надо разобраться в плане чистоты, платности и лицензируемости (на работе это может быть критично), их надо настроить под себя, с ними надо решать вопросы совместимости по ОС… Я наверное еще не все перечислил.

А можно просто использовать vim. Спасибо за предложение, но нет.
никаких более user-friendly альтернатив нет и не предвидится.

Для меня "friendly" это то, что позволяет сделать нужное мне быстрее и проще. И в этом весь этот ваш мышинный "friendly" рядом с vim даже рядом не стоял.

В моей сейчас страниц 10 (а5)

поделитесь?

Ну, давайте попробуем как нибудь так, в plain-text`овом виде. Это, наверное, самый полный вариант из сохранившихся — тут страниц 16. Но, повторюсь, лучше это составлять самому. Примерно как при изучении английского словарный запас набирать, чужой словарик вряд ли поможет.

Да такого добра и в сети полно. Набираешь просто в поисковике: "vim cheat sheet"

Раньше думал, что когда нибудь изучу вим. В итоге сделал программируемую клавиатуру под qmk. Теперь у меня стрелочки на ijkl (и другие кнопки навигации) вообще во всех программах, под любой ОС. Вим так и не осилил. Но спасибо ему за объяснение что не убирать пальцы с центрального ряда не только можно, но и нужно.
читаю каждую статью про VIM, и всё жду, где расскажут, почему программисту надо соревноваться в скорости с машинисткой? Да работа программиста это овер 90% чтение, а не печать. Да и чтение нифига не в одном только VIM.

При чем тут скорость. Просто удобство не мастурбировать по десятку раз какую-нибудь стрелку зажав Shift и не выворачивать пальцы для шорткатов из восьми клавиш одновременно. Я, кстати, сам вслепую вообще не могу набирать, т.к. считаю это для себя просто не нужным, но Vim при этом постоянно использую.

При чем тут скорость.

ну при том что автор статьи сам это написал
кто умеет им пользоваться, значительно ускорить работу с кодом.

Скорость работы с кодом != скорость набора текста.

Вот как адепт vim объясни в чём оно быстрее, я может неправильный программист, но больше всего времени я трачу не на модификацию текста, или поиск каких то подстрок, а чтение и навигация по огромному салюшену с 50+ проектами на плюсах, с постоянным переходом по объявлениям, определениям и наследованиям методов/классов и без выпадающего списка с нужными методами, решарперовских штук по автокомплиту и разворачивании макросов я бы вообще за… ся работать с кодом, единственное что бы помогло работать быстрее это нейроинтерфес который мог заменить мышь и клавиатуру но точно не убогий редактор с миллионом хоткеев которые нужно держать в голове. В чем удобство мастурбировать десятки макросов на то что можно сделать мышкой в 2 клика?

Да что же я заставляю тебя Vim использовать? Елозь мышью, если тебе нравится :)

Дело не в том что ты или автор «заставляет» что то использовать, а в том что адепты вима несут бездоказательный бред о том что он ускоряет «работу» с кодом или что это вообще может быть удобным, да ещё словно это лучший редактор, при том когда начинается выяснение как и в чём, то оказывается что помогает он полтора землекопу в одном из тысячи кейсов, но зато понтов столько как будто священный грааль откопали. Отказ от мыши, omg это ж так оптимизирует скорость работы…

Я вот не пойму — ты мне пытаешься объяснить, как мне удобней или неудобней работать?

можешь хоть sed`ом редактировать, но если заявляешь что это удобнее или быстрее для неопределенного круга лиц, а не лично для тебя, будь готов что некоторые захотят с этим поспорить

Во многих случаях, внезапно, удобнее и надёжнее sed-ом!

Что за бред, в любой IDE есть десяток популярных hotkeys на 2 клавиши и десяток 3-клавишных (через ctrl+alt/shift, т.е достатоно эгономичных). Остальные команды раз в месяц вызываются и оттого мало верится в супербуст от использования Vim-a.

Тоже хотел вим освоить, на роутере vi, исправить добавить строчку и сохранить, максимум что понадобилось.
Сам я обычно работаю в полнокнопочной клавиатуре, левая рука это ctrl shift правая это стрелки и верхний блок из 6 клавиш, то есть выделять, вставлять, удалять, скролить одной рукой можно.
ctrl + ins — копировать
shift + ins — вставить
shift + home | end | pgup | pgdown — выделение
delete тут понятно, ctrl + del ещё вариант
Правая рука рядом с enter backspace плюс правее целый калькулятор с вводом любой математики.
Привык очень. Как то у товарища на ноуте хотел код чуть подправить, так себя не удобно почувствовал, как без рук. Пришлось за мышкой тянуться(
Стрелки для более точного позиционирования курсора, плюс быстрые скачки вверх, вниз, вперёд, назад, удаление, копирование, вставка. Писать одна позиция, навигация и прочее другая. Причём выделять как по мне даже точнее чем мышкой
Имхо. Кстати тоже везде поддерживаются сочетания

Как освоить Vim?
Чтобы освоить vi(m) достаточно выучить :q! и сделать apt-get install nano
Почему не mc?
Собственно, если нужно пару строк в конфиге поправить — любой редактор годится. А в nano (и в mcedit тоже) ещё и подсказка внизу экрана болтается, ничего учить не надо.
Но вот если надо делать что-то более-менее нетривиальное с текстом (вырезать кусок из одного файла и вставить в другой, например) — простые редакторы становятся сложными.
если надо делать что-то более-менее нетривиальное с текстом
Если надо сделать с текстом что-то нетривиальное (спарсить xml, работа с файлами) то существуют скриптовые языки программирования. Впрочем, некоторые предпочитают извращаться — это их право.

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

Напишу скрипт который будет вырезать некоторые строки из одного файла и вставлять в другой.

Например, перенести пару функций на С из одного файла в другой. Я бы посмотрел на этот скрипт :)

Никакой не годится, это sed, открывать любой редактор как то много.

VIM пользуюсь, но в объеме старого доброго vi
Привычка с времен терминалом 9600 8-n-1
Вот интересно, почему условный vim популярнее того-же emacs? Статей по vim я замечаю гораздо больше везде. Да и говорят о нём чаще

У него комбинации клавиш менее пальцеломные. Это как минимум.

Действительно сложно объяснить, почему, перейдя с mc на vim, обратно уже не тянет. И даже более того, удивляешься, как столько лет пользовался mc/mcedit и всё устраивало. Просто поверьте, что vim затягивает.

На мой взгляд, примерно то же самое происходит с владельцами автомобилей Mercedes, однажды пересев на него, они продолжают оставаться преданными этой марке.
Как освоить Vim?

Осталось только понять зачем. Если редактор требует столько усилий, то может быть ну его?!

Да не требует он столько усилий. Это миф! Достаточно просто пару-тройку раз пройти vimtutor и постоянно пользоваться.

Cplk все таки кириллица. vim для маргиналов, это про управление текстом мыслью. К написанию мыслей текстом он не имеет отношения совсем. Очевидно, что есть знаменитые писатели, а знаменитых редакторов нет. Но спросите писателей — есть ли очень уважаемые редакторы? А что такое текст? Это мысль, написанная. Алгоритм для тутошных. Vim для мысленного редактирования мыслей уже верно. Вот пальцем — неудобно, в телефоне писать. В Vim отредактировать всю ветку комментариев прямо на сервере, выделив нужные тебе мысли — самое то. Особенно если с телефона на этот сервер зайти, и тут vim великолепен, неподражаем, могуч, незаменим.

Для меня vim это типовой набор шоткатов для редактирования текста, выученных когда-то давно. Использую как режим в vscode, pycharm, терминале (set -o vi) и т.п. Базовые команды везде одинаковые и хорошо дополняют остальные функции IDE. Удобно, что они не отличаются в разных операционных системах — переключение между убунтой, макосью и виндос вызывает меньше проблем с привычками. Настоящий vim запускаю когда надо редактировать одиночные файлы или удаленно.

Удобно использовать одноразовые макросы когда надо сделать много однотипных правок: qq включает режим записи вводимых команд, еще раз q останавливает запись. Записанный макрос можно выполнить набрав @q. Ну или 10@q чтобы выполнить его десять раз подряд. Теоретически вместо q можно использовать любые другие буквы или символы, сохраняя тем самым разные макросы в разные регистры, но ситуации когда это бывает нужно встречаются крайне редко.
Переход на строку, поиск внутри файла, поиск внутри проекта, выделить слово, выделить строку, выделить несколько строк, скопировать-вставить — то, что мне хватает в моей IDE(да и в любом текстовом редакторе все эти комбинации, разве что не везде есть переход на строку).
Зачем ВИМ?

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

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


Возможно вы и не замечаете, как тратите время на нажатие "Backspace" много раз, чтобы удалить слово (некоторые кликают два раза на слово или используют "Ctrl"+"Shift" + стрелочки). Или выделяете мышкой что-то внутри скобочек, чтобы заменить содержимое. Вот несколько примеров того, как Vim помогает мне каждый день.


  1. Замена слова.

Допустим я хочу заменить arg2 на newArgument (и мой курсор где-то внутри строки).


res := someFunction(arg1, arg2)

Я жму f, (перевести курсор на запятую) -> w (перейти на новое слово) -> ciw (заменить слово) -> newArgument<ESC>. А иногда и вовсе достаточно просто вбить:


:s/arg3/newArgument/ (вот тут любые регулярки работают)


  1. Замена слов внутри скобок, кавычек и пр

Очень часто надо менять что-то внутри строк:


Допустим, я хочу заменить "hello_world" на "what's up" вот здесь:


some_function("hello_world")

Не проблема — находясь в любом месте на строке, я делаю ci" (заменить всё внутри кавычек) и печатаю what's up<ESC> — всё. Никакого ручного выделения, сколько бы текста не было внутри.


some_function("what's up")

А иногда и такое бывает:


res := someFunction(arg1(someFunc(()), someStruct { a : 5, b : 10 })

Допустим, надо вызвать someFunction с другими аргументами. f( -> ci(.


  1. Макросы

Вот это самая мощная вещь для сложного рефакторинга. Особенно тестов. Допустим, изначально выглядит так:


tests := []string {
    "input1",
    "input2",
    "input3"
    ...
}

А хотим получить это:


tests := []struct {
    str string
    someBool bool
} {
    { str: "input1", someBool: true },
    { str: "input2", someBool: true },
    ...
}

Не проблема — переходим на строчку "input1" -> начинаем писать макро: qa. Далее жмём I (вставка в начало строки), пишем { str: <ESC>. Затем добавляем в конец A + someBool: true },<ESC>. И перед завершением макроса переходим на строку ниже, чтобы не делать это вручную после исполнения макро снова и снова: k. И завершаем макро: q


Теперь, чтобы применить этот макрос к сотне строк, мне достаточно нажать 100@a. И это иногда спасает мне минуты бесполезной и рутинной правки вот таких вещей, где одну и ту же вещь нужно править одинаково, но для многих строк.


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




И вот таких вещей очень и очень много. Редактирование в Vim — это почти как программирование и оптимизация рутинных вещей. Нужно вставить что-то в начале строки? I. В конце? A. Вставить строчку вниз? o. Вверх? O. И всё это делается без перемещений курсора. Без кликов мышки и ручного поиска начала или конца строки.


Вы говорите редактору что хотите сделать, например "заменить всё внутри кавычек". Для этого вы жмёте ci", а не выделяете всё в кавычках вручную и жмёте "Backspace".


Так что тут дело не только в "скорости", но и в уменьшении действий, которые нужно делать вручную снова и снова.

так вот где индусы пишут свои сотни строк ифов или свича.

Все правильно. Только код программы лучше править в IDE, умеющей в этот язык. Которая умеет отличать переменные от функций и комментариев. Vim сам по себе умеет отличать только слова, скобки и кавычки.

Только код программы лучше править в IDE

Тут уже сто раз написали, что одно другому не мешает. Наверное для всех популярных IDE давно уже есть плагины для vim-mode.

в уменьшении действий, которые нужно делать вручную снова и снова.

Возможно, тут еще замешаны фрейдовские мотивы. После vi/vim работа в "обычном" редакторе напоминает онанизм — вот хейтеры vim и боятся этого лишиться :)))

После vi/vim работа в «обычном» редакторе напоминает онанизм
В равной степени после человеческого редактора (типа VS Code) vim напоминает мазохизм, и не многие хотят в это погружаться ради сомнительной выгоды (которой может и не быть в каждом конкретном случае)

Все вот говорят, что vim не удобен для работы с кодом, а я вот не соглашусь. Например, в Intellij IDEA есть прекрасный плагин IdeaVim, которой позволяет просто использовать синтаксис вима внутри редактора, но не лишает пользователя инструментов IDE. Такая комбинация на мой взгляд дает гораздо больше возможностей, чем использовать плагины вима для нафигации, поиска и тп, но при этом писать код с vim удобнее имхо...

Писать текст удобно в любом редакторе ;)
Редактировать — в зависимости от вида текста. Vim, он как швейцарский ножик. Да, им можно резать, пилить и крутить винты. Но специальный инструмент удобнее же. У vim есть много очень полезных и мало где ещё реализованных функций. Но нужны они очень не часто.
Те, кому не нужен vim — они просто не решали специфических задач, где он действительно нужен. Те, кому он необходим, и они в нем даже интернет отстают — просто кокетничают :)

Не могу не согласиться с такой аналогией. Швейцарский нож, может, и универсален, но обычная отвёртка удобнее. Грубо говоря, в поход не ходят с целым ящиком инструментов, но и шкаф ножом не собирают.
С другой стороны, когда в руках vim, всё вокруг кажется hjkl…
Сам я, много лет назад, изучал VI из соображений, что он есть в любом Linux/Unix из коробки, даже если других редакторов не установлено. Прошел vimtutor и думал, как круто, как-нибудь обязательно выделю время и освою весь VIM. Однако, на свежую голову мысль, что расширения VIM могут отсутствовать в VI поубавила пыл. Так, до сих пор, к стыду своему, и не овладел, постоянно забываю куда hjkl должны двигать курсор, приходится пользоваться стрелками.

В копилку раздела 5 я бы добавил Control-V — прямоугольное выделение (VISUAL BLOCK), позволяет выбрать и удалить (или скопировать) вертикальную колонку. Также, полезные программы view и vimdiff, которые, фактически, тоже vim.

Но самое большое разочарование, меня постигло от visudo: запустить и уже в голове представляя себе следующие команды VI, но внезапно обнаружить, что открылся GNU nano
После такого предательства "apt purge nano" руки сами набирают без участия разума.
(Если бы sudoedit открывал nano я бы и слова не сказал).
постоянно забываю куда hjkl должны двигать курсор

Где-то, то-ли в vimtutor, то-ли в мане, видел аналогию для японцев… Короче центр координат, это Япония… Остальные кнопки я не помню, но если хоть чуть знать географию, то J — остров Java, который южнее (вниз), KKamchatka, которая севернее (вверх), ну а H и L находятся слева и справа, что запоминается уже автоматически.

Мнемотехники для японцев — интересный факт, но мы-то живем в Россие, нам нужны свои.
К примеру, людей, знающих куда двигает WASD, в тысячи раз больше чем тех, кто знает куда двигает hjkl.

Тут, кстати, всплывает еще один слой: многим уже известно, что раскладка qwerty неоптимальна, периодически в блогосфере всплывают статьи про Dvorak/Colemak или даже самодельные раскладки. И, внезапно, в более эргономичной раскладке hjkl уже не 4 буквы подряд для правой кисти (хотя в Colemak находятся рядом).

Впрочем, VIM-щики и тут придумали себе такой забавный воркэраунд: в режиме редактирования работает раскладка Dvorak, а при выходе в обычный или визуальный режим — qwerty.

Кстати, по поводу вот этого...


Но самое большое разочарование, меня постигло от visudo: запустить и уже в голове представляя себе следующие команды VI, но внезапно обнаружить, что открылся GNU nano…
После такого предательства "apt purge nano" руки сами набирают без участия разума.
(Если бы sudoedit открывал nano я бы и слова не сказал).

Читайте маны, они рулез! С вероятностью 99% дело было в том, что...


   visudo locks the sudoers file against multiple simultaneous edits, per‐
   or the first editor in the list that exists and is executable.
   Note that sudo does not preserve the SUDO_EDITOR, VISUAL or
   EDITOR environment variables unless they are present in the
   env_keep list or the env_reset option is disabled in the
   sudoers file.  The default editor path is vi which can be set
   at compile time via the --with-editor configure option.
env_editor
  If set, visudo will use the value of the SUDO_EDITOR, VISUAL or
  EDITOR environment variables before falling back on the default
  editor list.  Note that visudo is typically run as root so this
  option may allow a user with visudo privileges to run arbitrary
  commands as root without logging.  An alternative is to place a
  colon-separated list of "safe" editors int the editor variable.
  visudo will then only use SUDO_EDITOR, VISUAL or EDITOR if they
  match a value specified in editor.  If the env_reset flag is
  enabled, the SUDO_EDITOR, VISUAL and/or EDITOR environment
  variables must be present in the env_keep list for the
  env_editor flag to function when visudo is invoked via sudo.
  The default value is on, which can be set at compile time via
  the --with-env-editor configure option.
Не нужно осваивать Vim! Это приводит к серьёзным побочным эффектам:

  • vim вызывает зависимость;
  • vim заставляет ваш мозг работать в модальном режиме;
  • Вы будете приходить в ярость, если при нажатии «j» или «k» не работает прокрутка;
  • становится невыносимой работа в текстовых «процессорах» типа Word, потому что они печатают на экране ":wq" вместо того, чтобы сохранить документ и выйти;
  • если вы раньше с грустью и жалостью смотрели, как кто-то копирует файлы, используя перетаскивание в проводнике, то теперь Вы сами почувствуете себя этим кем-то.

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

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

Ещё одна чудесная статья из серии "А лучше чем Б по причине моих субъективных предпочтений". Другие примеры: Android vs iPhone, Windows vs Linux, PS vs Xbox vs PC, MP3 vs Lossless — тысячи их и все бессмысленны

Я тоже так сначала подумал, но потом перечитал название и понял, что это статья для людей окончательно решивших для себя: «Теперь только VIM, только хардкор.»

В вопросе «Как освоить Vim?» речь о мотиватиции даже не идет — освой VIM или умри.

Современное программирование процентов на 50 — это Ctrl-C и Ctrl-V. Что в vi на этих сочетаниях клавиш? Какие клавиши в vi делают то же самое, что Ctrl-C и Ctrl-V в остальных текстовых редакторах?

Почему же? Верю. А это копирование только внутри vi работает или я могу в браузере сделать Ctrl-C, а потом в vi сделать p?

Вставка средствами терминала работает же. Shift ins. Не знаю, как в windows 10, а в более старых терминал был создан для боли и мучений ;).

Везде где только можно всегда сработает "+p. В терминале, в insert mode работает все так же как обычная вставка (Shift-Ins, Ctrl-V, etc), в GUI-версии тоже.

да, можете (у vim есть поддержка clipboard, --version покажеть скомпилирован ли с поддержкой, и set clipboard+=unnamedplus), так же наоборот — yank в vim, ctrl+v в браузере.

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

Но к авторам основного поста есть просьба: возможно не стоит рекоммендовать интегрировать вим с каждой ide, если вы не пользовались интегрированным решением сами.
Поймите пожалуйста, vim (neovim) — мой основной инструмент работы спустя кучу туториалов, прочтения и применения информации из двух с половиной книг, и нескольких лет практики.

Но после опыта использования его аналога в vscode, и webstorm, я очень ругался на его кривую реализацию. При том что не поленился и конфигурил их аналогично моему основному вим конфигу. Но оказалось, что, чисто технически, реализация vim-mode в них ужасная, и сделана «на отвали», создавая иллюзию, что ты сейчас в каком то из них будешь так же продуктивен благодаря встроенному аналогу.

Более того, у меня есть теория, что внутри IDEшек, вообще не стоит использовать vim-mode, так как его активация сразу ломает исходные горячие клавиши и комбинации.
Сам я использую vscode в основном для демонстрации экрана с кодом тем, кому очень сложно его воспринимать в чем то другом кроме vscode.

Ну не знаю. Пользуюсь и в Visual Studio и в VS Code — все вроде бы норм. Некоторые фичи не поддерживаются, кое что надо поднастроить изначально, это да, потому что это все-таки не "чистый вим", а плагин для IDE и ему как-то надо еще с самой этой IDE дружить, но как-то особой боли это не приносит.

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

«Ну раз вимеры освоили сам vim, то и в JSON перепишут свои конфиги» — видимо какая-то такая логика. А так, JSON — основной формат конфигов для VS Code, так что ничего удивительного. Как говорится, «вам шашечки или ехать?»

Это очень неудобно, потому что вим используется не только в VSCode

Но ведь в vim'е такие могучие и удобные макросы (ну, судя по комментариям), неужели так сложно написать макрос и запустить его аж 1 раз на все строки?

Кстати, VS Code из коробки умеет синхронизировать настройки, так что вам даже не придётся на втором компьютере (если у вас их более одного) то же самое делать!
Макросы, могучие удобные вимовские макросы типа «1 раз набрал, на все строки применил». Или они, внезапно, не такие могучие и не смогут переделать вимовский конфиг в JSON-форму?

Ты 8 марта на день раньше начал отмечать?

Я вообще не отмечаю, мне просто интересно, почему вы как vim-пользователь не хотите воспользоваться умопомрачительными возможностями vim'а, и с его помощью за минуту сконвертировать его собственный конфиг в VS Code-формат, чтоб пользоваться vim-плагином.
Видимо, возникла какая-то проблема в процессе…

Нет нужды, просто (у меня там всего пару настроек, про которые я за давностью даже забыл какие именно). А для работы с JSON у меня есть более подходящие инструменты — тот же PowerShell, например.

"у меня там всего пару настроек, про которые я за давностью даже забыл какие именно"


Есть у меня подозрение, что у кого в .vimrc всего пару настроек, и кто одновременно утверждает, что без vim жить не может — это он немного кокетничает :D

В консольном вим у меня


PS ***@***:~$ cat .\_vimrc | measure -Line | select Lines                                                                                                                                                                                 Lines                                                                                                                   -----                                                                                                                      54 

В VSCodeVim и VsVim почти все это есть в самой IDE и от вим мне там нужны только кейбиндинги и команды.


А вот вся моя настройка VsVim:


" The number of screen lines to keep above and below the cursor.
set scrolloff=3
" Set Shell
set shell=\"c:\\Program\ Files\\PowerShell\\7\\pwsh.exe\"
set shellcmdflag=-Command

Имхо, Vim — секта.
Сам пользуюсь vim на постоянной основе с плагинами типа ycm, nerdtree, clang-tiny и форматтер, и это безумно удобная вещь, да, но не когда у тебя есть возможность использовать нормальную IDE.
К тому же странно, в статье нет сравнений (внятных), кроме «ну, в виме быстрее». Нет, не быстрее, большие проекты в нем писать не удобно зная даже все шорткаты. Зато очень удобно писать embedded, когда нет возможности использовать IDE нормально, а проекты вписываются в пару десятков файлов.
А итог такой: часто админите, пишите embedded, нет GUI или нужно просто быстро отредактировать конфиг? — vim с плагинами — ваш выбор. Но когда речь идёт о разработке больших проектов, выбирайте IDE, их придумали не просто так. А для vim-оводов, хорош вовлекать людей в секту.

Тот случай, когда помимо vimtutor'а узнал ещё и про WSL
для всего нужна причина, тогда вопрос меняется — Как и для чего освоить Vim?
На мой взгляд, это противостояние адептов VIM/EMACS против всех остальных IDE/GUI-редакторов напоминает противостояние игроков DOOM, среди которых были клавишники и мышисты. Одни играли только клавиатурой, вторые еще использовали мышь. Думаю, всем ясно кто в итоге победил.
Сейчас, правда, противостояние пошло на новый виток: консольщики с контроллером против игроков ПК.
Думаю, всем ясно кто в итоге победил.


Вот только по немного другой причине.

Если вы не застали те времена, то могу вам напомнить, что когда вышел Doom, мышки мало того что были не лазерные, так еще и весьма некачественные. А еще, что немаловажно, не на каждом компьютере. А вот клавиатуры многие были профессиональными, с железными корпусами, надежные (привет BTC professional и др).

А вот прошло несколько лет, появились недорогие но уже неплохие мышки (mitsumi, pilot), а клавиатуры наоборот — на профессиональные спрос уменьшился, китайский ширпотреб распространился, да и собственно Windows 95 уже полноценно заехала в СНГ. Поэтому мышки распространились повсеместно, и ими научились пользоваться.

Если бы клавиатурное управление было лучше (по скорости, точности, времени реакции — неважно) — оно бы и осталось доминирующим. А так всё же выходит, что клавиатуры доминировали только пока мыши были не очень-то распространены.
1. Пока мыши были плохими.

2. Когда мыши начали распространяться, ими не умели пользоваться. Возьми сейчас любую бабушку, которая не пользовалась компьютером и попроси чтобы она мышкой в сапера сыграла. Картинка будет как когда 3-летнего ребенка просишь написать что-то. Овладеть мышкой с нуля на уровне нормального управления в шутеры — это не день и не два. А в DOOM уже играли несколько лет.
Ваше разъяснение никак не противоречит тому, что в итоге мыши оказались лучше клавиатур. Нужно было всего лишь пережить переходный период.