Pull to refresh

Comments 78

На Хабре новый тренд — делать сериалы из статей. Только завершилась мыльная опера про необразованную молодёжь и малосерийный триллер про хирурга-тимлида, как появился новый — про VIM. Лично я спродюссировал бы пару серий о VIM, потому что нежно его люблю, правда, уже год ввиду смены профессии не использую.
Ну нет уж, староват я на такие перемены. Видеопродакшеном балуюсь понемногу.
Что, в vim нет режима для монтажа видео? Ну вооот…
[ИронияНаГраниСарказма мод офф]

Если говорить про vim — то это уже эм сколько там лет хабру, 11? Тогда это 11 сезон сериала про vim.

UFO just landed and posted this here
Новый тренд: сериал статей ни о чём
Серьезно, когда мне надо, к примеру, сдвинуть блок кода на 2-3 отступа в право — мои руки делают это сами, когда меня спрашивают как это сделать в vim — я «зависаю» на несколько секунд пытаясь вспомнить. С IDE, лично у меня, так не получилось — приходилось отвлекаться на мышку, вспоминать в каком меню находиться нужный пункт, добираться до него.

В IDE нужно выделить этот блок кода и нажать таб. Или Shift+Tab в обратную сторону. Максимально просто и не надо подвисать на несколько секунд. И уж тем облее не надо вспоминать пункт меню.

Был не прав, привел в пример не ту операцию. Хотел продемонстрировать механику работы, но так уж водится, что всегда найдется тот, кто воспримет это как показательный пример.
:set sarcasm
В следующий раз специально приведу не тривиальную операцию, в пример, а что ни будь ярко-индивидуальное, трудно настраиваемое, работающее только у полутора анонимусов из-за специфичности.
:set sarcasm 0
В следующий раз обязательно приведите такие нетривиальные операции, как рефакторинг сотни файлов, изменение сигнатуры метода во всех местах, где он используется, вынесение части кода в отдельный метод\класс. Ну в общем такие типичные операции с кодом.
Рефикторинг сотни файлов делается с помощью макросов. Во всяком случае, нечто тривиальное вроде смены сигнатур — это вообще можно сделать в автоматическом режиме, для начала протестировав созданный макрос на паре файлов. Если задачи сложнее, то да, «личное присутствие» будет необходимо, но что-то мне подсказывает, что и в IDE нет отдельной кнопки «сделать рефикторинг всего проекта».

Такая «кнопка» даже в Vim может быть: к примеру, дополнение pymode предоставляет интерфейс к rope, каковая является библиотекой для рефакторинга Python проектов (правда, в документации я увидел только переименование модуля). Но Python — это язык с динамической типизацией, много вы тут в автоматическом режиме не нарефакторите. Java и C++ — другое дело, тут рефакторинг автоматизировать гораздо легче (если не злоупотреблять макросами в C++).


Правда, во что я не поверю, так это в то, что IDE способны ещё и комментарии отрефакторить. Особенно если это не комментарии‐документация (где могут и часто должны возникать явные и типизированные ссылки на конкретные сущности вроде классов и методов), а просто комментарии к коду.


И ещё я не поверю в то, что есть вменяемый автоматизированный рефакторинг динамически типизированных языков, в т.ч. проектов, где часть кода на C++, а часть на каком‐нибудь luajit с его ffi.


В общем, старый добрый grep (точнее, его альтернативы) мне кажется хоть и менее удобным, но одновременно более надёжным и более универсальным.

>И ещё я не поверю в то, что есть вменяемый автоматизированный рефакторинг динамически типизированных языков

для php есть
Idea, если ей указать, может не только в комментах что-то переименовать, но, и, например, в строковых константах или конфигах (при этом обычно понимая семантику конфиг-файлов). При этом прежде чем изменения применятся, можно удобно посмотреть что подлежит переименованию и оставить только то, что нужно.
UFO just landed and posted this here
С IDE, лично у меня, так не получилось — приходилось отвлекаться на мышку, вспоминать в каком меню находиться нужный пункт, добираться до него

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

А теперь представьте обратную ситуацию: опытный пользователь IDE, залез в vim (по уважительной причине, а как же!), собрался сделать то, что привык делать за пару тыков в клавиши, понимает, что не знает, как это сделать, и… Э-ээ… Ну… Меню? Мышка? Я вас умоляю, придётся идти в Яндекс и там гуглить мануал, или в маны вникать, куча телодвижений.
То есть то, в чём Вы увидели минус — это таки возможность найти редко используемое действие через удобный, хорошо структурированный и неглубокий классификатор, заодно и шорткат подсмотреть. Минус? Не думаю.

В таком случае vim'ом называется чисто текстовый вариант. А ему нужен gvim, в котором есть меню для заметной части этих действий.

Только наличие меню в gvim не отменяет того факта, что в конце концов быстро делаются привычные действия, а медленно — непривычные. Поэтому скорость работы, очевидно, очень субъективный аргумент.


Я вот в Идее многие вещи делаю медленнее, чем в редактрое семёрки Delphi, но точно не считаю Идею хуже. Хотя для постоянной работы над проектом на Delphi 7 она, увы, не подходит. Или я таки просто не умею её готовить?

я пользуюсь почти постоянно gvim, глаза меньше болят…
но меню у меня отключено, оно лишнее...

Комбинация vim+tmux+i3 и мышка 99% не нужна

Очень верное замечание!

Серьезно, IDE-люди, сколько процентов функционала своей IDE Вы используете? 25-30%?

Что за аргумент такой? Одной самой нужной из других возможностей достаточно чтобы что-то использовать. Сколько вы изпользуете процентов возможностей своей жизни? 30-50%?
А кто сказал, что это аргумент? Это вопрос был, риторический. Как можно было заметить я не призываю ни кого переходить на vim, и не агитирую за IDE

Проблема в том, что каждый программист использует свои 25-30%.

Про 1-3 языка, поддерживаемых IDE, пользователям VS Code было обидно.
VS Code у нас стал IDE?
Visual Studio Code — кроссплатформенный редактор исходного кода, поддерживающий базовые возможности интегрированной среды разработки, созданный в Microsoft
Тот же фронтенд на нём пилить — очень ок. Ну и несложные бэкенд приложения — тоже. Я с Visual Studio переключился на Code, как более удобный при работе с angular2+. Да и с развитием всяких cli — VS Code становиться весьма мощным инструментом разработки.
Даже пользователи обычной Visual Studio немного обиделись, которая штук семь языков поддерживает «из коробки» и ещё немало с помощью сторонних плагинов.
Это не говоря уже, например, про пользователей Eclipse :)
Вообще, неправильно говорить, что IDE — узкоспециализированный инструмент. Наоборот, функционал тяжелых IDE способен заменить не только vim, но вообще весь инструментарий разработчика на вашем компьютере. Собственно разработка, отладка, визуальное проектирование, работа с данными, средства моделирования и документирования, профилирование, контроль версий, командная работа — всё это можно встретить в одной IDE. Куда уже шире.
Даже пользователи обычной Visual Studio немного обиделись, которая штук семь языков поддерживает «из коробки» и ещё немало с помощью сторонних плагинов.

В vim из коробки 500+ файлов синтаксиса =) Мне их столько не надо, но на какой язык\синтаксис бы меня не забросила работа — всё или уже есть, или легко скачать и доставить — C, C++, Bash, Python, Perl, PHP, Javascript, HTML, XML, Yaml, ini-файлы, error-файлы — это я пробовал сам.

Кстати, самое интересное: в Vim есть подсветка intel hex файлов. А в Atmel и CCS studio (последнее что‐то на основе какой‐то другой IDE, кажется, eclipse) и вроде каких‐то ещё IDE для микроконтроллеров нет.

UFO just landed and posted this here
нужно чёткое разделение где ещё текстовый редактор а где уже ide, тот-же vs code и дебажить например может, и в рефакторинг умеет и с т гитом работать, чём же он не ide?
Наверное я не знаю всех фитчь моих IDE… (сарказм) но из тех что знаю пользуюсь 80%…
разные конфиги для языков… прекрасно работает в IDE
минимальная поддержка синтаксиса для экзотики настраиваеться в 2 клика мышкой…
мультиязычные проэкты прекрасно подерживаються…
я пользуюсь в основном eclipse и VSCode…

работа без мышки… абсолютное дело вкуса… и привычки…

немного умею работать в VIM… и согласен с предыдушей статьей про режимы… именно из них вытекают все особенности VIMa

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

Прокаченный VIM позволит сначала получать удовольствие от написания теста (да, нравится сам процесс), а потом написание текста станет неким автоматическим действием как, даже не знаю, есть из тарелки столовыми приборами… ты просто не задумываешься ни то что для набора можно пользоваться чем-то другим, даже не думаешь о наборе текста, все проиходит само каким-то естественным образом. Модальные режимы, motions, навигация, буферы/окна, закладки — все этому помогает. А проникнувшись этим дзеном графическая среда становится нужна только для браузера и офисного пакета

Plugin в IDE поверхностно спасает, но есть ли плагин к вашей IDE такой, чтобы скриптовать расширеия? И в полном ли объеме поддерживается фунционал vim?
Почему vim упорно сравнивается c ide? Он разве умеет отладку по шагам, сборку пакетов, рефакторинг, диаграммы классов и т.п.? Вы его ещё с автокадом сравните.
Умеет, просто настроить его надо.

Легко))) пару дней и набросаем команду ".*" для создания кубиков и треугольников в 3D)))
Шутка)) полностью поддерживаю

А разве IDE умеет? Он вызывает дебаггер, пакетный менеджер и т.п. И это чаще внешние утилиты, чем встроенные.
vim тоже всё умеет, если плагины подключить.
Все в vim хорошо, только мизинец левой руки почему-то стал толще, чем правый. И вообще, почему-то дергается время от времени.
UFO just landed and posted this here

Шутка в том, что IDE (и большинство редакторов) вы открываете и 95% времени проводите в режиме ввода текста (если вы нажмёте на клавишу, то в текст добавится новый символ). Vim сразу открывается в режиме навигации, и он в нём силён.

UFO just landed and posted this here
UFO just landed and posted this here
Я бы отметил, что Vim становится лучшим редактором только при одном условии: если вы владеете методом слепой печати.
Слышал такое мнение, и интересно, кто и почему его поддерживает.
У меня получается 4-6-пальцевый и не совсем слепой метод (надо видеть краем глаза контуры клавиатуры), но предпочитаю vim всем прочим консольным.
Использую IDE только там, где нужны её специфические возможности типа рефакторинга между несколькими файлами или тыкания в 500 ошибок, и то не уверен, что мне просто не хватило терпения найти плагин для этого.
Я имел ввиду, что при сравнении с другими редакторами, главное преимущество Vim — это его «эргономичность» управления при наборе вслепую. Я не встречал ни одного редактора (ни самостоятельного, ни встроенного в IDE), где это удобство сочеталось бы со всей полнотой возможностей Vim. Поэтому я его и выбираю. Если опустить вышеприведенный критерий, то Vim перестает быть уникальным и может уступать тому же Emacs, в целом, и специализированным IDE, в частности.

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

IDE — поддерживает 1-3 языка, но делает это лучше VIM

Ой как заблуждаешься. Среды разработкт JetBrains из коробки минимум 2 поддерживает. А еще несколько десятков ставятся плагинами.
Не хочу вступать в этот холивор, мой редактор — это мой редактор, я не рыцарь его ордена, чтобы ходить за него в крестовые походы. Мой общефилософский подход к вещам: если тебя куда-то изо всех сил тянут и что-то тебе предлагают и нахваливают на замену того, что у тебя и так есть и работает — слушать не стоит. Покуда сам я не найду свои причины пользоваться этой новой хренью, меня против моей старой хрени никто не переубедит. VIM я пробовал, не прижилось. Пробовал много других редакторов, некоторые успешнее, некоторые хуже. Когда-то считал, что круче редактора кода в IDE Delphi 6 вообще ничего на белом свете быть не может, даже HTML c джаваскриптами в нем писал. Много чего еще другого пробовал, под всеми осями. У меня был просто мегаредактор под линуксом (не вим, не скажу какой, там всё равно фишка-то не в нём самом была). С недавних пор нашел себе 2 оконных фаворита, могу vim, если в консоли, но предпочту nano, если есть. И вот меня удивляет эта странная укушенность именно vim-юзеров — топить за свою любимую тулзу там, где их не спрашивали, ругать то другое, в чем они сами не разобрались, и волочить всех против воли в свою религию. В двух конторах, где я работал, vim вообще стандартом был — ты получаешь курс обучения на входе и никакой поддержки на тему поставить что-то другое. Продуктивнее [одной кроссплатформной IDE] для меня в те дни ничего не было, я ставил её в юзерспейс и клал с прибором на мнение всех, кто говорил «Зря ты этой штукой пользуешься». Вышеприведенный рефакторинг, интеграция с гитом искаропки (с гитом, коего в одной из компаний и не знали (!), а я юзал его для себя, и это стало для многих открытием — мол, вон как с кодом оказца можно, зря мы это по старинке-то), да хотя бы и локальный сервер (с горячей клавишей запуска/останова для аллергиков на мышиные хвосты) — это всё в ходе демонстрации впечатляло, хотя у всяких тимлидов сначала вызывало вопрос «А чо не из командной строки?» а потом слегка уязвленное «Понапридумывают же». Могу и из командной, но есть инструменты, которые merge conflict понятнее покажут и быстрее разрешить помогут, чем если руками колупаться. Начальник вот пишет код на полумертвом TextMate на своём маке — я не лезу к нему и не советую своё, потому что понимаю, этот парень вот там умеет быстро. Я в своих редакторах умею быстро, и не надо мне всовывать ваш vim на основе того, что у вас быстро в моём редакторе не получается.
Цитата из статьи:
Если Вы всё ещё хотите холиварить на тему Vim VS IDE, то не забывайте — это инструменты. Ваять доброе и вечное можно хоть с помощью awk, вопрос что использовать — дело лишь удобства и привычки.

Моё удивление в основном тому, что именно вимяне ходят и «говорят со всеми о Боге». От остальных столь трепетного отношения к отвертке я не наблюдаю.

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

Добавьте пожалуйста вариант: я люблю IDE с VIM-plugin.

Сам сижу на PhpStorm/PyCharm + IntellijRust c IdeaVIM. Да он не идеален, но поддерживает с горем пополам основные функции vim которых вообщем-то с головой хватает именно для редактирования, да и подсветка кода у этих IDE гораздо лучше чем VIM может себе позволить. VIM использую каджый раз когда IDE что-то не может: язык, большой файл, да просто заметки которые найти можно без лишних проблем.
К сожалению уже не могу, голосовалка обнулиться. Сразу не подумал
Это IMHO самый лучший вариант, сам пользуюсь vim-mode плагинами в Idea, VS Code, VS Studio.
Но обсуждения этого вариант утопает в войнах ситхов.
С одной стороны пользователи IDE которые не понимают зачем им Vim в их IDE. В теории их можно понять, порог входа в Vim не маленький, и не хочется тратить время на изучение.
С другой стороны гуру Vim-a сразу начинают искать способ завести свои 101 плагина, и импортировать .vimrc. А потом начинают песню «а король-то — ненастоящий», хотя большинство претензий это их привычки к разным плагинам.
> Но представьте, Вы, к примеру, в основном пишите на C++, и возникла необходимость посмотреть JAVA-код. Будете ставить отдельную IDE или плагин? В случае с vim Вы просто откроете код и «из коробки» получите минимальную поддержку языка (подсветка, сворачивание блоков и т.д.)

А в чем проблема выйти из IDE (в смысле переключить окно) и посмотреть «неродные» файлы vim, sublime, чем-нибудь еще?
IDE — хороший выбор, когда Вы окопались на 2-3 языках и никуда с них не уходите.

А, ну то есть хороший выбор для где-то 99% людей. Окей, на этом и сойдёмся.
Поддерживаю. Про тайловые wm читал много, но в основном всё по настройкам. Хотелось бы статью про практическое использование.
Когда-то я пытался настроить Vim для нормальной работы с Python. Оказалось, что:
— Нормального автодополнения (а не того, которое грузит процессор на 100% и виснет на несколько минут) нет.
— Нормального дебаггера (без необходимости делать print на каждую переменную) тоже нет.

Т.о. для меня vim так и не стал заменой ide, к сожалению.
Но надо ли ему таковой быть?
Сразу оговорюсь — мне vim нравится. Первый более-менее сложный сайт на php я написал именно в нём. С удовольствием бы вернулся, если подскажете как в нём настроить или чем заменить:
1. Нормальную поддержку проектов. Я знаю про плагины project и NERDTree, но последний — это вообще не о том, а project на больших проектах тормозит и были какие-то проблемы с импортом (прошу прощения, точно уже не помню)
2. Навигацию по коду — как минимум, переход от места вызова функции к месту определения (php). Да, ctags, но как делать индексацию? Руками всего проекта? Долго и неудобно.

Ещё очень хотелось-бы, но, думаю, нереально
1. Автоматическая генерация импорта (php)
2. Более-менее интеллектуальное автодополнение, а не тупо по списку слов.

Вот из-за отсутствия этих фич у меня производительность в IDE гораздо выше чем в vim, несмотря на его возможности по обработке текста. Поэтому, несмотря на все симпатии, я не могу полноценно использовать vim в повседневной работе.
Могу ответить только по автокомплиту, ибо на пхп очень давно не пишу. Попробуйте YouCompleteMe
А на чём пишете, если не секрет?
Хотя в любом случае, схожие задачи должны быть. Как обходитесь?
Извиняюсь, промахнуля, ответ ниже

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

Основной язык — go, однако время от времени приходится ковыряться в разных проектах на разных языках, от 1С до Rust, проще, наверное, просто дать Вам список моих плагинов, чем пытаться развернуто ответить на этот вопрос.
Список плагинов
Plug 'retorillo/json-ponyfill.vim'                                                                                                                                                                                                                                                                                            
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }                                                                                                                                                                                                                                                                       
Plug 'fatih/vim-go', { 'tag': '*' }                                                                                                                                                                                                                                                                                           
Plug 'nsf/gocode', { 'rtp': 'vim', 'do': '~/.vim/plugged/gocode/vim/symlink.sh' }                                                                                                                                                                                                                                             
Plug 'Valloric/YouCompleteMe'                                                                                                                                                                                                                                                                                                 
Plug 'wellle/tmux-complete.vim'                                                                                                                                                                                                                                                                                               
Plug 'scrooloose/nerdcommenter'                                                                                                                                                                                                                                                                                               
Plug 'majutsushi/tagbar'                                                                                                                                                                                                                                                                                                      
Plug 'fholgado/minibufexpl.vim'                                                                                                                                                                                                                                                                                               
Plug 'vim-airline/vim-airline'                                                                                                                                                                                                                                                                                                
Plug 'vim-airline/vim-airline-themes'                                                                                                                                                                                                                                                                                         
Plug 'amiorin/vim-project'                                                                                                                                                                                                                                                                                                    
Plug 'Xuyuanp/nerdtree-git-plugin'                                                                                                                                                                                                                                                                                            
Plug 'altercation/vim-colors-solarized'                                                                                                                                                                                                                                                                                       
Plug 'IN3D/vim-raml'                                                                                                                                                                                                                                                                                                          
Plug 'andreevlex/vim-language-1c-bsl' "OMG 1C                                                                                                                                                                                                                                                                                 
Plug 'vim-syntastic/syntastic'


1) Хватает плагина vim-projects и отдельного конфига в каждом проекте
2) Ctags + tagbar + vim-go
3) Не могу сказать, честно говоря даже не совсем понял о чем речь (давно отошёл от php, начинаю подзабывать этот ад)
4)YouCompleteMe+syntastic+ctags
Большое спасибо, поковыряюсь!
Насчёт 3-го пункта — это аналог import из java. Хотелось бы их генерировать автоматически, посколько полное имя класса (\This\is\A\Long\Class\Name) запомнить не так просто.
В случае с go это разруливается с помощью vim-go, опять таки

Всё же главная киллер-фича Вима, тот фактор, который делает его широко используемым, а где-то и приоритетным — это… (Драматическая пауза, напряжённая музыка...) Вимеры! Люди, которым он нравится, которые его любят несмотря на "объективные недостатки" (с точки зрения их оппонентов) и даже ЗА них, потому что для них это — достоинства. Вот.


А меряться количеством микродвижений на полезное действие — не детский сад ли?

Sign up to leave a comment.

Articles