Киллерфича в vim — это режимы? Серьёзно?

в 7:54, , рубрики: IDE, vim, Программирование, среды разработки

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

Напомню: главный посыл той статьи был в том, что главная киллер-фича вима — это режимы, благодаря которой всё остальное не важно. При этом автор согласился с тем, что в IntellijIdea и других IDE есть хоткеи и т.д., которыми вполне можно пользоваться. Но режимов то нет, поэтому вим.

Далее автор предлагает для перемещения по словам вместо ctrl-стрелочка использовать последовательность Esc, e и потом возвращаться в режим редактирования i. Всё это потому, что неудобно удерживать ctrl.

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

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

Кстати, в IntellijIdea есть способ поменять регистр слова (или выделения) одним нажатием, так что caps lock для констант тоже не особо нужен.

Вим может быть хорош для редактировния конфигов где-то на серваке. Вим может быть хорош для новых языков, куда еще не добрались хищные лапки Jetbrains. Под вим проще писать свои плагины (в 99% случаев вам это не надо в нормальной IDE). Возможно, удобно редактировать длинные тексты. Но не для обычного же промышленного программирования!

Тут надо сразу обозначить несклько пунктов:

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

Можно. Но зачем это нужно?

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

Поясню про редактирование без мыши на примере. Вот я открываю IntellijIDEA, создаю новый файл.

Нажимаю кнопку p, IDE сразу подсказывает, мол, вы хотите набрать слово package? Остается нажать Enter чтобы слово package появилось в редакторе.

Нажимаю кнопку c, IDE сразу подсказывает нам "class".

Вводим имя класса (например, Habr), набираем скобку { и IDE сама добавляет закрывающую скобку после курсора.

Дальше набираю pu, IDE понимает, что это "public". Набираю H и жму Enter, чтобы получить "Habr", потому что IDE поняла, что я создаю конструктор.

Пишу тело конструктора. Например, вызываю метод init(), которого еще нет. Ide тут же отмечает его красным, что такого метода нет. Я жму alt-enter, и IDE само вставляет куда надо

    private void init() {
    }

если внутри этого метода я наберу new Habr(5) (слово "Habr" было с подсказкой, конечно), т.е. вызову несуществующий конструктор, IntellijIdea сразу подчеркнет это дело, и нам останется нажать <alt-ENTER> и подсказать, что именно мы хотим: добавить аргумент int в конструктор или добавить новый конструктор с параметром int. Выбираем второе и ide нам сразу добавляет после первого конструктора новый:

public Habr(int i) {
}

Про автоматические отступы и т.д. при редактировании текста я умолчу — это само собой есть.

Итак, вот что получилось в итоге:

package x;

class Habr
{
    public Habr()
    {
        init();
    }

    public Habr(int i) {

    }

    private void init() {
        new Habr(5);
    }
}

Я нажал буквально пару кнопок и хоткей alt-enter.
Я не ставил плагины.
Я не тренировался целый месяц для этого.

Я ВООБЩЕ НЕ ТРОГАЛ МЫШЬ (эту фразу я набрал капслоком не потому что я такой нервный, а просто по приколу — чтобы поюзать режим).
Я не переходил ни в какие режимы и не вспоминал комбинации кнопок и педалей. Один единственный alt-enter (это контекстно-зависимая штука, по сути хоткей для "решить проблему").

Если вы ненавидите мышь, то для навигации по коду есть свои горячие клавиши: можно без мыши перейти к нужному классу, файлу, методу, номеру строки и т.д.
Можно выделить текст, нажимая несколько раз ctrl-W — и вы выделите текущее слово, текущий текст между скобками и т.д.

В виме можно перейти к нужному символу. Например, вы видите символ x в строке и прям хотите туда, но мышь вызывает отторжение. В ide тоже можно это сделать: ctrl-f и нужный кусок текста. Это, кстати, своего рода режим. Режим поиска.

Я могу без мыши перейти к нужному вызову функции, а потом без мыши (ctrl-b) перейти к описанию этой фунции.

У вима из коробки есть несколько уникальных возможностей редактирования, которых нет в IDE

  • Перейти к следующему/предыдущему абзацу
    Да, это было бы полезно иметь в IDE. Но в основном при редактировании статей для хабра, а не для кода.
  • Перейти до пробела.
    Ну, можно считать полезной штукой, но не слишком крутой. Несколько раз нажать ctrl-стрелочка будет иметь тот же эффект.
  • перейти на полстраницы вниз/вверх.
    Не знаю, надо ли это мне, пока не решил.
  • Перемещение на первую/последнюю/среднюю строку экрана.
    Не знаю, зачем это нужно. Ну то есть, может пригодиться, но не киллер-фича.
  • Можно удалить ровно X строк кода.
    Каждый день так делаю. Вот ровно 19 строк кода надо удалить порою.

Я тот еще знаток vim, возможно упустил что-то мегаважное. Поделитесь плиз в коментах.
Нет, конечно, есть еще 100500 плагинов. Но и в IDE они тоже есть, и не меньше.

Вывод

Вывод я для себя делаю следующий. Лично мне для редактирования кода вим не нужен, не уговаривайте. Режимы вместо зажатия ctrl или даже ctrl-alt-shift меня не впечатлили. В IDE больше возможностей из коробки, и при этом не надо учить и тренировать комбинации клавиш довольно долгое время. Для большинства повседневных задач в IDE достаточно знать буквально пару-тройку горячих клавиш. Но можно и не знать, если мышь не смущает.

Давно известно, что при программировании человек тратит основное время на изучение кода, а не на написание. Поэтому, с мышью или без — почти все равно. Хотя, повторюсь, в IDE можно почти всё (а может и вообще всё?) делать без нее.

Для редактирования конфигов на сервере vim лучше, чем nano. Но при двух условиях:
1) надо хорошо знать вим
2) надо реально много конфигов править, чтобы почувствовать выигрыш. Один-два раза в месяц подправить конфиг — достаточно nano или чего угодно.

Можно начинать минусовать, а еще лучше, аргументированно возражать :)

Автор: Антон Околелов

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js