VIM: зачем, если есть IDE, и как?

    Сегодня вышел текст о том, как человек перешёл с Sublime на VIM. В комментариях, как обычно это бывает, появились сообщения в духе "Зачем мне тратить время на Vim, если есть IDE, где всё работает?" (люди даже статьи на эти темы пишут). Хотел внести свои пять копеек, но объём написанного плавно перевёл текст из разряда "комментарий" в разряд небольшой статьи.


    В целом, всё, что ниже — это вкусовщина, конечно. Нравится вам ваша IDE (или ваш текущий инструмент), да и пожалуйста. Используйте для текущих задач то, чем вы владеете лучше всего, это аксиома эффективной работы. Но если у вас вдруг появилось немного времени на повышение вашей эффективности в целом, то попробую вас заинтересовать именно Vim'ом, сравнивая его с некой обобщенной IDE.



    Зачем?


    На мой взгляд минусы любой IDE в сравнении с VIM (или, наоборот, преимущества VIM) следующие:


    • IDE значительно тяжелее VIM (даже с плагинами); отсюда очевидный минус, что для IDE — нужна достаточно мощная рабочая станция.
    • IDE обычно поддерживает небольшое число языков/платформ. Vim же единообразно поддерживает всё на свете. В Vim я пишу на Ruby/Rails, Python (или так), C, OpenCL (+PyOpenCL), CUDA (+PyCUDA), bash, Go, XML, YAML, HTML, Markdown, Textile, CSS, .ini, Sage, Magma, GAP (последние 3 — системы компьютерной алгебры), LaTex, а также редактирую специфические конфиги некоторых программ (типа X, mutt и т.п.) и редактирую почту. Конфиги и почта — это специфический пример, но, что касается языков программирования и разметки, то вам понадобится осваивать несколько IDE со своими особенностями, горячими клавишами и т.п. только потому, что IDE обычно имеет узкий круг поддерживаемых технологий. Vim (как и Emacs) умеет почти всё, и вам не надо заново привыкать к инструменту. Кроме того, создателю плагина надо сосредоточиться только на том, чтобы хорошо сделать поддержку специфических для ЯП вещей, а всё остальное Vim уже умеет. Как следствие, при переходе от одной технологии к другой (условно, сегодня пишете на Ruby, завтра на Python, а потом обратно), вы не лишитесь привычных базовых вещей, как это могло быть при смене IDE, т.к. останетесь в Vim.
    • Vim, как следствие из предыдущего, поддерживает вещи, которые никто другой не поддерживает: попробуйте найдите IDE для Magma. А для Vim всё есть. Объясняется это тем, что для редких вещей создавать IDE неоправданно, а написать базовый плагин для Vim не так сложно.
    • Vim может работать в режиме только консоль. Иными словами с Vim ваш компьютер может быть тонким клиентом. Конкретно в моём случае есть 10-ти летний Full HD ноутбук IBM'овский. Ясно, что его уже на нормальное использование как рабочей станции для программирования не хватает ну никак: тесты на нём будут идти вечность, а упомянутые IDE будут ощутимо тормозить. В тоже время есть доступ по ssh к мощному серверу, на котором в результате и ведётся разработка: гоняются тесты, работает редактор и т.п. Кроме того, связка vim + tmux + ssh — это постоянно открытая рабочая сессия. Начал работать на одной машине (к примеру, на работе), отлогинился не закрывая редактора и т.п., продолжил из дома с ноутбука — чрезвычайно удобно. А в моём случае, так ещё и для некоторых задач основное вычислительное оборудование (несколько GPU) физически воткнуто в сервер, т.е. помимо удобства, описанного выше, быть тонким клиентом ещё и необходимость. Попробуйте-ка проделать всё это в своей IDE!
    • Сама идеология Vim — очень мощная штука в сравнении с классической IDE. Есть книга Practical Vim: Edit Text at the Speed of Thought, её название ("редактируй текст на скорости мышления") прекрасно отражает результат, который вы получаете на выходе. К сожалению, в этом сложно убедить человека, который не попробовал (хотя некоторые пытаются). Суть в том, что эта идеология настолько заразна, что хочется перенести её с редактора на все сферы общения с компьютером: браузер, pdf-просмоторщик, почтовый клиент, музыкальный проигрыватель, файловый менеджер и многое другое.
    • С Vim вам не понадобится мышь, если вы конечно этого захотите (если не захотите, то Vim отлично интегрирован с мышью). Мне больно смотреть, как люди мучаются с тачпадами или носят с собой мышки, располагая их на разных поверхностях, при работе с ноутбуком.
    • Vim невероятно расширяем, любая ваша хотелка так и или иначе реализована или может быть реализована в Vim.
    • Ваша конфигурация для VIM вообще без труда переносится с машины на машину. Будет ли так просто с вашей IDE?

    Если не хватило, вот ещё немного литературы на тему: раз, два, три.


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


    Как?


    Не стоит сразу ставить адские комбайны из чьих-то конфигов. Да, они выглядят круто, но там часто неинтуитивные горячие клавиши, много магии и лишнего. Пройдите vimtutor. Затем ставьте голый VIM (обычно он не такой голый, как кажется на первый взгляд) и работайте. Ну, ок, уговорили. Настройте в vimrc set nocompatible (убрать совместимость с VI) или поставьте sensible (супербазовый vimrc с настройками типа nocompatible), или работайте в neovim (новая в основном совместимая с VIM реализация VIM с человеческими настройками по-умолчанию).


    В процессе работы у вас будут появляться хотелки. Как только появится хотелка, нужно:


    • Поискать, эта функция может быть среди базовых возможностей VIM (а чаще оно так и есть).
    • Если не нашли, то ищите соответствующий плагин и устанавливайте. Плагины советую ставить с помощью vim-plug.
    • Обязательно читайте документацию к установленному плагину (:help <plugin-name>). Она всегда хорошая и понятная!

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


    P.S. На всякий случай дополню: я не утверждаю, что VIM круче IDE в любой ситуации. Я утверждаю, что существуют параметры, по которым VIM круче IDE, и поэтому имеет смысл обратить на него своё внимание. Эти параметры лично для меня существенны, и я их перечислил в параграфе "Зачем?".

    Share post

    Similar posts

    Comments 401

      +23
      IDE значительно тяжелее VIM (даже с плагинами)


      При всей любви к VIM… Был у меня один знакомый евангелист, дал свой vimrc. Ну и оказалось, что запускается по времени примерно столько же, сколько обобщенная IDE, а переименовать функцию, не грепая вручную по всем исходникам, по-прежнему нельзя.
        +4

        VIM я правда люблю и ни за что не променяю на nano или emacs. Но делать из него IDE — ну только если вы правда сегодня на Python, завтра на Clojure, послезавтра на Magma. Плюс для некоторых обобщенных IDE тоже есть туча плагинов.

          –6

          А что значит по-вашему "делать IDE"? При работе с большинством ЯП я добиваюсь в минимальном варианте того, чтобы были:


          • Подсветка синтаксиса
          • Автодополнение
          • Проверка синтаксиса
          • Сборка и прогон тестов
          • Автоотступы
          • Форматирование кода (в соответствии с правилами языка)
          • Сниппеты

          Чаще всего половина этого уже есть в базовой поставке VIM. Остальное 1-2 плагина для языка.


          Это — IDE?

            +19

            Нет, это всего-навсего уважающий себя редактор.

              –4

              А что тогда IDE?

                +21

                Рефакторинг — переименование функций, методов, классов, переменных, параметров, файлов (перименовал/перенес файл — везде поменялись импорты), вещи типа extract variable/method/parameter.


                Умная навигация, как минимум «Jump to definition».


                Кодогенерация (типа сгенерировать моки для этого класса), хотя это отчасти решается сниппетами.

                  0

                  В VIM встроенная навигация по тегам. Чаще всего "Go to definition" реализуется именно так. Но для некоторых языков есть отдельное "go to definition".


                  Для рефакторинга есть много инструментов. Вот тут обсуждаются для нескольких языков и в "общем случае".


                  Т.е. в целом от "уважающего себя редактора" до IDE в вашем определении отделяет одно дополнение с поддержкой рефакторинга? По-моему не такое уж и преступление вкатить плюс один плагин и сделать из вима IDE.

                    +2

                    Ну, в целом, да, рефакторинг для меня самое важное (он не исчерпывается переименованием, кстати). Хотя вот ниже еще указали глубокую интеграцию с VCS, это тоже очень полезно. И не забудьте, вы обещали это для любого языка, а по вашей ссылке список весьма скудный:)

                      +1

                      Ну, что сходу нашёл — на то ссылку дал :) Не ставил перед собой целью собрать максимально полный список. Подозреваю тот, что по ссылке — не полный.

                      • UFO just landed and posted this here
                      +35
                      Принципиально IDE от редактора отличается тем, что IDE оперирует синтаксическим деревом редактируемого кода на целевом языке (или неким к нему приближением), а редактор оперирует символами и строками.
                        –4

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

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

                          Ну и, конечно, для любой нормальной IDE есть vim-плагин, я, например, без IdeaVIM не представляю, как работать :)
                            –1
                            В теории и для основным языков (java, c++) это действительно так. Когда я работал в проекте, где основным backend была java это работало.
                            Правда в том же проекте фронтендщики работали на JS. И для JS этот функционал был неюзабелен. Батарейка ноутбука съедалась мгновенно, и даже автоподстановка для JS подтормаживала.

                            Если же выключить этот функционал, которые генерировал синтаксические деревья, то вся огромная и дорогая идея для JS становилась не очень хорошим клоном вима.
                          +6
                          По моему IDE принципиально отличается тем, что поддерживает отладку. IDE без отладки — и есть всего-лишь редактор.
                            0
                            Но редактор с отладкой не становится IDE, это недостаточное условие. К vim-у или emacs-у отладчик прикрутить — не проблема совсем.
                              0
                              В начале 90-х по сути это было достаточным условием (плюс навигация, плюс запуск билда).
                                0
                                Ну… когда-то и tc.exe из Turbo C считался IDE :)
                                  +1
                                  Ну, он собственно и есть классическая IDE
                      +3
                      Расширенный анализ кода, навигация, переименование, глубокая интеграция с git.
                        +1

                        По навигации и переимнованию, отвечал в других комментах.


                        А что такое глубокая интеграция c GIT, такая интеграция достаточно глубока? И что такое расширенный анализ кода?

                          –1
                          Не знаю, мне лень изучать всё, что там написано. Вот глубокая интеграция, а всякие git checkout master я и сам из консоли делаю обычно.

                          Самый простой пример расширенного анализа — когда IDE находит переменные, которые используются до присвоения. Или когда проверяет, можно ли библиотеку импортировать, нет ли опечатки в её названии.
                            +1
                            Не знаю, мне лень изучать всё, что там написано

                            Пастернака тоже осуждаете?
                              +1
                              Нет, просто в IDE всё это реализуется парой кликов мыши, и время на чтение тратить не нужно.
                                –4
                                Так в GVim тоже есть менюшки, кнопочки, иконки и другие рюшечки, все для мышко-программинга.
                                  –1
                                  Ну да, всё есть кроме самого git-а :)
                                    +2
                                    Вы хотите чтоб git был частью vim? Вам тогда надо смотреть в сторону emacs, если сильно постараться, то можно впихнуть в него ОСь.
                                      +7
                                      Если мне куда-то и надо смотреть, то только в сторону кнопки закрытия браузера, чтобы перестать тратить время на бесполезный холивар.
                                        –2
                                        И вас хорошего дня.
                                      –1
                                      Можно подумать в Intellij IDEA есть гит
                                        0
                                        vim-fugitive.

                                        Очень удобно смотреть диффы.
                                        –6
                                        Забавно читать подобный коммент от пользователя с вашим ником =)
                                          +3
                                          А что не так с моим ником?
                                            –1
                                            Я не говорил, что с ним что-то не так. Просто он вызывает ассоциации с языком Delphi, IDE для которого известна своей ориентированостью на «мышко-программистов».
                                              0
                                              Это ложная ассоциация, мой ник никак с Delphi не связан, поверьте )
                                    –5

                                    Local History — это круто выглядит, но хз насколько полезно. В любом случае, это отдельная от git-фича, я бы не назвал её глубокой интеграцией с git. Насколько я понял, её можно реализовать с помощью eclim. Справедливости ради, я eclim в своё время не освоил, не очень удобно прикручивается.


                                    А расширенный анализ есть, например, для python. Думаю можно найти и для других языков.

                                      0

                                      Реально полезно, если ветки криво смержились, по локал-хистори можно быстро восстановить не попавшие в мерж куски кода.

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

                                        То ли я не знал как, то ли в идее были какие-то проблемы, но мерджи были головной болью, пока не пересел на консоль почти полностью.
                                          0
                                          За последние лет 4-5 никаких проблем с мерджем в Идее не встречал. Вернее там есть/были мелкие баги, которые проявляются при определенных условиях, но явно нет смысла использовать консоль.
                                            0
                                            последние как минимум N (N=7) лет лучшая мержилка на планете (не считая SemanticMerge и, возможно, Visual Studio, про которую я ничего не знаю) как раз в IDEA
                                          +3
                                          Очень полезно, когда надо выяснить, откуда у данного куска кода растут ноги.

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

                                            А это что у вас на картинке, не подскажете?

                                              +2
                                              В смысле? Окно настройки проверок в PyCharm, конкретно — проверка на совместимость с разными версиями питона.
                                                +2
                                                Очень похоже на PyCharm
                                                0

                                                Есть ещё, кстати jedi, мною упомянутый: http://jedi.jedidjah.ch/en/latest/docs/features.html

                                                  0
                                                  У меня процессор AMD A8-6600K. Не могу пользоваться PyCharm — слишком сильно тормозит.
                                                    0
                                                    У меня на Semprone X2 прекрасно работал PyCharm. Не надо жопить пару тысяч на память, и будет прекрасно работать.
                                              +3
                                              Ну, к примеру, в Студии это выглядит так:
                                              image

                                              Коммиты по методу/классу, можно посмотреть сами изменения. Очень удобно.
                                                +1

                                                Неплохо. В VIM как-то так:


                                                image

                                            +4
                                            Шейдеры в VS. Слабо на виме? (Справедливости ради, с шейдерами всегда туго, до VS везде далеко, приходится кусать локти для WebGL).

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

                                            А еще из личного хобби — blueprint в quartus, simulink в matlab, waveforms приходится отображать в других средах.
                                              +1

                                              Я не утверждал, что VIM может всё, что может любая IDE в том же виде. Конкретно с шейдерами, какой-то костыль, вероятно, возможен, но вы правы — не имеет особого смысла.


                                              Я повторюсь, я не призывал всех переходить на VIM, я призывал обратить на него своё внимание!


                                              Дебаг для многих языков есть (есть Vdebug сразу для многих языков: PHP, Python, Ruby, Perl, Tcl and NodeJS, но бывает, что и конкретно под один язык плагинчик). Насчёт графа зависимостей, чтобы прямо в VIM не скажу, чтобы вывел в файлик — это бывает.


                                              По личному хобби неотвечу — много слов незнакомых. Но в целом, с вашим утверждением согласен. Не всё можно сделать в консоли, а, следовательно, не всё можно сделать в VIM.

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

                                                Визуально на картинку смотреть интересно, но не всегда полезно.
                                              • UFO just landed and posted this here
                                                  +1

                                                  Вот вам пример intellisense в vim для Java, C++, C#, JSP, XML, HTML, SQL:


                                                  image


                                                  Интерактивная помощь по параметрам функции в VIM есть для очень многих языков (не только как на картинке).


                                                  Ваши слова имеют смысл особенно в части "если вас устраивает, то и ладно". Полностью согласен. Но я бы назвал некорректной вашу аналогию Vim-IDE и велик-феррари. Vim всё-таки не велик, а условная Нива с движком от феррари, коробкой передач от BMW. И ездить вам не только по автобанам надо, но иногда и по бездорожью.

                                                    +5
                                                    Ещё подкорректиную аналогию:
                                                    VIM — это набор запчастей для условной нивы + попадаются запчасти более высокого качества (но их надо проверять),
                                                    хорошая IDE — условный новенький хаммер из магазина с полным фаршем.
                                                    обычная IDE — условная шевроле нива
                                                      +2
                                                      Похоже, этот плагин:
                                                      1) Windows-only. http://insenvim.sourceforge.net/portlinux.htm — тут, в сломанном HTML, можно прочитать: «We don't have for Linux, but want to port. It
                                                      may be tough, but any help is appreciated.». Увы.
                                                      2) Не обновлялся с 2006 года, уже 10 лет.

                                                      Боюсь, даже если он заведётся и будет работать с современным вимом, вряд ли там будет поддержка возможностей языков, которые они получили за последние 10 лет. А у Java уже две версии как минимум вышли…
                                                        0

                                                        Вы правы, похоже на старье (не обратил внимание, т.к. не пишу на Java). Народ хвалит eclim: http://eclim.org/vim/java/complete.html

                                                          0
                                                          Да, набор возможностей выглядит неплохо. Но отсутствие коммитов с марта настораживает, да и рефакторинг возможен лишь на уровне переименования и вытаскивания классов. Тем не менее, инициатива хорошая, и получилось что-то явно более продвинутое, чем обычный плагин для подсветки синтаксиса.
                                                      • UFO just landed and posted this here
                                                          –6
                                                          «найдите мне вот это и вот это и с перламутровыми пуговицами»
                                                          простите, может и код за вас писать? В таком ключе можно общаться с теми, кому вы баксы за ide заплатили, в случае с vim это открытый проект, где никто вам ничего не должен, не можете сами настроить — вежливо попросите сообщество помочь, а истерики вида «нука нстройте ка мне это, да вот так вот, слабо?» никогда ни к чему хорошему не приводят.
                                                          Иными словами у вас есть возможность бесплатно использовать охрененный редактор, только почитай доки да расширяй по мере надобности, но вам еще все настрой и документацию за вас почитай, и плагины подбери да поставь. Зажрались вы в общем.

                                                          и, к слову, что бы юзать vim на сервере в консоли для мелких правок, хватит 20 минут vimtutor пройти, а не «туеву хучу времени»
                                                          • UFO just landed and posted this here
                                                            • UFO just landed and posted this here
                                                                +1
                                                                Автор заявил, что vim всех рвет


                                                                Вы, пожалуйста, прежде чем такое писать, внимательно прочтите, что такого "автор заявляет". Моя основная мысль состоит в следующем: даже, если вы пользуетесь IDE, то обратите внимание на VIM — у него масса достоинств по сравнению с вашей IDE.

                                                                Совершенно точно, можно утверждать и обратное: у IDE есть достоинства по сравнению с VIM. Я нигде не утверждал обратного.
                                                                  +2
                                                                  > За базар надо отвечать
                                                                  во первых вот и отвечайте за свой базар про «гонор насчет бесплатности» и «Автор заявил, что vim всех рвет».
                                                                  во вторых, есть цель выбрать лучшую IDE — выбирай и успокойся, чего истерить тут, забудь про вим и обходи стороной, никто же не заставляет. Но вы зачем то читаете статьи про vim и зачем то их комментируете.
                                                                  А ну настройте мне, а ну найдите мне, а есть ide тоже бесплатные, это для меня не аргумент — почему кого то должно волновать хоть сколько то, что для вас аргумент? Это ваша личная драма. Вам никто ничего не должен, ваш инструмент — ваши проблемы. Как истерички в самом деле.

                                                                  0
                                                                  alexkuin уже и сам Вам ответил, но я не смог пройти мимо: его комментарий вообще не о том. Смысл не в том, что кто-то должен всё это настроить, а в том, что многие вещи настроить от «очень тяжело» до «невозможно», при этом IDE всё это уже умеет. Сразу. Ну и зачем vim? «Не было печали – купила баба порося» :) Сиди – знай себе настраивай)
                                                                +2

                                                                В IDEA есть например интерграция с фреймворками. В методах, которые требуют ссылок на сервис мне дадут в хинте список описанных в DI-контейнере сервисов. Если метод требует ссылки на темплейт, мне дадут список темплейтов. Если метод ORM требует подстановки свойства сущности, мне дадут список свойств сущностей. Большинство плагинов к редакторам работают на уровне синтаксиса, а IDE пытается вникнуть в семантику. Особенно важно это, когда приходится работать с чужим кодом. Так что тут отличие не количественное, а качественное. Ну и богатые возможности рефакторингу вытекают из этого. Когда IDE начинает "понимать" код, она в каком-то смысле становится не просто инструментом, а соавтором кода.

                                                                  +2
                                                                  Большинство плагинов к редакторам работают на уровне текста, как правило пытаясь парсить его регулярками.
                                                              0
                                                              А что тогда IDE?

                                                              Дебаг, деплой, статический/динамический анализ, профилирование.
                                                                0
                                                                Мне всегда казалось, что IDE — это редактор + сборка + отладка.
                                                                    +1
                                                                    Понятие IDE сильно изменяется со временем. В конце 80-х-начале 90-х стандартом для IDE де-факто было — навигация по файловой системе, редактирование исходников (практически без поддержки синтаксиса), компиляция и сборка (не для интерпретируемых языков, конечно), запуск и запуск в режиме отладки. По сути, главным было редактирование и отладка без переключения в другую программу (в те времена в доминирующей однозадачной ОС переключением было выход из одной программы и запуск другой). Верю, что сейчас это vim может обеспечить практически из коробки. Но сейчас обязательными элементами IDE являются синтаксический анализ на лету (полноценный, а не в первом приближение регулярками), навигация по сущностям языка (опять же по результату полноценного синтаксического анализа), автодополнение с учётом контекста, простейшие методы рефакторинга типа переименования, выделения в метод и т. д.
                                                                      +2
                                                                      Есть масса примеров когда текстовый редактор доводят до уровня редактора кода. Однако IDE (среда разработка) в отличии от прочих редакторов работает с проектом, а не отдельными сущностями…
                                                                        0

                                                                        Как вам тогда это?

                                                                          –1
                                                                          Больше похоже на файловый менеджер, чем на IDE. В IDE зачастую можно работать вообще не думая о файлах, оперируя сущностями языка типа модуля, класса, нэймспэйса. Решаем задачу не «отредактировать код в файле таком-то», а «отредактировать код класса такого-то».
                                                                            0
                                                                            Я ответил конкретно на это высказывание
                                                                            Однако IDE (среда разработка) в отличии от прочих редакторов работает с проектом, а не отдельными сущностями
                                                                              +1
                                                                              Проект — нечто большее, чем совокупность файлов в одном каталоге. Так бы и mc хватило. Главное в проекте — содержимое файлов. IDE должна быть заточена на анализ содержимого.
                                                                    +1
                                                                    Это вы перечислили только одну вкладку Editor вк примеру в phpstorm
                                                                  0

                                                                  Ну понятно, что испортит можно всё, что угодно. Можно написать плагин, который будет делать sleep 10000 и удивляться, чего это VIM такой тормозной :) Если следовать пути, который я указал, и ставить плагинчики через vim-plug (который умеет ленивую загрузку, т.е. грузит, только когда потребуется), то всё будет быстро.


                                                                  А насчёт переименовать, то вот вам плагин на тему, vim-esearch: NeoVim/Vim plugin performing project-wide async search and replace, similar to SublimeText, Atom et al.


                                                                  Ну и, например, для того же Python в Jedi-vim есть соответствующая команда.

                                                                    +1
                                                                    vim-go+gorename — работает отлично.
                                                                    Это все таки задача плагина, а не vim'а, кмк.
                                                                      0
                                                                      а переименовать функцию, не грепая вручную по всем исходникам, по-прежнему нельзя

                                                                      CtrlSF Правда?
                                                                        0
                                                                        правда
                                                                          0
                                                                          нет
                                                                            0

                                                                            признаю, я дальше гифок по ссылке и исходников ag не смотрел, так что вот пару простых вопросов навскидку


                                                                            • отсеиваются ли ложные срабатывания в виде ф-ций с одинаковым именем в разных модулях/классах?
                                                                            • отсеиваются ли ложные срабатывания в виде названий переменных с именем, идентичным имени переименовываемой функции?
                                                                            • что произойдёт, если при «переименовании» зажать клавишу Del/BackSpace?
                                                                              0
                                                                              1. Нет
                                                                              2. Нет

                                                                              По первым двум пунктам речь идёт о статическом анализе кода. Вообще это сильно зависит от языка, с которым вы работаете, и где-то такой анализ просто мешает и раздражает, плохо применим. Вот например у некоторых коллег по работе — WebStorm, от чего-то они его так любят, но он ужасен, его встроенный линтер JavaScript/TypeScript, который, как я понимаю, пытается анализировать код, делает это отвратительно, постоянно сыпя ошибками там, где их в действительности нет, не говоря уже о том, что то и дело врубается форматтер, из-за которого нарушаются стайл-гайды и пулл-реквесты отправляются на доработку (но это уже другая история про хвалёные IDE). CtrlSF же находит вхождения и выводит их в один буфер, который ведёт себя как и любой другой vim-буффер, и всё что ты знаешь о редактировании в vim, — применимо, ты просто рассматриваешь чанки, делаешь в них изменения и затем коммитишь (просто как обычно для vim сохраняешь буффер), можно просто сделать автозамену с подтверждениями по вхождению (что обычно и происходит в моём случае, лично мне этого хватало пока с лихвой). Нужно иметь в виду что я описал только узкий пример возможностей, можно открывать отдельные файлы из буфера вхождений и работать с ними более детально например.

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

                                                                                Если style guide написан разумными людьми и настроек IDE не хватает, чтобы настроить автоформатирование согласно style guide'у, то стоит написать в багтрекер соответствующей IDE. Естественный вопрос: каких настроек не хватило?

                                                                                  0
                                                                                  Честно говоря — понятия не имею, я знаю как минимум пятерых пользователей WebStorm (из разных компаний), и от всех от них постоянно какие-то проблемы, их IDE постоянно портит им работу, как её укротить они по всей видимости не знают, может быть это невозможно, может быть это слишком сложно и проще написать плагин для vim (как это сделал однажды я например, чтобы соответствовать стайл-гайду, после чего у меня никаких проблем не было), может быть стоит усомниться в компетенции разработчиков, кого винить, я не знаю, меня это мало интересует, я вижу лишь тенденцию среди пользователей этой IDE, которая убеждает меня в том, что я как минимум ничего не теряю, не используя её.
                                                                                    0

                                                                                    Судя по коду вашего "плагина" он режет пробельные символы не в конце файла (EOF), а на концах строк (EOL).


                                                                                    думаю, картинка скажет всё

                                                                                    Это тенденция не среди пользователей IDE в общем или IDE от JetBrains в частности, а симптом left-pad'а среди фронтэндеров, к сожалению.

                                                                                      0
                                                                                      Нет, вы неправильно поняли идею плагина. Он режет пробелы/табы на концах строк, но не режет их если в строке ничего кроме табов нет (когда отступы оформляются в виде табуляции), при этом режет пробелы, на концах строк, где есть отступы табами (не трогая при этом табы). При этом не режет табы (но пробелы режет) в закомментированных кусках, т.к. коммент — это уже не пустая строка. В общем в одно предложение суть мне сложно уложить, но делает оно именно то, что я хотел, я уверен, ни в одной IDE нет столько отработанного механизма по крайней мере из коробки.
                                                                                        0

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


                                                                                        Требование наличия отступов в пустых строках тоже выглядит странно: автоотступ умеют почти все нормальные редакторы (e. g., set cindent).

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

                                                                                          Требование наличия отступов в пустых строках тоже выглядит странно: автоотступ умеют почти все нормальные редакторы (e. g., set cindent).

                                                                                          Это не требование, по стайл-гайду мы оставляем табы на пустых строках (например для того, чтобы при подсвеченых символах таба визуально видеть цельный не раздробленный блок), а в комментариях я их не вырезаю именно чтобы потом снова их не добавлять, в случае если код будет раскомментирован. То-есть опять же вы всё поняли неправильно.
                                                                                            +2
                                                                                            > в комментариях я их не вырезаю именно чтобы потом снова их не добавлять, в случае если код будет раскомментирован.

                                                                                            Простите что? Т.е. с тем, что закомментированный код в версионном хранилище — адовый антипаттерн вы не знакомы?
                                                                                            Почему у вас поведения для комментов для пробелов и для табов различается?

                                                                                            PS если вам надо:
                                                                                            — не чистить комменты от пробельных символов (там они имеют совсем другое значение, нежели в коде...) (комментированный код — зло)
                                                                                            — чистить в конце строк пробельные символы (trim-end)
                                                                                            — не чистить пустые строки
                                                                                            то всё это умеет Idea (а значит и WebStorm) из коробки (максимум пару-тройку галок перекинуть).

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

                                                                                            PPS стайл гайд — делающий различие между пробелами и табами (всё это пробельные символы форматирования) на концах строк — говённый стайл гайд. К выводу о том, что ваш стайл-гайд такой я пришёл на основании ваших же путанных объяснений. И причём тут «ограниченная IDE» (которая мешает говнокодить тем, что не поддерживает такой вот говнокод)?
                                                                                              0
                                                                                              В моём случае недостаточно просто не резать непробельные символы на пустых строках.

                                                                                              Простите что? Т.е. с тем, что закомментированный код в версионном хранилище — адовый антипаттерн вы не знакомы?

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

                                                                                              И, с учётом вышеозначенного, где бонус вима перед IDE?

                                                                                              Гибкость например. И я уверен, что то, что я описал на примере вырезания пробельных символов определённым образом, по прежнему не реализована в том же WebStorm или Idea, и это не связано с кривостью рук, если мне вдруг станет скучно, — может я и набросаю какой-нибудь пример с мусорными пробельными символами, покажу вам скринкаст, как с ними справляется вим, а вы в свою очередь можете попробовать доказать мне, что IDE способна на тоже самое, предоставив свой скринкаст.
                                                                                                0
                                                                                                > Данные решения принимал не я, сам бы так делать не стал, но я продемонстрировал что мой редактор позволяет мне подстроиться под заявленные требования, я сейчас не обсуждаю идеологические подходы, а лишь возможности редактора.

                                                                                                Данные подходы расходятся с best-practice, поэтому могут быть не реализованы в IDE (и я буду рад, если выяснится, что они не реализованы — не надо поощрять говнокод).
                                                                                                До кучи — они ещё и проблемы могут принести (как вам такая радость — в генерируемом xhtml в закомментированном участке поймать "--" из переменной? А ведь все xml-валидирующие парсеры дружно прервут парсинг с ошибкой/исключением...).

                                                                                                По поводу примера — можно и без скринкаста (зачем он вообще? вопрос доверия решать? Вас FullHD устроит?)

                                                                                                PS ну и напоследок — в очередной раз: гибкость, облегчающая возможность говнокода — это вред.
                                                                                          +1
                                                                                          > При этом не режет табы (но пробелы режет) в закомментированных кусках, т.к. коммент — это уже не пустая строка

                                                                                          Это что за бредовый стайл-гайд? Во-первых: коммент это коммент (туда может и пустая форматированная строка угодить, ага), не надо его считать куском кода! Во-вторых какие нахрен пробелы/табы на концах строк? Вы уж определитесь в своём стайл-гайде и используйте или то или другое. Иначе получаем бред.

                                                                                          И по IDE от JetBrains (включая вебшторм): by default пробелы в пустых строках не режутся, пробелы в конце кода режутся, пробелы в комментах не режутся. Под пробелами я понимаю настроенный символ (таб или пробелы), используемый для форматирования (by default символ — это пробелы, by default — форматирует отступом по 4).

                                                                                          PS знаете, можно через одно место написать стайл-гайд, а потом жаловаться, что то или иное средство его не поддерживает… но это будет не проблема средства, а проблема стайл-гайда.
                                                                                            –1
                                                                                            Посмотрите мой комментарий выше, где я объясняю в чём суть. Вы также всё неправильно поняли и додумали свою версию того, что в стайл-гайде, которая ничего общего не имеет с реальностью, а плигин режет мусор и пробелы на концах строк, где отступы табами, являются мусором, как и табы на концах не пустых строк, за исключением комментариев (опять же смотрите ссылку на мой другой комментарий.

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

                                                                                    получается, что «грепы для программистов» на самом деле не парсят исходники? тогда чем оно лучше проиндексированного IDEA AST исходников?


                                                                                    где-то такой анализ просто мешает и раздражает, плохо применим

                                                                                    «не работает везде» ⇒ «не нужен вообще»?


                                                                                    его встроенный линтер JavaScript/TypeScript, который, как я понимаю, пытается анализировать код, делает это отвратительно, постоянно сыпя ошибками там, где их в действительности нет

                                                                                    Enjoy your dynamic typing. Справедливости ради, линтер в IDEA можно выборочно заткнуть «здесь, здесь и вот здесь» не сходя с места.


                                                                                    то и дело врубается форматтер, из-за которого нарушаются стайл-гайды и пулл-реквесты отправляются на доработку

                                                                                    1. форматтер конкретно JS/TS/CoffeeScript настраивается довольно гибко и практически на любой вкус
                                                                                    2. конфигурация форматтера хранится в текстовом файле, пригодном для распространения вместе с проектом. Единственное «но» — не поддерживается импорт стиля кода из *lintrc
                                                                                    3. автоформатирование по мере ввода/генерации исходника отключается

                                                                                    А вот вопрос третьего пункта я вообще не понял, к чему он?

                                                                                    К тому, что IDEA при переименовании на месте не даёт редактировать исходник за пределами имени переменной/функции/поля/etc. даёт и при этом немножечко идёт вразнос. Снимаю вопрос, пойду зарепорчу баг.

                                                                                      0
                                                                                      По поводу «умного» статического анализа, — для некоторых языков это реализовано тем или иным образом в vim, вот пример для ознакомления: http://ternjs.net/
                                                                              0
                                                                              удаленный комментарий
                                                                            0

                                                                            промахнулся веткой, комментарий стёр

                                                                              +2

                                                                              То есть вы утверждаете, что этот евангелист нарочно подсунул мне такой плагин в конфиг?:) Простите, трудно в это поверить:)


                                                                              Это понятно, что испортить можно что угодно. Просто обобщенные IDE весят так много не потому, что они такие вредные или кто-то там вставляет sleep 10000, а потому что они умеют много. Бесплатной функциональности не бывает, любая фича занимает место на винте, в памяти и процессорное время для своей работы. (Другое дело, что в VIM ты ставишь только то, что тебе нужно.)


                                                                              Search&replace это хорошо, но если мне надо переименовать метод в одном классе, а в другом одноименный оставить как есть — это не search&replace. Для Python такая команда есть, ок, а для всего остального?

                                                                                0

                                                                                Для go тоже команда (см. комментарий выше), я думаю для большинства языков будет такая возможность.


                                                                                А насчёт евангелиста, ну я к тому, что тот факт, что кто-то создал какой-то адски тормозной конфиг, не отменяет того, что у нормальных людей VIM при той же функциональности быстрее многих (а думаю, что и любой) IDE.


                                                                                Плюс столько же времени грузится != настолько же тяжелый. Есть ещё потребление памяти, скорость работы и т.п.

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


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


                                                                                  Согласен. Однако функциональность еще не факт, что дотягивает, а скорость… ну запускается оно 10 секунд, а не 20 — погоды это не делает.
                                                                                    0

                                                                                    Нормального в смысле "среднестатистического", не хотел никого обидеть. Выбрал неудачное слово, прошу прощения.


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


                                                                                    Ну, во-первых, я не обещал IDE для любого языка, я привёл аргументы почему с моей точки зрения VIM имеет преимущество, а IDE недостаток. Я уверен, можно сколотить подобный список, где конкретное IDE берёт верх над VIM (навскидку отсутствие необходимости в конфигурации, лёгкость входа, полная поддержка языка из коробки и т.п).


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

                                                                                      +2
                                                                                      Но опять же, для большого числа языков, я убеждён, VIM можно нарастить по набору фич до IDE в вашем понимании.
                                                                                      Склонен скорее согласиться. Но будет ли он в результате *критично* быстрее этой IDE? Ну немного быстрее, ну фич почти хватает… шило на мыло.

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

                                                                                      Прямо сейчас я могу поправить файлик на проде в VIM — закрыть баг костылем, что-то вывести в лог, поправить грамматическую ошибку, все это с подсветкой синтаксиса, с отступами, без тормозов. И это прекрасно! Но ставить 30 плагинов в надежде, что он догонит IDE и не будет тормозить — я оставляю другим:)
                                                                                        0
                                                                                        Так купите себе нормальный инструмент для работы! Господи, ну и аргументация. Аш трисёт!
                                                                                          0

                                                                                          А что не так с аргументацией?

                                                                                            +1
                                                                                            да истории про «слабые машины» и «ide жрут». я тут грубовато сейчас выскажусь, извиняюсь, но вот эту тягу наколхозить из говна и палок, чтобы абы как ездило, вместо того чтобы купить нормальный инструмент — я считаю ущербной и тупиковой. рано или поздно всё развалится.
                                                                                              0

                                                                                              Во-первых, это только один из девяти аргументов. К остальным претензий нет?
                                                                                              Во-вторых, я не до конца вас понимаю: вы считаете, что то, что VIM потребляет меньше ресурсов и менее требователен к рабочей станции, минусом?

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

                                                                                        Откройте xml на 10-100MiB в одну строку. Хотя современный vim, вроде просто подсветку начинает отключать после скольких-то десятков килобайт в одной строке. До этого видел его уход в себя.

                                                                                          0
                                                                                          Ну дадите ссылку на такой xml, я может и проведу из любопытства эксперимент.
                                                                                            0
                                                                                            d=$(for (( i=0; i<1000; i=i+1 )) ; do echo -n '<test></test>' ; done)
                                                                                            for (( i=0; i<1000; i=i+1 )) ; do echo -n $d ; done > test.xml

                                                                                            Примерно 13 MiB выхлопа. Ну или наберите в vim'е 1000000i<test></test> или 1000i<test></test>\[^y$$999p, если не хочется ждать несколько минут.


                                                                                            Перемещение в конец строки, всякие w/b в конце строки тормозят адски на 7.4.

                                                                                              0

                                                                                              А есть, кстати, IDE, где не тормозит?

                                                                                                0

                                                                                                В JetBrains IDEA тормозит при первом открытии (т. к. идёт разбор AST), но потом навигация работает шустро и в обычном, и в ideavim режимах. Ну и подсветка синтаксиса тоже работает корректно.


                                                                                                Правда, слишком большие файлы (типа 100MiB xml) уже не индексируются, насколько помню.

                                                                                                0
                                                                                                свежий neovim, подтверждаю дикие лаги
                                                                                    +4
                                                                                    Ни один из этих аргументов не релевантен. Пользуюсь vim'ом.
                                                                                      0

                                                                                      Любопытно стало, а что вас привлекает в VIM?

                                                                                        0
                                                                                        Есть всюду. Либо vi, либо vim.
                                                                                          +2
                                                                                          Не вы ли писали посты про nano, где одна из причин их появления біла: «vim, увы, есть не везде»?
                                                                                            0
                                                                                            Это аварийные ситуации. В реальной жизни всё-таки это живые системы. А что можно ещё в качестве редактора на сервере иметь?
                                                                                              0
                                                                                              nano — аварийная ситуация?
                                                                                                +1
                                                                                                Среда, в которой есть только nano и нет возможности поставить vim — аварийная.
                                                                                        0
                                                                                        а много у вас свистоперделок к виму прикручено? и сколько хоткеев и функций в рутине обычно используете?
                                                                                          0
                                                                                          Лично у меня порядка 50-и плагинов (туда же входят плагины подсветки синтаксиса различных ЯП), из постоянно и часто-используемых плагинов (именно которые добавляют функционал), штук 15 перечислить по памяти могу, много кастомных хоткеев, большинство так или иначе регулярно использую, но обращаю внимание, что соль работы в vim (за что его многие и любят), — это не 5-и ступенчатые аккорды, а гибкие и мутабельные последовательности, таким образом какие-то несколько даже базовых приёма могут быть использованы в разных комбинациях, получая в итоге разный эффект. А вообще набор основных комбо в итоге превращается в набор рефлексов.

                                                                                          Вот чисто для примера w — это перемещение через слово, окончание iw обычно означает «слово», и d — удаление, v — визуальный режим (выделение), c — удаление и переход в режим ввода, далее фантазируем (на самом деле регулярно используемые комбо, которые под коркой отбиваются на автомате):
                                                                                          • diw — удалить слово
                                                                                          • ciw — заменить слово, что-нибудь набрав
                                                                                          • viw — выделить слово

                                                                                          p/P — вставка из буфера обмена перед/после, таким образом viwp — заменить слово тем, что в буфере.
                                                                                          Окончание i+кавычка или скобка — обычно означает всё, что внутри кавычек/скобок, таким образом не уходя от выше-приведённых примеров:
                                                                                          • di' — удалить всё что между одинарных скобор
                                                                                          • ci} — заменить всё, что внутри фигурных скобор, что-нибудь набрав
                                                                                          • vi) — выделить всё, что в пределах круглых скобок

                                                                                          Также взять числовой префикс повторений, Y — скопировали строку, и 10p продублировали её 10 раз.
                                                                                          Как видите, сказать о кол-ве «хоткеев» довольно сложно, у вас есть небольшой набор базовых рефлексов, которые могут свободно комбинироваться между собой.
                                                                                        0
                                                                                        Vim может работать в режиме только консоль.

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

                                                                                          Вроде особых проблем нет. Конкретно у меня проблема не возникла бы, ибо стоит плагин vim-visual-star-search.

                                                                                            0
                                                                                            Дописать (скопипастить) 1-2 строчки в vimrc? Ужас какой
                                                                                              +6
                                                                                              Да, ужас. Потому что я их должен сначала найти (точнее, вырвать у очень доброжелательного сообщества), а потом запомнить, как ими пользоваться. А потом перенести на сервер, если поиск мне понадобится там. И всё это вместо ctrl+c, ctrl+f, ctrl+v.
                                                                                                0

                                                                                                Судя по этому: http://stackoverflow.com/questions/33629796/webstorm-11-multiline-button-for-search-replace-missing в IDEA тоже всё не так просто и только ctrl-f + ctrl-v не хватит, если вы собираетесь искать текст с переносами строк (как у автора в цитируемом вами посте).

                                                                                                  +2
                                                                                                  Давайте ещё по всему багтрекеру пройдёмся, может ещё какой косяк найдём. Да, указанных хоткеев недостаточно, перед тем как жать ctrl+f надо пару строк выделить мышью, чтобы многострочный режим активировать.
                                                                                                    0

                                                                                                    Я просто не в курсе, как это делается в IDEA. Там пишут что-то про alt+m и т.п. Если всё происходит автоматически путём анализа буфера обмена, то вопрос снимается.

                                                                                                      +1
                                                                                                      Не совсем так. В других редакторах достаточно просто скопировать текст, открыть окно поиска и вставить его туда, в IDEA с некоторых пор по ctrl+f открывается однострочное окно поиска, а для того, чтобы открылось многострочное, надо перед нажатием ctrl+f выделить несколько строк. При нажатии сочетания выделенные строки попадут в окно поиска, где их нужно заменить на интересующий фрагмент.
                                                                                                      https://youtrack.jetbrains.com/issue/IDEA-145720
                                                                                                        0
                                                                                                        Слушайте, а вы вообще сидели за нормальной IDE с десятком активных проектов одновременно? За нормальным современным компьютером, где от 16гб оперативки и ссд под систему? А то как-то всё взгляд у вас однобокий.
                                                                                                          0

                                                                                                          Сидел несколько лет назад, тогда правда 16гб не было стандартом нормального компа, это было 4-8Гб. NetBeans, Aptana, Eclipse — это нормальные IDE с вашей точки зрения?


                                                                                                          P.S. После комментариев к этой статье, я увидел, что некоторые IDE, особенно от JetBrains, сильно продвинулись. Возможно, попробую их поставить и для себя сравнить их удобство с VIM. Но, как я писал выше, для некоторых моих задач просто нет такой опции "IDE".

                                                                                                            0
                                                                                                            Лично мне, помимо описанных плюшек, IDE доставляет контролем над проектами. Есть десятки серверов, на которых в десятках мест крутится различный код, и JB позволяет мне весь этот код консолидировать в одном месте, в нескольких локальных проектах, переключаясь между которыми я держу руки на пульсе у всей системы, не шарахаясь с безумными глазами по SSH если что-то где-то надо поменять.
                                                                                                              +2

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

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

                                                                                                                  Ну мы обсуждаем преимущества и недостатки IDE и VIM для разработчика. Вы формулируете ситуацию, в которой с вашей точки зрения IDE удобнее. Я вам указываю, что ситуация нетипичная для разработки, более того, если я правильно понял, что вы имеете ввиду (правка кода на боевых серверах), противоречит общепринятым стандартам. Грубо говоря, удобство IDE в такой ситуации безусловный плюс, но относится ли это к делу?

                                                                                                                    +2
                                                                                                                    То есть по-вашему я пользуюсь «нетипичным» функционалом, иными словами некими костылями, для того чтобы управлять процессом разработки отличающимся от каких-то ваших «общепринятых стандартов»? И по какому-то невероятному стечению обстоятельств IDE покрывает этот функционал. Нет, я всё понимаю, ребята из jetbrains сидели со мной в одном здании, но мамой клянусь, они сами догадались что именно это мне и нужно.

                                                                                                                    простите но мне кажется вы в плену собственных «типичных» шаблонов и продолжать ломать копья тут нет смысла
                                                                                                                      0

                                                                                                                      В VIM есть неплохой плагин для TODO. VIM покрывает и этот функционал. Есть функционал календаря, и тоже неплохо работает. И т.д. и т.п… И да, это как-то отдалённо можно связать с разработкой (ведь разработчику надо где-то записывать задачи и планировать свой день), но это не имеет никакого отношения к дискуссии.


                                                                                                                      До того, как вы упомянули о озвученной функции, мне тоже казалось, что она не имеет отношения к дискуссии, т.к., мне казалось, не должно иметь отношения к процессу разработки. И под управлением проектом, я понимал что-то другое. Но я не истина в последней инстанции, безусловно. И в вашем, например, случае я ошибался. Если вам удобно так работать и IDE решает вашу проблему — то я очень за вас рад.


                                                                                                                      Отмечу только, что для VIM есть несколько плагинов для решения вашей проблемы (если, повторюсь, я её верно понял), вот например с видеодемонстрацией.

                                                                                              +11
                                                                                              На мой взгляд, основная проблема использования Vim/Emacs вместо IDE в том, что они не понимают язык, с которым работает программист. Для редактора это всего лишь текст, он не понимает функции, не понимает синтаксис, не может вывести типы и подсказать параметры для конструктора или метода. Один этот печальный факт для меня перечёркивает все остальные достоинства. Да, Vim быстрый, удобный (если привыкнуть), есть масса плагинов для всего на свете, как и у емакса, подсветка синтаксиса и прочее. Но когда поработаешь достаточно долго в Eclipse или Qt Creator, понимаешь, сколько времени и сил может сэкономить умная IDE.

                                                                                              Например, помимо уже упомянутого переименования с учётом контекста (переменная i превращается в counter только в текущей области видимости, а не по всему коду), и в Eclipse CDT, и в Qt Creator можно выделить фрагмент кода и вырезать его в отдельную функцию. При этом IDE автоматически выведет необходимые параметры для функции и даст им имена, а также выведет тип возвращаемого значения, на месте же фрагмента кода появится вызов новой функции со всеми нужными параметрами. Ваш редактор такое может? (смайлик) На самом деле, редактор такое и не обязан уметь по определению, он всего лишь работает с текстом и не разбирается в том, что в каких-то языках есть строгая типизация, в каких-то нет, и в некоторых случаях можно попытаться угадать, что в данном месте можно написать, учитывая информацию из стандартной библиотеки, синтаксиса языка и видимости функций, переменных и классов в данной точке кода. Простая подсказка по аргументам функции сама по себе здорово экономит время и нервы, т.к. в хорошем коде по именам параметров и их типу уже ясно, что функция хочет. В документацию лезть приходится в разы реже.

                                                                                              Конечно, тут можно привести много контраргументов, например, можно выдавать подсказки по javadoc/jsdoc/phpdoc/etc., а если таковой док не написали, значит, программа/программист плохи, код не документирован и вообще, ваша проблема не в этом. Тем не менее, к хорошему быстро привыкаешь, как вы сами заметили, и хочется носить свой комфорт с собой. Как бы ни тормозили IDE, они тормозят с благой целью. Постоянно поддерживать актуальные знания о всём коде — не самое дешёвое занятие. Поэтому лучше проапгрейдить железо, переехать на SSD, но сохранить удобство понятливой IDE, чем мириться с отсутствием рефакторинга и банального поиска по коду с учётом языка. Например, нужно найти все вызовы метода run() у объектов класса SomeDataProcessor и только у них. Таких методов может быть масса у самых разных классов, включая системные, и редактор для этой задачи бессилен.

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

                                                                                                А для JavaScript?
                                                                                                Пользуюсь Idea, преимущество перед текстовым редактором — только в удобстве переименования переменных/функций.

                                                                                                  0
                                                                                                  Не пишу на JS, использую GWT, он пишет за меня. Разумеется, всё это очень субъективно. Например, в JS провести рефакторинг автоматически вряд ли возможно в принципе, так что тут и обычного редактора хватит. Слишком уж динамический язык. Зато поддержка удобного и быстрого деплоя и хорошая работа с DVCS будет плюсом. Хотя опять же, я ничего более функционального, чем EGit в Eclipse, пока не встречал. Git-Cola больше всех к нему приблизилась, но возможности ручного редактирования индекса в ней нет, к сожалению, да и push часто виснет намертво. Изредка бывает надо закоммитить что-то, чего нет в рабочей копии.

                                                                                                  В целом же, после обвешивания плагинами Vim/Sublime/Emacs получится та же IDE. Не факт даже, что более быстрая при той же функциональности, а скорее всего, менее функциональная, и причины этого я уже описал. Так что стоит ли овчинка выделки, каждый решает сам.
                                                                                                    0
                                                                                                    Более функционального плагина для работы с гитом, чем Magit для емакса я не видел, хотя пользовался и Pycharm и vim-fugitive
                                                                                                  0
                                                                                                  Конечно, тут можно привести много контраргументов, например, можно выдавать подсказки по javadoc/jsdoc/phpdoc/etc., а если таковой док не написали, значит, программа/программист плохи, код не документирован и вообще, ваша проблема не в этом.


                                                                                                  Тут может быть другой контраргумент — современные сайты это солянка из языков и технологий. Допустим для Idea можно собрать плагины для symfony+knockout+jQuery+requirejs+clojure+еще какая-то хрень, чтобы были доки и автодополнение. Но мы получим ту же проблему как если бы собирали свой конфиг для vim/emacs: часть плагинов кривые, каждый плагин делает IDE чуть медленнее. И все равно в итоге будут куски «кода в коде», на которых подсветка и рефакторинг сломается.
                                                                                                    0
                                                                                                    Но мы получим ту же проблему как если бы собирали свой конфиг для vim/emacs: часть плагинов кривые, каждый плагин делает IDE чуть медленнее.


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


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

                                                                                                      Для себя, как уже написал выше, я решил проблему использованием GWT, но понятно, что чаще всего, в случае коммерческой разработки в более-менее долгоживущей компании, выбор уже сделали за вас.
                                                                                                      +1
                                                                                                      Кстати, как найти все вызовы метода у объектов определенного класса?
                                                                                                      +1
                                                                                                      А как например синхронизироваться с Youtrack и ему подобными? Спасибо.
                                                                                                        +1
                                                                                                        Несколько раз (2-3 точно) пытался начать использовать vim для написания кода (просто как текстовым редактором пользуюсь им регулярно). Все эти несколько раз мне это быстро надоедало. В IDE (WebStorm, Idea) все работает сразу из коробки: подсветка, автоформатирование, навигация, рефакторинг, vcs и многое, многое, многое… Джетбрейновские IDE настолько хороши, что ты их просто не замечаешь, я ни о чем не думаю и просто пишу код. Возня с vim — это непрерывный перебор плагинов, каждый из которых в чем-то ущербен, копание в конфигах и несовместимый ни с чем набор горячих клавиш. Не могу понять вимеров…
                                                                                                          +2
                                                                                                          Вот короткий вопрос, какой плагин мне нужно поставить чтоб иметь такой автокомплит?
                                                                                                          image
                                                                                                            0

                                                                                                            Что за язык?

                                                                                                              +1
                                                                                                              JavaScript. Если подскажете как получить такой же результат в VIM — сделаю еще одну попытку.
                                                                                                                +1

                                                                                                                Насколько я понимаю, вам поможет tern_for_vim или tern, интегрированный в YouCompleteMe.

                                                                                                                  +3

                                                                                                                  На деле же, tern работает через раз: иногда виснет, иногда выдаёт чушь.

                                                                                                                    +5
                                                                                                                    Ок, нашел время на эксперимент. Помучился немного с установкой YouCompleteMe и…

                                                                                                                    image

                                                                                                                    Неплохо, честно признаюсь, не ожидал.
                                                                                                                    Попробуем что-нибудь посложнее:

                                                                                                                    image
                                                                                                                    image

                                                                                                                    Oops…

                                                                                                                    Нет, пока не вижу причин переходить на VIM.
                                                                                                                0
                                                                                                                Короткий контрвопрос: а если строчку с объявлением переменной p вынести в другой файл, а потом подключить его через php-шный инклуд, то вывод типов сработает?

                                                                                                                А если допустим все даже будет в одном файле, но этот файл будет php-шаблоном и иметь такой вид:

                                                                                                                let p = Promise.resolve(new Date({% if startDate is defined %}"{{startDate}}"{% else %}"2015-01-01"{% endif %});
                                                                                                                
                                                                                                                p.then((d) => d.???
                                                                                                                


                                                                                                                Может так конечно писать и нельзя, но ведь пишут же.
                                                                                                                  +1
                                                                                                                  Естественно сработает, вы думали что для IDE весь проект пишется в одном файле?

                                                                                                                  Хотя да, для IDE многие проекты пишутся особым образом.
                                                                                                                  0

                                                                                                                  Ого. Похоже JetBrains далеко ушли от "подставить все слова, что есть в файле, в autocomplete" в JS. И часто подобная "магия" срабатывает?

                                                                                                                    +5
                                                                                                                    Достаточно часто, чтобы имело смысл платить за WebStorm.
                                                                                                                  0
                                                                                                                  Подобный автокомплит для JS реализуется через Tern. Соответственно, наверняка есть плагин и для вим. Ах да, вот и он.
                                                                                                                  –14
                                                                                                                  Джетбрейновские IDE настолько хороши, что ты их просто не замечаешь, я ни о чем не думаю и просто пишу код

                                                                                                                  Помнится на моей предпоследней работе меня пытались перевести на PHPStorm (до того около двух лет сидел на нем под свободной лицензией). Положил я мышку поближе, открыл проект, создал новый файлик для будущего класса, набираю, значить, «class », и ничего, IDE ставит мне табуляцию после ключевого слова. Ок — думаю я — забыл настроить. Залез в конфигурацию сниппетов, написал решение для генерации класса, сохранил. Радостно создал класс из снипета. Набираю дальше «pub» и ничего, IDE мне ставит пробел после pub. Точно уже не припомню, но вроде нашел плагин для автодополнения ключевых слов по пробелу. Довольный захожу в каталог models/Application/Services, создаю в нем файл MailService, открываю его и… IDE открывает мне пустой файл. Опять лезу в настройки, прописываю шаблон для php файлов, удивляюсь что шаблоны не завязаны на каталогах. Открываю файл для будущего сервиса повторно, а у меня там namespace не правильный. Злобно жму на клаве ":q", а IDE не реагирует. Ну и матерился же я тогда.
                                                                                                                  • UFO just landed and posted this here
                                                                                                                      –2
                                                                                                                      Я для вас diff сделаю, чтоб было заметно:
                                                                                                                      Помнится, на предыдущей работе меня пытались посадить за праворульную тойоту-электромобиль (до этого трактор беларусь водил)

                                                                                                                      Помнится на моей предпоследней работе меня пытались перевести на PHPStorm (до того около двух лет сидел на нем под свободной лицензией)
                                                                                                                      • UFO just landed and posted this here
                                                                                                                          0
                                                                                                                          Только не понял, при чем тут :q в конце

                                                                                                                          Это я о привычках. Многие новички проклинают Vim за то, что в нем нет привычных команд. Вы в их числе? )
                                                                                                                          кстати, разве у него есть свободная лицензия?

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

                                                                                                                          Что за вимосвкие паттерны? Сниппеты и шаблоны?
                                                                                                                          Кстати, трактор беларусь я не ругаю, никоим образом! Попробуйте легковой тойотой вспахать поле. ;) Вим — отличная штука. Шторм — отличная штука. Пользуюсь и тем и другим, счастлив и доволен.

                                                                                                                          Я не тот, кто с этим спорит )
                                                                                                                          • UFO just landed and posted this here
                                                                                                                              0
                                                                                                                              Только вы начали со шторма, а закончили вимом

                                                                                                                              А есть разница с чего я начал и чем закончил? Многие плюются на Vim потому, что в нем нет привычных функций, я вот плюнул на IDE потому что в ней нет привычной комбинации. Что я сделал не так?
                                                                                                                              что был шторм со свободной лицензией

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

                                                                                                                              Ну как бы да, я привык к тому, что в каталоге Modules/ у меня все новые файлы заполняются таким шаблоном, а в каталоге Services/ другим, и namespace правильно выставляется. Это паттерн Vim? А более менее умные сниппеты тоже только в Vim существуют? Сомневаюсь.
                                                                                                                              И о чем тогда ваш комментарий? О том, что ваше рабочее место оказалось с затертыми дефольтными конфигами?

                                                                                                                              О том что IDE из коробки этого не может, как и Vim.
                                                                                                                              • UFO just landed and posted this here
                                                                                                                                  0
                                                                                                                                  Вы либо излагаете аргументы, а оппонент, пользуюясь общим с вами знанием человеческого языка и предметной области, их интерпретирует и отвечает контраргументами, или вы выдаете рандомные бессвязные фразы, и оппонет удаляется с поля брани

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

                                                                                                                                  Я хочу магию, чтоб редактор знал что мне нужно в конкретном файле, конкретного каталога. Vim умеет, моя IDE (на тот момент) не умела. Так в чем проблема? Я плохой, что такое придумал?
                                                                                                                                  никак не является паттерном шторма

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

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

                                                                                                                                  Я о том и говорю что — тоже не может. Читайте внимательно, пожалуйста, мои комменты. Вы упускаете суть, а она важна.
                                                                                                                                  . А вот ИДЕ как раз может из коробки создавать дерево файлов по вашим классам

                                                                                                                                  Но не может заполнить файл шаблоном на основе каталога и сформировать namespace автоматически. И что это еще за дерево файлов по моим классам?
                                                                                                                                  • UFO just landed and posted this here
                                                                                                                                      0
                                                                                                                                      А можете повторить тот вопрос, который я поставил во главу угла и на который не ответил?

                                                                                                                                      А есть разница с чего я начал и чем закончил?

                                                                                                                                      откуда у вас между двумя периодами работы в шторме поивились неожиданные для иде требования

                                                                                                                                      Шторм -> Vim -> Попытка вернутся в Шторм.
                                                                                                                                      Не на вим, а на настроенном вим с тучей плагинов и непростым конфигом

                                                                                                                                      Ну так себе утверждение конечно, но да, и Шторм надо настраивать, и Vim. Почему многие приводят необходимость настроки среды разработки под себя, как некий минус этой среды?
                                                                                                                                      Ну, просто дело делается не так, как для вас логично. Так и вим может работать не так, как кому-то логично

                                                                                                                                      Не столько логично, сколько — Удобно. Зачем мне заполнять в Шторме имя класса, его namespace и т.д., если Шторм может это получить из файла и его расположения. Понимаете к чему я веду?
                                                                                                                                      так уж совпало, что мои ожидания не были испорчены тем вим-плагином

                                                                                                                                      У вас испорчены, у меня улучшены. Для вас есть только одна модель создания и заполнения класса, для меня их множество (контексто-зависимые). Видите, IDE вам диктует правила работы, а я свободный человек )
                                                                                                                                      Если другие преимущества перевешивают это неудобство, то почему бы и не переучиться?

                                                                                                                                      Да я прекрасно умею пользоваться Штормом. Переходить стоит от того, что IDE знает язык, на которым я пишу, а Vim нет, это серьезное отличие, особенно для человека, который пилит инструмент под себя.
                                                                                                                                      Может, работодатель заставляет?

                                                                                                                                      Все пытались, но не заставляли.
                                                                                                                                      Речь о PSR-4.

                                                                                                                                      А зачем это вообще может быть нужно? В смысле вы создаете классы, а IDE вам их по папкам расскидывает?
                                                                                                                                      • UFO just landed and posted this here
                                                                                                                                          –1
                                                                                                                                          это, по моему замыслу, поясняло разницу.

                                                                                                                                          нисколько
                                                                                                                                          Но еще раз о разнице: настройка иде — клики по галкам, настройка вима — плагины, конфиг, перезапуски, отладка конфига

                                                                                                                                          Таки да, Vim не слишком графический редактор )
                                                                                                                                          Т.е. удобно то, что привычно, что первое

                                                                                                                                          Удобно это еще когда — захотел и сделал.
                                                                                                                                          А где видно, что у меня только одна модель создания и заполнения класса?

                                                                                                                                          Ну так — нажал «Создать класс», заполнил пару полей, доволен. Есть еще варианты в Шторме без подключения плагина?
                                                                                                                                          Кстати, отверка вам диктует, как ее держать и как винтик крутить — вас это не напрягает?

                                                                                                                                          Когда напрягает, я ищу подходящий инструмент.
                                                                                                                                          А вим вам диктует модальность — не напрягает

                                                                                                                                          Что за модальность такую диктует Vim?
                                                                                                                                          Не напрягает — потому что привычно, а привычное — удобно

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

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

                                                                                                                                          Давайте исключим слово — общепринятый — хорошо? )
                                                                                                                                          Строго говоря, с точки зрения стандарта: рекурсивно создаете директорию неймспейса

                                                                                                                                          Так дело не только в неймспейсе. Я, к примеру, хочу определенный шаблон для тестовых классов, классов моделей, контроллеров и сервисом.
                                                                                                                                          • UFO just landed and posted this here
                                                                                                                                              0
                                                                                                                                              Этот диалог можно продолжать долго, но боюсь мы ни к чему не придем, видимо кто то из нас не хочет слушать собеседника.
                                                                                                                                              • UFO just landed and posted this here
                                                                                                                                                  0
                                                                                                                                                  Хабр не лучшее место для этого, поверьте. Если вам действительно интересно, можно переговорить в скайпе.
                                                                                                                                                  • UFO just landed and posted this here
                                                                                                                                                      +1
                                                                                                                                                      Хабр — не лучшее место для приобретения навыков?

                                                                                                                                                      Хабр это место, где тебе могут слить карму за то, что ты идешь против модного, современного, молодежного. Вы об этом не знали? Будьте в курсе. Если вы хотите приобретать навыки, то читайте статьи и общайтесь с коллегами, комментарии на хабре не лучшее место для этого.

                                                                                                                                                      Ну ок, как я понимаю, вам важнее ЧСВ, нежели диалоги. Дайте мне уже тогда конкретное решение тех тасков, что я привел в моем первом комментарии этой ветке. Не отмазки типа — а в IDE этого не нужно, это ваши шаблоны — а конкретное решение для IDE или Шторма (если вам так угодно). Это мой use case и я хочу чтоб это так работало.
                                                                                                                                                      • UFO just landed and posted this here
                                                                                                                                                          0
                                                                                                                                                          Вы сводите хабр к карме?

                                                                                                                                                          Слейте себе карму в -50, а потом напишите мне в комменты, что есть хабр, ок?
                                                                                                                                                          На счет настройки вашей иде

                                                                                                                                                          Слив засчитан. Наверно дело было в том, что " в огороду бузина, а в киеве дядька", верно? ))

                                                                                                                                                          А самое интересное во всем этом пустом диалоге то, что когда пользователь Vim говорит — мне это в редакторе не нужно — ему отвечают — не нужно потому что Vim не умеет, ахаха — но когда чего либо не умеет IDE (не умеет от слова «мастер не способен заточить инструмент»), то это проблема пользователя, а не IDE, это он плохие таски ставит перед инстументом )) Я не желаю продолжать больше этот монолог, он не имеет смысла и не несет для меня никакой пользы. Вам счастливо зарабатывать по 100 у.е. в час ;)
                                                                                                                                                          • UFO just landed and posted this here
                                                                                                                    0
                                                                                                                    У меня процессор A8-6600K и джетбрейновские IDE (конкретно PyCharm) виснут так сильно, что я просто не могу ими пользоваться — эти тормоза перекрывают все удобства. По сравнению с этим лагодромом даже IDLE удобнее.
                                                                                                                    • UFO just landed and posted this here
                                                                                                                        0
                                                                                                                        Спасибо за совет, попробую.
                                                                                                                      0
                                                                                                                      Для Intellij Idea есть плагин ideavim. Вы им пользуетесь?
                                                                                                                        +1
                                                                                                                        Нет, не пользуюсь. Я если честно вообще не люблю ничего настраивать, привычка использовать все дефолтное имеет свои плюсы, позволяет комфортно себя чувствовать за любой машиной, любой операционной системой, любым редактором (ну почти :) в emacs я немного теряюсь ))
                                                                                                                          +1
                                                                                                                          Vim хорош тем, что в нём есть режим вставки, нормальный режим и режим выделения, а не плагинами и не легковесностью. Критика вима, соответсвенно, сводится к критике наличия этих режимов. Если вы сравниваете вим с IDE, то очевидно вы неправильно понимаете зачем вим вообще нужен.
                                                                                                                          Если бы вы сказали, что идея со включеным эмулятором вима лучше чем просто вим, или что блокнот лучше вима, потому, что там не надо переключаться между режимами — было бы понятно что вы имеете в виду.
                                                                                                                          А так ваша аргументация сводится к тому, что IDE лучше текстового редактора. Не обязательно вима, а вообще любого.
                                                                                                                            +3
                                                                                                                            Обратите пожалуйста внимание на заголовок поста:
                                                                                                                            VIM: зачем, если есть IDE, и как?
                                                                                                                            Я может быть и сравниваю, но не я это начал :) И в первом своем комментарии, я указал на то что сравниваю я в контексте написания кода.
                                                                                                                            А так ваша аргументация сводится к тому, что IDE лучше текстового редактора. Не обязательно вима, а вообще любого.
                                                                                                                            Именно так, для написания кода в большом проекте — IDE лучше текстового редактора. Не обязательно вима, а вообще любого. Только приверженцы вима и емакса больше других склонны спорить с этим утверждением.
                                                                                                                              0
                                                                                                                              Мне кажется, что если дать определение IDE, то выяснится, что вим с набором плагинов этой самой IDE является. И соответственно можно будет сравнивать вим с конкретным набором плагинов с конкретной IDE, а не вим с IDE вообще. И это будет хорошее сравнение. Возможно не в пользу вима с конкретным набором плагинов.
                                                                                                                                0
                                                                                                                                Сильно зависит от определения. Например, включено ли в него обязательным пунктом полноценный синтаксический анализ в фоне.
                                                                                                                                  0
                                                                                                                                  Синтаксический анализ к виму прикручивается плагинами. Можно прикрутить clang для С++, для C# есть какой-то демон, который интегрируется с чем хочешь и есть для Go плагин, который использует стандартные тулзы.

                                                                                                                                  Определением конечно можно поиграть и обратить внимание на то, что у вима вообще проблемы со словом бекграунд, но по моему они не то чтобы очень принципиальны в данном случае.
                                                                                                                                    0
                                                                                                                                    Вы под синтаксическим анализом что имеете в виду? Анализ на синтаксическую корректность или полное построение модели проекта, например, с целью автоматического вывода типов для контекстного автодополнения?
                                                                                                                                      0
                                                                                                                                      Полное построение модели проекта. Как, например, clang это делает.
                                                                                                                      –6
                                                                                                                      Пользуясь обилием в комментариях пользователей IDE, спрошу. Господа, а что вы собственно говоря постоянно переименовываете и зачем?
                                                                                                                        +7
                                                                                                                        Ну так: красная полоска, зеленая полоска, рефакторинг.
                                                                                                                          +10
                                                                                                                          Бывает, функция оказалась названа неудачно. Банальная малозаметная опечатка, либо же функциональность немного изменилась/расширилась в процессе разработки. Такое случается, и лазить с грепом по всему коду не всегда оказывается продуктивно. Или были две функции с одинаковым именем (например, add), но разными аргументами, на какой-то стадии разработки стало ясно, что их поведение теперь значительно отличается (одна стала более интуитивно понятна как insert). Переименовать одну, не затронув другую, без IDE затруднительно.
                                                                                                                            –9
                                                                                                                            В том-то и дело, что вы вроде как пищите очевидные и правильные вещи, но я сталкиваюсь обычно только с необходимостью переименования когда архитектура подожмет, а такое бывает довольно редко. Эх, хоть бери да устраивайся в бодишоп, чтобы ходить и заглядывать людям через плечо, наблюдая за методикой их программирования.
                                                                                                                              +1
                                                                                                                              Но всё же, если архитектура подожмёт, лучше иметь такое средство, чем не иметь, не так ли? Бывают и другие случаи. Например, поскольку английский язык мне не родной, я могу неправильно выбрать слово для названия переменной или функции. Особенно, когда речь идёт о бухгалтерских приложениях и прочем матучёте. Живой пример: как назвать уволенного работника? Exempted? Fired off? Discharged? Dismissed? Released? Масса вариантов. В большой команде наверняка есть специально обученные люди, которые дадут однозначный и верный ответ на этот вопрос, и ответ будет записан в глоссарий, которым потом другие будут пользоваться. Так получилось, что я пишу софт один, с недавнего времени, вдвоём. Когда кода много, можно запросто в одном месте использовать одно слово, а в другом другое, и всё это будет выглядеть запутанно и плохо. Или же наступит такой день, когда сей вопрос для меня полностью прояснится, и тогда будет правильно переименовать все функции и переменные как положено. Когда в проекте 10-15к строк, провернуть такую операцию без особого риска причинить collateral damage в коде не так-то легко, даже если используется IDE. Но она, по крайней мере, может сильно уменьшить количество ручных правок.
                                                                                                                                +1
                                                                                                                                Ещё бывает, что надо посчитать сумму чего-либо. Посчитал, положил в переменную sum. Позже выяснилось™, что таких сумм может быть несколько, и их общая сумма тоже нужна. Ну ладно, вот вам переменная total. После третьего уровня суммирования становится несмешно, и появляется необходимость упорядочить этот зоопарк сложения, и здесь будет, наверно, правильным переименовать безликие переменные во что-то определённое, типа totalWares, totalInvoices и прочее.
                                                                                                                              +2
                                                                                                                              Вообще рефакторинг — это далеко не только переименования, лично я ещё пользовался:

                                                                                                                              — выделить абстрактный класс с общим функционалом
                                                                                                                              — перетащить общий функционал в класс-предок
                                                                                                                              — вынос константы
                                                                                                                              — вынос переменной
                                                                                                                              — вынос куска кода в виде функции

                                                                                                                                0
                                                                                                                                Не подскажете, как это всё сделать в Zend Studio?
                                                                                                                                  0
                                                                                                                                  Не подскажу — пользуюсь продуктами JetBrains (если быть точным — Idea, т.к. основной язык программирования — java).
                                                                                                                                  PhpStorm вам не подходит?
                                                                                                                              +7
                                                                                                                              Лично я — почти ничего

                                                                                                                              image

                                                                                                                              Но вот остальное…
                                                                                                                                +1
                                                                                                                                Что-то не густо у вас
                                                                                                                                image
                                                                                                                                0

                                                                                                                                Пишу на JavaScript. Использую SublimeText 3 (не Vim, но и не IDE). В последнее время немножко вожусь с кодом на Scala. Учитывая как долго эта дурь компилируется мне чертовски не хватает IDE фич, вроде умного autocomplete, подсказок по наведению на слово, подсветки грубых и не только ошибок, jump to definition и т.д… Я понимаю, что в рамках инфраструктуры Scala, мой текстовый редактор попросту каменное орудие. В то время как существуют такие IDE как Idea.


                                                                                                                                Насколько я понимаю, используй я не ST3, а Vim или Emacs, я бы точно также чувствовал себя словно пещерный человек. Такие языки просто генетически предрасположены к синтаксическому анализу и соответствующим возможностям. А вот на JavaScript-е писать да, и Vim и ST3 и Emacs и что-нибудь более модное типа атома, это просто вкусовщина. Чуть завернул какой магии сложнее 2+2 и IDE сдулась :)

                                                                                                                                  0

                                                                                                                                  см. выше про анализ кода и JS.

                                                                                                                                    0

                                                                                                                                    Вы ими пользовались? Просто подобные штуки есть и под Sublime. Я пробовал ими пользоваться. Удалил через 5 минут. Жалкая пародия на IDE. Оценить конкретно эти плагины не могу, т.к. я из категории тех людей, которые случайно открыв Vim, потом 10 минут разбираются как его закрыть :) Хотелось бы услышать мнение о работе этих плагинов для Scala, C#, Java, C++ и пр.

                                                                                                                                      0

                                                                                                                                      Конкретно теми, что по ссылке — нет. Но в интернетах хвалят.

                                                                                                                                      0

                                                                                                                                      Посмотрел на Tern для ST3. Jump To Definition, просмотр документации и rename в простых случаях умеет. Это конечно не IDE, но уже что-то. Спасибо за наводку.

                                                                                                                                  +3
                                                                                                                                  Я много читал про Vim и чаще всего — хвалебные речи. Подумываю попробывать перейти на него, но у меня созрели вопросы.
                                                                                                                                  В IDE я могу сделать пошаговую отладку, заглядывая на каждом шаге в регистры процессора и это иногда очень важное и необходимое действо. Возможно ли в Vim'е сделать подобное? Ну и выше уже писали про умный рефакторинг кода с автоматической вставкой отрефакторенного
                                                                                                                                    +9
                                                                                                                                    > IDE значительно тяжелее VIM (даже с плагинами);
                                                                                                                                    … именно поэтому у моего коллеги VIM отъел больше 2 гб озу, где-то как мой Eclipse. Я уже молчу про то, что в современном мире это не имеет никакого значения.

                                                                                                                                    > IDE обычно поддерживает небольшое число языков/платформ.
                                                                                                                                    Большинство программистов работает с весьма ограниченным стеком языков.

                                                                                                                                    > Vim может работать в режиме только консоль.
                                                                                                                                    Спасибо, у меня есть Remote Desktop. Да, я не админ, всего лишь программист.

                                                                                                                                    > Сама идеология Vim — очень мощная штука в сравнении с классической IDE. Есть книга Practical Vim: Edit Text at the Speed of Thought, её название («редактируй текст на скорости мышления»)
                                                                                                                                    Я думаю медленее, чем печатаю. Хотя, конечно, можно просто сказать, что я плохой программист. Я уже молчу о необходимости чтения специальных книг по редактированию текста, вы серьёзно вообще? Некоторые неплохие программисты даже печатать вслепую не умеют…

                                                                                                                                    > С Vim вам не понадобится мышь, если вы конечно этого захотите.
                                                                                                                                    Мышь чертовски удобна для скролла по файлам и перехода в нужное место. Я не понимаю в чем профит от НЕиспользования мыши: когда ты набираешь код, то обычно ты вбиваешь один большой последовательный блок, ± пара линий вверх-вниз (стрелочки). В остальных случаях мышь не является тормозом.

                                                                                                                                    > Vim невероятно расширяем, любая ваша хотелка так и или иначе реализована или может быть реализована в Vim.
                                                                                                                                    Опять же, я, наверное, плохой программист, но я хочу, чтобы инструмент работал из коробки (настроить только хот-кеи/форматирование кода).

                                                                                                                                    > Ваша конфигурация для VIM вообще без труда переносится с машины на машину. Будет ли так просто с вашей IDE?
                                                                                                                                    Да. Все современные IDE поддерживают иморт/экспорт настроек. Но как я упомянул выше, настройка занимает минут 15, так что можно если что настроить с нуля.

                                                                                                                                    У меня на работе куча народу пользуется VIM, но как по мне это до ужаса неудобно. Каждый раз сердце кровью обливается, когда человек вбивает команду в консоли, чтобы открыть файл или добавить его в чендж лист. Или вбивает команду, чтобы проскроллить файл. Так что сейчас, в 21-м веке, я предпочту пользоваться благами цивилизации (IDE).

                                                                                                                                      –3
                                                                                                                                      Или вбивает команду, чтобы проскроллить файл

                                                                                                                                      Это что за команда такая? :normal j?
                                                                                                                                      Каждый раз сердце кровью обливается, когда человек вбивает команду в консоли

                                                                                                                                      Знали бы вы как я страдаю, когда вижу дергание рук между FJ и мышкой/тачпадом.
                                                                                                                                      Bro
                                                                                                                                      image
                                                                                                                                        +1
                                                                                                                                        Не помню точно, но в там определенно есть что-то вместо/алтернативно shift+end.

                                                                                                                                        > Знали бы вы как я страдаю, когда вижу дергание рук между FJ и мышкой/тачпадом
                                                                                                                                        Руками двигать полезно :) Ну и я не понимаю, в чем выигрыш от вбивания имени файла (которое еще и забыть можно) в отличие от выбора файла в дереве мышкой. Опять же, навигация и кодинг — более-менее разделенные процессы. Мне весьма редко приходится одновременно редактировать десяток файлов.
                                                                                                                                          0
                                                                                                                                          А что делает shift+end? Переход в конец строки? Там для этого shift+4, но я предпочитаю shift+a
                                                                                                                                          Руками двигать полезно

                                                                                                                                          Не особо, если это отвлекает от процесса набора текста.
                                                                                                                                          от выбора файла в дереве мышкой

                                                                                                                                          Как правило (как правило!), один каталог проекта может содержать десяток файлов и папок, и чтоб выбрать нужный файл мышкой (или не мышкой), нужно сначала найти этот файл в списке. Сделать это можно путем последовательного чтения всех файлов (можно мышкой двигать сверху вниз, чтоб не сбиться, а можно стрелку вниз или j нажимать) или набрав какую нить поисковую команду. Заслуги IDE или редактора тут нет, кому как привычнее.
                                                                                                                                          Мне весьма редко приходится одновременно редактировать десяток файлов

                                                                                                                                          Мне постоянно приходится это делать. Как правило это четыре типа файла: Модель, Контроллер, Шаблон, Библиотека. Удобно, когда каждый в своей вкладке, а вкладки могут делится на подвкладки.
                                                                                                                                            0
                                                                                                                                            > А что делает shift+end?
                                                                                                                                            Ctrl+end, ошибся. Стандартный шорткат перехода в конец файла (ну, кроме особых программ вроде вима).

                                                                                                                                            > Не особо, если это отвлекает от процесса набора текста.
                                                                                                                                            Когда я выбираю файл, я не набираю текст.

                                                                                                                                            > Как правило это четыре типа файла: Модель, Контроллер, Шаблон, Библиотека.
                                                                                                                                            Для этого есть табы (вроде есть даже хоткеи для перехода по ним, хотя я обхожусь без них обычно).
                                                                                                                                              0
                                                                                                                                              Ctrl+end, ошибся. Стандартный шорткат перехода в конец файла

                                                                                                                                              В Vim проще, для этого есть shift+g.
                                                                                                                                              Когда я выбираю файл, я не набираю текст

                                                                                                                                              Вы мышкой пользуетесь только для выбора файла? Похвально, вам осталось совсем чуть чуть ;)
                                                                                                                                              Для этого есть табы

                                                                                                                                              Да, я знаю. Замечательная штука, не правда ли?
                                                                                                                                              • UFO just landed and posted this here
                                                                                                                                                  0
                                                                                                                                                  Если вы в режиме нормал, то Shift-G, да

                                                                                                                                                  А зачем вам прыгать в конец файла в режиме insert? Вы перешли в insert mode, набрали текст, вышли из него, пошли гулять по файлу. В Vim так принято работать.
                                                                                                                                                  Я к тому, что в вим не проще — в разных режимах по-разному, и у вас не получится учить режимы отдельно, т.к. для работы нужны практически все они

                                                                                                                                                  Мне кажется, вы просто не привыкли к режимной модели Vim, потому вы пытаетесь серфить по файлу в insert mode, что не есть хорошо.
                                                                                                                                                  А вот Ctrl-End — универсальный шорткат для для любой текстовой области в любом вин-приложении

                                                                                                                                                  Да, если я сейчас сяду за блокнот, то мне будет очень неудобно. Но блокнот и рефакторить не умеет, так что теперь, не пользоваться благами IDE? Так себе аргумент.
                                                                                                                                                  А Ctrl-End — универсально везде

                                                                                                                                                  У меня Vim везде.
                                                                                                                                                  • UFO just landed and posted this here
                                                                                                                                                      0
                                                                                                                                                      А я новичок

                                                                                                                                                      Когда я говорю, что «в Vim проще», я не имею ввиду новичков и кривую обучения.
                                                                                                                                                      Я только сказал, что на вопрос «как мне переместиться в конец файла?» вимер должен дать ответ в контексте режимов

                                                                                                                                                      Совершенно верно.
                                                                                                                                                      Можно научиться, конечно, но почему бы не воспользоваться своими же бест практисес из программирования и не перестать множить сущности, начать повторно использовать скилы?

                                                                                                                                                      От того, что некий антипаттерн все повсеместно используют, я не начну им так же повсеместно пользоваться. Все просто.
                                                                                                                                                      • UFO just landed and posted this here
                                                                                                                                                          0
                                                                                                                                                          И второе явно не «проще» первого, потому что упоминает еще и концепция режимов

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

                                                                                                                                                          Да именно это я и подразумиваю под простотой.
                                                                                                                                                          • UFO just landed and posted this here
                                                                                                                                                              +1
                                                                                                                                                              как проверите (или переключите) режим

                                                                                                                                                              Это делается на автомате. Обычно вимеры не сидят в insert mode, ввели что то и сразу вернулись в normal mode. Потому проверок не требуется.
                                                                                                                                                  +3
                                                                                                                                                  > Вы мышкой пользуетесь только для выбора файла?
                                                                                                                                                  Не только. Речь не о мышке, а об интеграции: в текстовом редакторе нет дерева файловой системы, нет интеграции с контролем версий, нет интеграции с билдом и тестами, нет подсветки синтаксических ошибок, нет интеграции с дебагом, нет языко-зависимого рефакторинга. А если вы каким-то образом добились всего этого в VIM c помощью дестяка-другого плагинов (не буду врать, не знаю, насколько это возможно), то поздравляю, вы собрали кривую IDE на коленке с VIM-mode вводом текста.
                                                                                                                                                    0
                                                                                                                                                    вы собрали кривую IDE на коленке с VIM-mode вводом текста

                                                                                                                                                    Разница между моей IDE и любой другой в этом случае будет в?