Comments 121
А почему именно этот вопрос? Там есть какой-то подвох, про который не говорится в этом мане? https://vim.fandom.com/wiki/Search_and_replace_in_a_visual_selection#Substituting_in_a_visual_selection
UPD: Хотя, тут-то оказалось, что всё даже ещё проще – https://stackoverflow.com/questions/773137/find-and-replace-within-selection-in-vi/773158#773158
-Супер-Скорость
Пока запомнишь все эти команды, проще будет заменить вручную. А еще проще - писать сразу более-менее нормально, чтобы потом не нужно было исправлять. И завести себе это в привычку.
Команды на самом деле очевидны и даже их использование в разных ситуациях логично. Достаточно один раз прочесть ман. 8)
Например:
$ - прыгнуть в конец строки
d$ - удалить все от курсора до конца строки
y$ - скопировать все от курсора до конца строки
... и т. д. и т. п.
т.е. находясь в глубоких размышлениях и разработке, я должен отвлекаться на лайв-программирование IDE в своём уме, чтобы сделать простые вещи? дичь какая-то
Всё-таки для большинства (на мой взгляд) проще воспринимается модель kakoune/helix: выделение -> действие. Когда ты видишь с чем конкретно произойдёт действие чувствуешь себя увереннее.
End
Shift + End, Del
Shift + End, Ctrl + C
yip Скопировал всю функцию. Обратите внимание — я скопировал ее изнутри самой функции! Мне не пришлось наводить курсор или мышь на первый-последний символ.
f1 CTRL+a Прыгнул к единичке и с помощью CTRL+a увеличил ее на один! Ваша IDE умеет такое?
Примеры высосаны из пальца короче. А то что это нужно трем с половиной извращенцам в расчет не берется.
— Вот тоже не понимаю чего фанаты vim носятся со своими комбинациями. Вроде в любом современном редакторе все то же самое делается комбинациями не сложнее, просто комбинации другие.
— Вот вам комбинации, которых нет
— Они нужны трем с половиной извращенцам(≈не мне), несчитово.
Очень удобно. «Меня устраивает функционал обычного редактора, (я считаю, что все остальные такие же, как я), поэтому все остальные функции нужны ограниченному количеству людей, а значит, примеры этих функций нерелевантны, т.о. я победил». То, что в такой формулировке очень сложно подобрать какую-то функцию, которая нужна вам, но ее еще у вас нет, в расчет не берется.
Я привел вам два примера. По моему мнению, два примера уже достаточно показательны, чтобы считать неверным тезис «в виме нет никаких фичей по сравнению с обычными редакторами, только неудобное управление». Есть ли еще примеры? Конечно. Хочу ли я их искать человеку, который считает, что «победив» в соревнования с двумя примерами, выиграл весь спор, и тут же обвиняет меня во лжи? Нет, пожалуй.
Как назвать ваше «ну мне же эти два примера не нужны, а значит, не нужны никому, а раз мне не могут показать еще примеры, значит больше их не существует, следовательно, редактор никому не нужен» — я не знаю. Глупостью? Самоуверенностью? Ощущением себя пупом мира?
В любой нормальной IDE есть vim mode со всеми режимами. А вот чего нет в виме - это рефакторингов, а без них ide не ide
С чего вы это взяли? lsp-mode в Емаксе позволяет мне переименовывать все во всем проекте, переносить функции в новый файл выделять строки в переменные. Возможно пока не все возможности реализованы, но большинство работает так же, как в пайчарме например
в любой иде vim mode сильно кастрирован. а разницы работы одного и тоже language server что в вим, что в иде нет никакой
в иде просто горячих клавишь не хватит на все варианты комбинаций команд вим, а то на что хватит запомнить нереально
разница в способе организации управления
то что в обычных редакторах и иде комбинация клавиш для какой-то команды, в вим составная команда из действия и области, где область также может быть составной. за счет этого запоминать надо в разы меньше. там где в иде надо запоминать каждое сочетание клавиш, которые слабо связаны с командой которую они выполняют. в вим ты составляешь команду из небольшого набора базовых кирпичиков.
в итоге все аргументы в пользу обычных редакторов соводятся к тому что таким функионалом его пользватели не пользуются, потому что без горячих клавиш это делать неудобно, а запомнить столько горячих клавиш под случаи которые используются редко просто невозможно.
обычный "зелен виноград": из-за недостатков управления удобно использовать разнообразный функционал редактирования текста невозможно, поэтому им и не пользуются, остается только небольшой набор самых востребованных функций.
в этом и есть привлекательность вим, что выучив значительно меньше чем требуется для обычных редаторов, получаешь на порядки больший функционал
Да и настроить всегда можно под себя как угодно.
Нет нельзя. И в это вся проблема. Без мыши не удобно работать. А с мышью после вима уже неудобно работать.
Суть не только в комбинациях. В вим есть еще режимы, буферы и возможность строить комбинации из комбинаций. С одной стороны, если не знаком с этим, кажется что оно нафиг не нужно, с другой стороны, я, привыкнув ко всему этому, не смог пользоваться PyCharm с "вимовской раскладкой", потому что кроме набора некоторых комбинаций эта раскладка ничего и не реализует. Оказалось, что просто привязка функций на другие кнопки ничего удобнее не делает.
Я не пользовался vsc, не могу сказать.
Дело не только в комбинациях, вы упустили режимы и буферы.
Спор о vim бессмысленнен. Вы не понимаете в чем удобство, да, честно говоря, я тоже не понимаю в чем удобство, просто ничего лучше за годы работы не встречал. Нет способа передать вам понимание, что такое работа в vim. Все, что я могу сделать, это лишь указать на то, что привязки кнопок и комбинации - это лишь интерфейс для работы с vim, его отличия от обычных редакторов шире и раскрываются только если научиться с ним работать.
Хотя, может быть уже все редакторы поддерживают подобные подходы в работе. На тот же PyCharm я пытался перейти пару лет назад, может они уже реализовали базовый функционал vim.
Конкретику дайте плиз хоть какую-то.
У меня такое чувство, будто вы не читали мой комментарий.
Какой? Что вы не можете сделать с текстом в PyCharm?
Все могу делать. И в блокноте могу все делать. Чем вызван этот вопрос?
чтобы с комбинациями другого редактора кто-то носился выдавая это за великое удобство
В vim дело не в комбинациях клавиш. Вы читали мой комментарий?
Что в них удобного?
Да в целом, ничего. Это просто инструменты vim.
Все и не надо. Только те, что нужны именно вам.
за счет того что команды составляются из небольшого количества базовых кирпичиков, запомнать надо в разы меньше чем при запоминаний горячих клавиш, а возможностей получаешь в раз больше
Все что есть тут, можно найти и в Notepad++ с его плагинами.
Большую часть времени разработчик размышляет и перемещается по коду. Скорость набора кода тут не столь важна.
У vim/nvim сейчас основное преимущество в небольшом потреблении ресурсов, благодаря чему батарея живёт значительно дольше. И ориентация на работу с клавиатурой избавляет от необходимости пользоваться тач панелью. ИМХО разумеется.
Сам пользуюсь этой сборкой https://astronvim.github.io/ через neovim-qt (из-за контекстного меню и буфера), хочу попробовать ещё https://github.com/akiyosi/goneovim.
По первому, тут jetbrains вне конкуренции разумеется. Там синхронизация конфигов через облако есть.
Сам nvim использую только в домашних проектах, чисто по фану.
Часто слышу такой аргумент. Да редактирование занимает времени меньше чем чтение. Однако энерго затраты на редактирование можно существенно снизить. То есть тут речь не про время, а про количество внимания, которые вы вкладываете на перепрыгивание с мыши на код, листание скролом, выделения и вот это все. Вим это еще про десятипальцевую печать, а значит даже на клавиатуру смотреть не нужно и постоянно перекидывать взгляд.
Но это не единственное, что дает вим. Помимо редактирования, такая же огромная скорость действий касается всего остального. Работа с табами, поиск по проекту/файлу, работа с гитом, навигация по всякого рода имплементациям интерфейсов и вот это все.
Вим ощутимо увеличивает общую скорость работы, а главное перестаешь со временем думать про инструмент (так как автоматизм действий приходит неизбежно) и начинаешь думать про код. У меня это так работает.
Для того чтобы начать делать работу с помощью Вима надо учиться Виму.
Большинство же просто хочет делать свою работу.
С другой стороны если условный VSC добавить в себя управления редактором на уровне Вима, против особо никто не будет
для того чтобы пользоватся редактором тоже надо учить его горячие клавиши, и учить приходится гораздо больше. Разница есть только на начальном этапе, чтобы запомнить, что перед вводом текста надо войти в режим редактирования, а по окончании ввода выйти. Видимо очень сложное обучение для этого нужно )
Ну это примерно как с QWERTY на Dvorak пересесть. Кому-то эффективнее, а кто-то хочет продолжить стирать через Backspace и скакать по строке одной кнопкой Home/End.
А какой порекомендуете туториал или курс по этой штуке? Желательно для туповатых кодеров и с простыми практическими заданиями :)
Можно нагуглить миллион уроков любой сложности и даже игры для вимеров.
Вот именно, и большинство будет отстоем, поэтому я и спросил какой порекомендуете, в гугл я и сам могу себя послать, спасибо =/
Я погуглил - миллион уроков ссылается на :tutor, а он не то чтобы туториал, а скорее типа интерактивная справка.
Вот дали бы кусок кода который надо отредактировать вимом или практическую задачку какую-то.
https://vim-adventures.com/ я вот эту игру проходил для переноса базовых движений в мышечную память
https://vim-adventures.com/ игра с вим управлением
https://www.vimgolf.com/ набор разных задач по изменению текста, с целью уложится в наименьшее число клавиш, для каждой задач показывается лучший достигнутый результат, можно смотреть решение на 1 клавишу меньше чем сам достиг
Самый простой способ - начать писать в нем. Гуглишь команды по мере необходимости или когда кажется, что нажимаешь слишком много кнопок.
Я пробовал читать книжки, но в отрыве от работы это абсолютно бесполезно. Весь вим держится на мышечной памяти и на том, что она опережает мысль, а для этого нужна практика в тех условиях, в которых вы его планируете использовать.
Чтобы интерес не пропал до начала работы советую использовать готовые сборки (я использую spacevim, тут в комментах еще советуют)
vimtutor
для обычного вима, внутренняя команда :Tutorial
для nvim
Из текста так и не понял, чем nvim лучше vim. (:
я так думаю, проще всего будет зайти на какой-нибудь vimawesome и поискать по интересующим вас вещам.
потому что единственная причина перехода на вим это его способ редактирования
возможности в плане иде не отличаются
для начала можно взять какую нибудь сборку типа
https://www.lunarvim.org/
https://spacevim.org/
для распростаненых языков они представяют функционал иде
- Основы, вроде навигации по hjkl и прочих dd xx, в принципе, осваиваются довольно быстро. Да, это всё равно боль, но такая, к которой привыкаешь. Нет, это не быстрее мыши.
- Всякие более сложные фишки могут быть весьма удобны, они могут, наверное, быть быстрее мыши если прям привыкнуть и проникнуться. Но ты ж их используешь-то пару раз в году и никогда не запомнишь, каждый раз заново гуглить, как это сделать. Вся быстрота и всё удобство убиваются и уходят в минус.
- Но я же не совсем тупой, я напишу шпаргалку по нужным командам и буду держать на втором мониторе! Да, ага, очень помогает, вместо ковыряния по менюшкам IDE теперь происходит ковыряние в тексте шпаргалки в поисках чего там как где.
- Совсем лютое джедайство вроде guu 2jfkD yip 21G SHIFT+v jp f1CTRL+a 11Gdip ggdd jv4jd Go'Hello World!', возможно, действительно становится киллер-фичей после многолетних практик и медитаций, когда в отдельной специальной зоне мозга из особых нейронов формируется Vim-сопроцессор и можно херачить подобное, не переключая основной ментальный контекст. В моём случае переключение взад-вперёд между «вот я программирую мою задачу на Питоне» и «вот я программирую сложную текстовую операцию в командах Vim» выбивало, что называется, «из потока» не хуже внезапного звонка от секретарши босса с очередной бессмысленной и беспощадной бюрократической по2.7ботой. Нахер-нахер, пусть я мышью, пусть я медленнее, но при этом продолжая обдумывать задачу, а не просыпаясь, как герой фильма «Memento», внезпано посреди нигде и вспоминая «кто я? где я? что я там делал-то до того, как решил эффективно отредактировать текст?»
Лет 6 назад я потратил где-то 3 месяца на освоение вима. Хотя со временем я пересел на Емакс, я все равно использую вимовские сочетания через evil-mode. И это кардинально поменяло мои способности. С ужасом вспоминаю, каким я медленным был на PyCharm. Вечно прыгать рукой с клавиатуры на мышь. Это постоянно выбивало меня из контекста. Теперь мои руки фактически материализуют мои мысли, курсор двигается за взглядом и я просто не думаю, как что-то набрать.
Совершенно не парит «прыгать рукой с клавиатуры на мышь» (тут можно было бы привести широко известную в узких кругах цитату про секундомер, но мы сдержимся). Замедляет ли меня это, и если да, то насколько — я не знаю, но думаю я обычно медленнее, чем печатаю, даже с учётом мыши, так что пофиг.
думаю я обычно медленнее, чем печатаю, даже с учётом мыши, так что пофиг.
Это частая ошибка людей, зависимых от ИДЕ. Потому что мозг приспосабливается к скорости печати и вам кажется, что вы думаете медленно. Если сможете быстро печатать, будете думать быстрее
Причём тут IDE. Pycharm(и другие IDE от jetbrains), помимо того что имеет очень развитую(и максимально настраиваемую) систему хоткеев, также предоставляет замечательный плагин ideavim, с помощью которого можно пользоваться vim-like хоткеями, а также некоторыми очень полезными плагинами (surround, easymotion, multiple cursors)
Для текста только. В виме и емаксе управлять всем нужно клавишами. Иде без мыши нельзя использовать. Для каких то действий все равно нужно к ней тянутся
Нет, не припомню таких действий. Если знаете, подскажите
До последнего релиза не было возможности по хоткею перемещать таб между окнами. Теперь сделали. Хотя в vim этого не сделаешь даже с мышью.
И совет. Попробуйте. IDE (как минимум от jetbrains) за последнее время хорошо продвинулись и большинство из них имеет плагины для эмуляции vim-like команд. Vim отличный редактор. Но, при всём уважении, для разработки больших проектов хорошей IDE он не конкурент. А вот на сервере и для быстрых правок - отличный инструмент.
даже если отбросить то что vimmode там сильно урезанный, привычные действия просто не работают. Еще он плохо стыкуется с строенными хоткеями idea, постоянное преключение между стилями управления сильно мешает.
Это неправда. Если речь идёт об обычных действиях по перемещению по тексту, и его редактировании, то все они работают. И макросы работают. И даже несколько очень полезных плагинов портировано.
По поводу конфликтов между хоткеями vim и pycharm. Там ведь целый раздел в настройках, где можно выбрать кто должен обрабатывать то или иное действие - vim или сама ide. Всё легко настраивается.
про то и речь , что работают только базовые команды, чуть глубже копнешь не работает
когда пробовал vimmode постоянно натыкался что не работает то что привык использовать
по поводу хоткеев речь о том, что стиль у них разный, в вим принята последовательность нажатий обычных клавиш, без модификаторов, эти он и удобен, а все хоткеи idea завязаны на модификаторы
те же последотальности проще запоминать
например первая g - все связанное с git
s - связанное с поиском
l - lsp
Сильно подозреваю, что hjkl было удобным именно на клавиатурах древних никсов. Самые удобные курсорные по моему опыту -- слой с jkli на клавиатурах corne. Там даже эмуляция мыши есть для особо изысканных господ.
![](https://habrastorage.org/getpro/habr/upload_files/195/b5d/d5c/195b5dd5cad7e5feff2be1a784ebc4d2.jpg)
Просто у создателя vi изначально была клавиатура со стрелками на этих клавишах. Традиционных стрелок тогда ещё на клавиатурах не было, на сколько я понимаю.
Касательно «просто у создателя была клавиатура», читал где-то, что вся эта «эргономика» сложносочинённых команд vi изначально задумывалась для медленных удалённых текстовых терминалов, где ты не просто нажал del-del-del и в реальном времени удалил три символа, а нажал, ждёшь, пока оно дойдёт туда, ждёшь, пока ответ придёт оттуда, дождался, убедился, снова нажал — в таких условиях фишки вроде цифры перед командой действительно должны экономить кучу времени и нервов. Собственно, примерно такой юзкейс я и описывал в первом комментарии.
надо запоминать не готовые длиные команды для каждого действия, а понять принцип их формирования и основу из которой они собираются. Основа около 50 клавиш, большая часть которых легко запоминается. Тогда все это не будет лютым джедайством, а просто набором действий, типа прыгаем через 2 слова, заменяем кусок до следующей запятой.
вы соревнуетесь с обычным Юзером с клавомышью и GUI интерфейсом
Справедливости ради, юзер может пользоваться GUI интерфейсом, но не пользоваться мышью. Кажется, все современные редакторы кода и IDE такое позволяют
В Nvim мышка включается отдельной командой в конфиге.
Наоборот, она включена по-умолчанию.
Оно, конечно, всё хорошо, но:
1. Тут есть плагины, как, к примеру, в vscode, для удобного управления контейнерами?
2. Тут есть плагины для удобного доступа к wsl?
Её реально можно отстроить так, чтобы она заменила мне абсолютно все необходимые инструменты, которые есть в том же самом vscode?) Если да, то я заинтересован
Похоже, что
- Нет
- Нет
P.S. я гуглилъ, думаю если бы было то на поверхности
В Емакс есть мод для управления контейнерами кубика, есть мод для почты/рсс, есть мод для телеги, есть мод для твиттера, есть мод для удаленного редактирования с сервера/докера. Легче перечислить моды, которых нету)
- lazydocker
- Это же консоль. Прямо в wsl и запускать.
переходить имеет смысл только если вам нравится способ редактирования в вим. все остальное есть и в других инструментах. Собственно кроме модального способа редактирования других преимуществ ради которых стоит переходить на вим нет.
Я довольно долго сопротивлялся, но потом попробовал Doom Emacs (с evil mode - биндинги как у vim) с него я потом перепрыгнул на nvim, написал себе гавноконфиг и радуюсь до сих пор c большим удовольствием его эволюционируя вместе с собой. Удаляю неиспользуемые штуки, добавляю или дописываю новые, заодно приоткрыл для себя мир lua.
Например из фишек: `CTRL + a` как в примере у автора, у меня не только инкрементит числа, но и переключает bool. Странно, но эту фигню использую чаще чем может показаться.
Через некоторое время начал испытывать дискомфорт когда надо было открыть VScode или любой онлайн редактор.
Типа:
- Какого фига я должен тянуться мышкой куда-то водить ей, убирать руку с клавиатуры если я туда посмотрел, а курсор уже стремительно движется в нужное время (моторика вырабатывается и это все без раздумий как мышкой пошевелить)
На счет скорости я мегаприроста не заметил но эргономичность выросла очень сильно.
Сейчас реально почти физическую боль испытываю когда надо в ворде поработать или в каком-нибудь онлайн-редакторе кода.
Из минусов:
Обновление плагинов может сломать рабочий день, так как может перeстать работать все.
Но я приучил себя не делать такое в утро понедельника и все норм :/Написать свой конфиг чтобы он работал это как петпроект, который никогда не заканчивается и имеет косяки которые ты конечно исправишь, но когда то потом.
Осознание собственного превосходства над жалкими людишками, теперь я неостоновимый дух коддинга
всю жизнь мечтал, вот вырасту, сильно вырасту. и в 21 веке, рядом с vr технологиями, откажусь от мыши и гуи, чтобы запомнить тонну команд
2022 год. Каждый месяц выходит очередная статья знакомящая читателей с neovim/vim. И самый комизм ситуации в том что в комментариях каждый раз разгораются споры "терминал vs GUI", "IDE vs vim", "emacs vs vim". Не надоело?
В vim невозможно рефакторить чужой код. И как выше правильно написали vim "выбивает из потока".
Но в остальном знать его чрезвычайно полезно в встраиваемых и удаленных системах, когда кроме консоли ничего нет. Да и, согласно Posix, vi обязан присутствовать из коробки. Но лучше в нем только читать с приятной подсветкой синтаксиса ВСЕГО что есть и править не больше пары строк.
(сам я vim знаю только на базовом уровне, конфиги на сервере поправить или типа того)
Вот что бросилось в глаза, в кунг-фу по исправлению кода - мы прыгаем к строке номер такой-то, затем к строке номер другой-то, то к первой, то к последней.
Но когда я пишу код, в ИДЕ (pycharm в моем случае), я не ориентируюсь по номерам строк. Я ориентируюсь в контексте, названии функций, переменных, ошибках подсвеченных ИДЕ, и т.п.
И соответственно что б редактировать тот кусок кода, я б тоже не использовал мышь, но я б скакал к объявлению функции, к ошибке, использовал бы контекстное выделение что б скопировать/удалить блоки кода (ф-ции) и в конце жмякнул бы авто-формат что б убрать неиспользуемые импорты/добавить где нужно пустых строк и т.п. Наверняка я б нажал больше кнопок, что б перейти к той же единице и исправить ее на двойку (хотя я привык к плагину AceJump, c ним быстрее это).
Но когнитивная нагрузка была б, ИМХО, меньше, т.к. не нужно переключать в голове контекст с программы на номера строк.
Работал с любителем неовим, на сеансах парного программирования подкалывали друг-друга частенько на этой почве, но по результатам - не важно кто был за клавой, скорость решения задачи была приблизительно одинаковой.
ну так и вим надо использовать не номера строк, а структурные элементы кода, перейти на начало текущего блока, на начало/конец функции, выделить внутри кавычек, скобок, выделить внутри блока, выделить предложение, перейти на символ, к названию
в вим куча встроенных структурных элементов с которыми можно работать, с плагинами добавляются различные элементы завязанные на синтаксис языка, работающие через ls или tree-sitter
Скорее всего так и есть, но вот в этой статье (и, по личным ощущениям, в большинстве других) этого нет и все вертится вокруг номеров строк и к-ва символов.
Возможно потому, что пример уж очень синтетический. Но с другой стороны, возможно, что и преимущества вим наиболее наглядны на таких синтетических примерах. А в ежедневной жизни используется процентов 10-20, и для тех же целей вполне себе можно использовать несколько аккордов хоткеев в ИДЕ.
вим тем и хорош, что хотя в основном используется небольшой процент, но в редко используемые комбинации ты также используешь в нужный момент, потому что в отличии от пальцеломательных комбинаций в обычных редакторах не надо запоминать отдельную команду для этого, она составляется из техже частей которые присутствуют в часто используемых командах
сижу в неовиме пару недель, по началу было очень не привычно, сейчас уже начал привыкать. Это интересный опыт, будут ли статьи про дебаг в неовим?(единственное что пока не настраивал) остальное типо gitui или лсп сервер уже сделал
Честно сказать, настроил я себе неовим год назад, да так с пафосом, прям отдельной сборкой можно выставлять. Только смысла то от этого не много, установить вим биндинги на vscode/idea будет банально удобнее, тебе не надо фиксить deprecated у пакетов, не надо для каждой новой фитчи дописывать конфиг, не надо заботится о переносе этого конфига на новое устройство и т.д.
С тем же vscode все куда удобнее, у тебя и раскладка окон по одному нажатию мышки, и пакеты по нажатию мышкой, и синхронизация настроек, и мультиплатформеность без билда каждой новой версии под платформу, ибо в пакетных менеджерах устарелые версии. Поставив в vscode плагин Vim, ты получаешь весь самый важный функционал в виде биндов, и можно спокойно строить козни из команд по типу замены всего текста внутри квадратных скобок (не включительно) текстом из 5 регистра 3 раза, а потом через record повторить это на всех участках кода.
тут в общем вот, замена пакера вышла)
https://www.reddit.com/r/neovim/comments/zqk5ds/lazynvim_a_new_plugin_manager_for_neovim/?utm_source=share&utm_medium=ios_app&utm_name=iossmf
Кстати, да прям мало статей про дебаги и профилирование, через vim.
Например C#. Его без нормальной ide не отладишь про профилирование я вообще молчу. Вопрос конкретно про терминал.
И как говорили выше vim и все подобные инструменты хороши если, на сервере разработки есть только ssh. И тут имхо нет равных подобным инструментам:)
Что бы, не сыпали удобрений из вечной битвы чьё кунг-фу круче. Отмечу, что сам в студенческие годы сидел на emacs. И для меня он был куда круче vim))
Колдовской NeoVIM. Часть первая. «Neovim VS Ваша IDE, или долой мышей!»