Комментарии 72
Кстати да, недавно надо было на unix сервере поправить файл и попытки перемещаться стрелками в vi все отображение ломало. Строка пропадала. Совсем забыл про «hjkl».
Да, vi поддерживает кучу языков и форматов, но имхо лучше поддержка всего несколько языков, но на отлично. IDE это не только подсветка синтакса языка. IDE должна как минимум понимать язык. Не говоря уже о всяких обвесках вроде компайлера, да кучи всего.
везде делается через language server
Прямо таки везде?
к тому-же далеко не для всех языков вообще применимо понимание
github.com/ballerina-platform/lsp4intellij
github.com/gtache/intellij-lsp
ну и обсуждается понимание языка вимом
какие из языков поддерживаемых JetBrains не имеют LS?
И редактировать файлы можно было только через Vi.
У меня всегда был с собой небольшой блокнотик, в котором основные команды Vi были записаны. Так что худо-бедно можно было отредактировать, тем более нужно это было редко и изменения вносились небольшие.
Если на железяке был FTP-сервер, то было проще, тащишь файл к себе или на другую машину где есть nano или mcedit, редактируешь и закидываешь обратно.
Это правда. Очень хочу попробовать альтернативные раскладки, но так привык к vim, так удобно стало, что не представляю, как поменять hjkl на нечто разбросанное по всей клавиатуре.
но это вызывает переход на новую раскладку в любом применении
самая большая боль это различие горячих клавиш в енг и рус раскладках, но вим это в меньшей мере касается
это только вначале непривычно, причем непривычно со всеми командамиИ да и нет. Все команды Вима кроме курсора вызываются по первой букве команды, например, чтобы сделать Yank жмёте Y и так далее, и всё равно где он находится. Получается, что все команды как были логичными, так и остаются — а вот курсор приходится вызубривать.
самая большая боль это различие горячих клавишРазличие горячих клавиш победить легко. Для винды есть MS keyboard creator и вместо того чтобы использовать дефолтную русскую раскладку надо взять Дворак (другие я не использовал и смысла в них не вижу; если вам всё-таки нужна другая тогда это проблема) и на основе Двораковских кейкодов собираете обычную русскую раскладку, которая не будет отличаться абсолютно ничем кроме кейкодов горячих клавиш.
Пользуюсь colemak с несколькими перенастроенными кнопками vim. Кнопки легко меняются в конфиге.
Меняются легко, это правда. Но тогда получается, что в Insert mode вход не через i
, потому что эта клавиша занята под "вправо". Выше писали, что остальные команды худо-бедно по значению запоминаются.
Можете рассказать, какие изменения у вас в настройках вызваны раскладкой?
Я поменял довольно много стандартных кнопок. Руководствовался тем, что надо сделать один раз удобно для себя, стандартные кнопки это просто один из вариантов. Маппинг кнопок для Colemak на моём гитхабе
Навигация по тексту осуществляется (в обозначениях querty) как n — вниз, h — вверх, y — влево, u — вправо.
Тоже столкнулся с этим на Двораке. Понял, что нужно писать свою модальную раскладку. Год делал и до конца всё равно ещё далеко) Но пользоваться можно.
Сейчас пишу документацию на неё и пост на хабр, вот её кусок в нотации Vim:
┌─────┬───┬───┬───┬───┬───┰───┬───┬───┬───┬───┬───┬───┬─────┐
│ │ │ │ │ │ ┃ │ │ │ │ │ │ │ │
│ │ │ │ │ │ ┃ │ │ │ │ │ │ │ │
└─────┴───┴───┴───┴───┴───╂───┴───┴───┴───┴───┴───┴───┴─────┘
┌─────┲━━━┯━━━┯━━━┯━━━┱───╂───┲━━━┯━━━┯━━━┯━━━┱───┬───┬─────┐
│ << ┃ │ P │gE │ ? ┃ N ┃ ┃"_D│[[ │ Y │ D ┃ │ │ │
│ >> ┃ │ p │ B │ / ┃ n ┃ ┃"_d│ ↑ │ y │ d ┃ │ │ │
└─────┺━━━┷━━━┷━━━┷━━━┹───╂───┺━━━┷━━━┷━━━┷━━━┹───┴───┴─────┘
┌─────┲━━━┯━━━┯━━━┯━━━┱───╂───┲━━━┯━━━┯━━━┯━━━┱───┬─────────┐
│ ┃gg │ e │ │ E ┃ge ┃ ┃]] │ C │ │ G ┃ │ │
│ ┃ ^ │ w │:b │ W ┃b ┃ ← ┃ ↓ │ c │ → │ $ ┃ │ │
└─────┺━━━┷━━━┷━━━┷━━━┹───╂───┺━━━┷━━━┷━━━┷━━━┹───┴─────────┘
┌─────┲━━━┯━━━┯━━━┯━━━┱───╂───┲━━━┯━━━┯━━━┯━━━┱─────────────┐
│ ┃ R │ │ │ ┃ ┃ U ┃ a │ v │ J │ ┃ │
│ ┃ r │ │ i │:w ┃ x ┃ u ┃ A │ V │ . │ ┃ │
└─────┺━━━┷━━━┷━━━┷━━━┹───┸───┺━━━┷━━━┷━━━┷━━━┹─────────────┘
┌─────┬─────┬─────┬───────────────────────┬─────┬─────┬─────┐
│ │ │ │ │ │ │ │
└─────┴─────┴─────┴───────────────────────┴─────┴─────┴─────┘
На пустых местах тоже есть некие команды, я их сейчас не привожу.
Принцип примерно как у дворака (упор на перемещение самых частых команд на более удобные позиции, и на смену рук, например cw делается со сменой рук) и также как у Colemak (упор на finger rolls, например переход в <V> и движение вниз — это частая биграмма, начинающая выделение блока, — делается finger-roll'ом). Также вместо hjkl был сделан выбор в пользу hjil (в терминах QWERTY), из-за большей эргономичности вертикальных движений по ij вместо kj.
И она позиционная, т.е. команды привязаны к позициям, просто в разных раскладках будет привязка к разным буквам. (Исключениями являются скобки, тк к ним привязаны движения на открывающую/закрывающую скобку, а в разных раскладках расположение скобок разное). Её можно использовать и на QWERTY и на Двораке и на чём угодно.
Встречал другие позиционные модальные раскладки, но к сожалению не сохранил ссылки.
Так что проблема разрешимая.
Vim невероятно расширяема. С помощью плагинов и настроек конфига можно сделать вообще все, что вашей душе угодно. Серьезно.
Расскажите, пожалуйста, какие плагины поставить, чтобы было autocomplete для Java кода, как в IDEA/Eclipse. С учетом того, что добавлено в pom.xml. Давно ищу легковесную IDE, но с автодополнением.
Есть простейший плагин для дополнения слов в целом. Также есть coc.nvim, но он не специализируется на Java. Поискал, есть ещё такое расширение, но опыта с ним не было.
Проблему решили с помощью дополнительной «контрольной» клавиши для изменения ввода с физических символов на управляющие символы. Удерживание клавиши управления обнулит 6-й и 7-й старшие биты нажатой клавиши. Если вы хотите использовать управляющий символ Backspace, нужно удерживать ctrl + H (или ^H).
А вот этого я не знал. Интересная деталь.
Насобачился перемещаться по тексту не отрывая руки от стандартной позиции (правда не в vim, а в emacs), а потом стал сомневаться, действительно ли это так хорошо для моих кистевых суставов длительно время пребывать в одной и той же позиции?
А ещё я стал сомневаться в пользе слепого набора. Я, как освоил его, действительно теперь не отрываю глаз от монитора, и если раньше глаза бегали с монитора на клавиатуру и обратно, за это время хоть как то двигались и немножечко перефокусировались, то теперь тупо смотрят в одну область, по долгу настроившись на одно фокусное расстояние. И я прямо чувствую, что глаза теперь сильнее устают.
действительно ли это так хорошо для моих кистевых суставов длительно время пребывать в одной и той же позиции?Так единственная альтернатива — голосовой набор. И всё равно, можно будет ставить вопросы о полезности нахождения рук под столом. Поэтому, ИМХО, есть смысл отталкиваться оттого что полезно для работы. Кстати, вроде как говорят что емакс не получится использовать вслепую из-за постоянного отвлечения от трёх рядов клавиш (я ни разу не пользовался, но интересуюсь).
Я, как освоил его, действительно теперь не отрываю глаз от монитора, и если раньше глаза бегали с монитора на клавиатуру и обратно, за это время хоть как то двигались и немножечко перефокусировались, то теперь тупо смотрят в одну область, по долгу настроившись на одно фокусное расстояниеНаоборот всё здорово, теперь у вас есть власть набирать текст смотря вдаль. Правда, для этого надо отключать автокомплит, который срабатывает как правило неожиданно, ну а для того чтобы получить храбрость его отключить надо любить печатать вслепую, что вроде как на qwerty недостижимо (простите за троллинг, я дворакофил).
действительно ли это так хорошо для моих кистевых суставов длительно время пребывать в одной и той же позиции
Это совершенно нормально, и даже ускоряет процесс набора (travel distance становится меньше). Проблема малоподвижности ни при каком наборе не стоит, тк пальцы и руки всё равно совершают огромное кол-во мелких движений.
А вот постоянно зажатый Ctrl это как раз весьма вредно. Emacs — прекрасный редактор, но многих программистов он отправил к врачу с диагнозом RSI, того же Столлмана. Или модальное редактирование, или мышь, или зажимать Ctrl фалангой согнутого мизинца (известный в узких кругах лайфхак, снижающий нагрузку на мизинец).
Усталость глаз тоже не бывает от слепого набора, глаза постоянно совершают сканирующие движения даже если смотрят на одну и то же область дисплея (w: cаккада), ищите проблему в другом месте.
Сейчас и вовсе пользуюсь 60% клавой с несколькими слоями.
Зачем мне VIM если я пишу каждый день на TS (остальные 199 языков ждут моей реинкарнации наверно) и у меня комп дороже 400$?
Да, я использую VIM для редактирования каких-то файлов с под консоли (конфиги и ТД). И да я понимаю что я могу поставить себе +100500 плагинов в VIM чтобы юзать только то что мне нужно и получить целых 1-2Гб свободных ОЗУ. (16Гб =~100$).
VIM юзать на слабых системах — ок, юзать людям которые юзают его давно и просто к нему привыкли — ок. В остальных случаях — понт имхо.
P.S. Сорри, сгорел с тупых банальных ответов конца 90-ых с первой главы
Именно ради этого люди сознательно переходят на вим. Считать что причиной использования вим является слабый комп, или привычка — это большая ошибка.
Когда-то второстепенные фичи, типа подсветки синтаксиса и автодополнения были весомым преимуществом, но сейчас это реализовано практически везде. Отзывчивость интерфейса приятная вещь, но мощное железо в большей степени это компенсирует в иде.
Основная же причина использования vim это его режимы. Когда для управления используются клавиши для ввода текста, и в виде последовательных нажатий, без необходимости удерживать управляющие клавиши. В результате этого редактировать текст гораздо удобнее. Засчет того, что команды перемещения и действий независимы, комбинация их дает богатый функционал, для которого в иде надо запомнить в разы больше шорткатов. Так же это освобождает простые комбинации типа (Alt,Ctrl)-<буква> для специфичных действий.
но такие вещи очень удобны для записи макросов, или использовании команды normal ( которая позволяет применить команды редактирования для диапазона строк или для строк в которых найден нужный pattern)
там можно записывать команды типа найти 2ую запятую, вырезать до пятой и вставить после (
при обычном перемещении вим хорош большим количеством видов перемещений( по словам, по абзацам, на парную скобку и т.д.), а так же тем что эти команды простые и легко запоминаются, а также тем что команды перемещения можно использовать для указания диапазона для команд действий
те запомнив как переместиться на парную скобку, ты сразу знаешь, как удалить/выделить/скопировать/заменить/… до парной скобки, в иде же для этого используются мало похожие шорткаты
а режимы нужны для того, что с ними удобнее
так можно спрашивать зачем нужна клавиатура, если можно с экранной мышкой набирать
Да когда при редактировании кода нужно перемещаться на 5 слов или выделять 3 абзаца? Мы оперируем функциями, классами, условиями, циклами, переменными
Во-первых: по определённым причинам, базовый Vim намеренно не умеет производить синтаксический анализ. Общеизвестно, что для языков вроде C++ это практически равносильно реализации компилятора C++ внутри редактора. Базовый Vim заточен на редактирование чисто текстовых объектов. В нём есть некоторые примитивные синтаксические текстовые объекты, например "блок кода между {}". Синтаксические текстовые объекты добавляются плагинами (пример — текстовый объект "аргумент ф-и").
Во-вторых: модальность настолько же важна, как и функции работы с текстовыми объектами. Это банально возможность перемещаться по коду (а также вызывать операции итд) одно-двухкнопочными действиями без частого нажания неэффективных и вредных модификаторов Ctrl, Alt итд. "Сделайте мне так, чтобы я скроллил экран 1 кнопкой не перемещая кистей". Забудьте про этот несчастный hjkl — избыточное использование движений на 1 символ это признак новичка в виме. Опытные вимеры двигаются пословно, поблочно, поиском, операцией jump to tag, прыжком в списке объектов с подтверждением и ещё десятком способов.
В-третьих: "оперируем функциями, классами, циклами..." — скажем так, разве что при рефакторинге, которого действительно в виме нет. А вот:
при "сыром" редактировании кода (raw editing) — даже в сверхсовременных IDE всё в итоге сводится или к банальному печатанию кода (сниппетами, для эстетов), или к чисто текстовой копи-пасте и правке (сомневаюсь, что в какой бы то ни было IDE есть целостная система команд для копи-пасты синтаксических объектов).
при навигации — Vim с плагинами много чего умеет (jump to def, нечёткий поиск по тегу, переход к файлу по нечёткому имени итд).
Как в той байке про ширину космического корабля, которая завязана на ширину лошадиной задницы 2000 лет назад.
думаешь «удалить до конца строки» и компьютер печатает «удалить до конца строки» вместо удаления, потому что был режим вставки
таким образом пальцы располагаются на «домашнем ряду» клавиатуры
Нет. Домашний ряд — это F для указательного пальца левой руки и J для правой (если говорить про QWERTY). Vim предлагает держать правую руку так, чтобы указательный палец лежал на H, то есть со смещением на одну клавишу влево. Зачем? Где-то я читал, что советуют таки держать левый указательный на J, но тогда им неудобно тянуться к H, да и левый мизинец остается не у дел.
Далее, почему за навигацию отвечает именно правая рука? У тех, кто любит играть в игры, нет никаких проблем с WASD. А клавиши WASD еще и расположены в интуитивно понятной форме — W вверху, S внизу, A слева и D справа. Я смог переучиться печатать на раскладке Дворака, но так и не смог овладеть навигацией клавишами, расположенными в одном ряду — ни в играх, ни в Vim. Но постойте! Если левую руку класть на WASD, то она тоже не будет лежать на "домашнем ряду"! Многие игроки переходят на навигационную раскладку ESDF — тогда левый указательный палец падает как раз туда, куда нужно, на F. Игрокам лучше — больше клавиш слева, на них можно больше чего-то забиндить.
Если при всем этом использовать раскладку Дворака, то у левой руки, лежащей на домашнем ряду, за навигацию будут отвечать клавиши .OEU — чем я пользуюсь уже минимум полгода и ни о чем не жалею. Разве что только о том, что не могу просто так взять и перенастроить все клавиши Vim под себя и пройти одну игру, которая не распознает "." в настройках.
А то, что кисти в изначальном положении находятся на hjkl и для перемещения не надо передвигать кисти по клавиатуре и это повышает производительность, тогда зададимся вопросом, а сколько времени уходит на набор текста/кода из общего времени работы? Неужели те доли секунды, которые уходят на перемещение руки вправо на 5-10 см, существенно влияют на общее количество написанного? А уж держать руки 8-10 часов подряд в одном положении над asdf и jkl; и не двигать ими вообще, «так пусть отсохнет его карбюратор, во веки веков». А тут хоть какая-то разминка в процессе работы и уделять ей отдельное время можно уже меньше. А уж нащупать стрелки на классической клавиатуре мне проще чем бугорки на клавишах f и j.
Это все конечно же моё ИХМО.
А вот ваше мнение как раз и основано на том, что вам в вим неудобно, и переучиваться не хочется. Переход на вим действительно тяжело дается тем, кто пользовался обычными редакторами, и освоил часть их шорткатов. Сами по себе режимы не привычны, привычные действия не работают, даже если помнишь как сделать это в вим привычного автоматизма нет, надо сознательно выполнять эти действия. Переходный период тяжелый, но это окупается когда переходит в автоматизм.
Неужели для правки конфигов так важно держать руку посередине клавиатуры, а для написания кода печатать со скоростью звука? Мне как-то всегда думалось, что IDE и текстовые редакторы были именно для удобства работы с текстом И очевидной навигации придуманы...
сейчас число тех у кого первым редактором был вим крайне мало, подавляющее большинство сначала пользовались обычными редакторами, и перешли на вим потому, что в нем удобнее
лично для меня основными моментами перехода был визуальный режим( в обычных редакторах мне было крайне неудобно выделять при помощи shift+ctrl +стрелки, отпустишь что нибудь, или нажмешь лишнее и начинай сначала), и то что в вим запомнив немного операций, при помощи их комбинации получаешь большой функционал работы с тестом ( в обычных редакторах для этого требуется запоминать трудно-запоминаемые шорткаты для каждой операции, те запоминать в разы больше, ну или бегать по менюшкам)
сейчас мне очень нравится команда normal для выполнения похожих операций над множеством строк
Ну, чисто из своих наблюдений, за более чем 20 лет в индустрии (я в основном с++-ник), я ни одного человека не знал лично, который бы пользовался вимом… Может действительно это нишевая штука для определённых специализаций. Это бы всё объясняло.
в c++ в основном все идет в иде на десктопе
Очень странно. Под Винду программируете? Из моего опыта разработки под никсы, на компанию в 50 человек всегда находится 1-2 вимера. Лично я к этому так давно привык, что не воспринимаю ту же idea без vim плагина.
И винда, и Линукс. Под виндой в студии в основном, под Линуксами Qt Creator либо Kate/gedit. В коллективе и "старые перцы" имеются (45+), но ни одного фаната Вима вообще не встречал. Либо не знают, что это, либо реакция "а для чего этот динозавр, если есть… (тут часто vs code или notepad++ упоминают). Админы наши тоже не фанаты вима.
Производительность повышается не от набора текста, а от того, что поток не прерывается, контекст не переключается в процессе набора текста. Это только при слепом наборе можно ощутить. Мысли буквально материализуются без дополнительных усилий. Хотя это бесполезно кому-то доказывать. Пока не попробуешь, не оценишь, а как оценишь, то уже все остальные способы будут бесить своей медлительностью.
Вообще не обязательно использовать именно вим, в идее есть встроенный плагин вима, если его допилить, результат будет не так уж и плох
Ну не знаю, мне IDE и думать не мешает, и писать помогает) да и пупырышки никакие я не ищу… (Кстати что это?)
Сам когда-то набивал 4 пальцами, гонял руки по всей клаве, и не искал никакие пупырышки. С освоением 10-пальцевого режима, впрочем, приходит понимание что переставлять руки туда-сюда — лениво и время/энергозатратно…
Если вы не знаете про пупырышки, то похоже и в слепую не печатаете. Это так? Если да, то тогда вим вообще вам не подходит.
Я всегдаиспользую «vim mode» в Visual Code, Visual Studio, CLion,… Но сам vim запускаю очень редко, когда надо глянуть файл не выходя из терминала.
На самом деле статья о том, почему Ctrl это Ctrl. :)
Некоторые IDE очень прожорливые и требуют мощной рабочей станции (вспомним хотя бы монструозную Visual Studio).
Вот тут то ли пример неудачный, то ли ирония скрытая. VS до сих пор 32-битная. Ну ладно, до 2010-2011 года это было приемлемо, но когда у тебя 16+ ГБ, а VS не может сожрать и 4 ГБ — это огорчает. Там в ядре VS кучка жуткого legacy и непонятно когда MS осилит переход VS на 64 бит (и осилит ли). Похоже, что от безысходности запустили VS Code (которая кроме названия к VS отношения не имеет и пока вообще не конкурент во многих областях).
Почему в Vim для навигации используются клавиши hjkl