Как стать автором
Обновить

Комментарии 168

Читал, читал, читал и всё ждал когда кончится вступление и начнётся что-то кроме художественного текста.
Нет, правда. Написано интересное, хорошо, но не по делу. Я не вижу ничего полезного, кроме пары ссылок где плагины и туториалы по vim.
Я всё ждал, каких-то рецептов успеха, полезные хинты… Но это просто рассказ, почти не прикрытый пруфами.
Согласен, пост даже не вода — водичка. Зато у меня теперь появилось «право голоса». Обещаю в следующий раз постараться дать более «развернутую картинку»
Ну, знаете, тут недавно был пост, в комментариях к которому удивлялись, зачем люди используют «устаревший редактор», и что если бы вим кому-нибудь был нужен, его бы уже давно превратили в готовую искоробочную IDE. Как-то так.
а я все читал и ждал перехода от vim к vi, в предвкушении хардкора. Но emacs? Ничего против не имею, но в контексте статьи это кощунство.
Это суровая правда жизни. Вим прекрасен, но не умеет асинхронных вызовов, не умеет человекопонятные апи и не умеет нормальный скриптовый язык. Емакс всё это может, но у него нет нормального редактора. Вернее не было. С появлением evil он появился.

Баланс силы нарушен. Вим уже не спасти. Осталась одна надежда и имя ей neovim.
а где асинхронные вызовы в емаксе?
А я все ждал, когда автор покажет, как к Vim или Emacs прикрутить нормальный intellisense. Ну или хоть что-то, что позволяло бы в нем/них редактировать код с темже удобством, как и, например, в QtCreator/IDE/VS etc.
А то складывается ощущение, что emacs/vim — это не редакторы, в которых «можно настроить все под себя», а редакторы в которых «можно привыкнуть ко всему», иначе не понятно, как за годы существования этих редакторов так и не появилось нормальных модулей для работы хотя бы с C/C++ кодом…
К сожалению в C давно не пишу. C-ide не вариант? tuhdo.github.io/c-ide.html
ну после VS мне штатного автокомплита и подсветки для html, js и Perl в Vim вполне хватает, хотя я его использую только второй месяц
Пишу на C++ и как редактор больше исопльзую emacs, чем Vim. Подсветка синтаксиса для него меня вполне устраивает. А вот с автокомплитом и переходами к объявлению методов etc. там беда. Ущербные ctags и yasnippet и т.п. ну просто очень не удобны, навигации по проекту на основе cmake нет, и таких минусов, даже не касаясь продвинутого рефакторинга кода, вагон и маленькая тележка. Судя по отзывам пользователей, в Vim присутствуют все теже проблемы, да и мой небольшой опыт работы с ним это подтверждает. При этом апологеты vim/emacs все как один утверждают, что «все это не нужно».
Ну так решение очевидно, если вам «это нужно», пользуйте IDE, если «не нужно», пользуйте vim/emacs. Или вопрос в том, возможно ли прикрутить intellisense к vim/emacs? Возможно. vim/emacs это такой же редактор, как и любая IDE, и чтоб там было все как в IDE, группа программистов должна добавить этот функционал. На сегодняший день плагины клипают разные программисты без особой связи друг с другом, а для фунционала подобно intellisense нужна группа, нацеленная именно на решение этой задачи.
Но при этом, чуть ли не один из главных аргументов «за» использование этих редакторов — это «его можно настроить под себя». При том, что пожалуй базовый функционал для комфортной работы с кодом не был добавлен в один редактор за 40 лет, в другой за 25.
Ну так Vim (про emacs не знаю) не позицианирует себя как IDE. Автокомплит и переход к объявлению это не «базовый функционал». Если вам его не хватает, добавьте сами.
Расширений под автокомплит в Emacs несколько, наиболее популярные: auto-complete (неожиданное название), company-mode. Хорошо сочетаются с помянутым yasnippet. Только yasnippet это просто программируемые шаблоны с биндингами на последовательность символов, а режимы выше анализируют код и дополняют по мере набора имена объектов или их параметры. Дальше всё зависит от используемого к ним бэкенда, который составляет сами списки автодополнений. Тут всё зависит от языка, насколько он хорошо поддерживается. Как правило это тоже выливается в доп. плагины, которые надо ставить. Я к примеру последнее время много программирую на golang, к нему есть gocode – отдельный демон, анализирующий код и строящий автопополнения, которые потребляют плагины автоподолнений в emacs (к vim оно тоже цепляется).
Хотя бы с C/C++ это сильно. Нормальных модулей для работы с ними считай нигде не было до появления clang. А теперь, когда он есть, он прекрасно подключается что к виму что к емаксу. Ноу проблем.
Главный вопрос в комментариях любой новости о новом релизе Emacs:
— Когда там добавят текстовый редактор?

По существу: На работе у нас все и вся поголовно в emacs, под него заточено все (Code review, merges, gdb, logs, etags). Поначалу я сопротивлялся и даже допилил vim для нужд.

Сейчас больше времени провожу в emacs, пожалуй. Что до сих пор убивает:
— find and replace (как там M-% кажется?)
— работа с регистрами — это же тихий ужас какой-то… вместо ma надо нажать какую-то дикую комбинацию, которую даже пальцы не могут запомнить, не говоря уже о мозге…
— отсуствие SuperStar из коробки, восприятие _ как символа разделения слов. выделение My_Super_Variable как Ctrl-S Ctrl-w Ctrl-w Ctrl-w Ctrl-s® вместо одного нажатия Shift-8 (3)…
— Какая-то странная логика открытия новых буфферов, такое впечатление, что оно пытается решать за меня, какие буферы мне нужны в данный момент времени, естественно делает это неправильно и начинаются бесконечные Ctrl-b…

Холивары на работе по поводу emacs периодически разжигаю. Например недавно была задача вида:
Here is very-very long string without spaces. Only digits and letters. Very very very very long (up to 20000 chars)
^^^ Pointers
     ^^^ Pointers
            ...... Ommitted ......
                                                                                                   ^^^ Pointers somewhere in position 10000+


Задача было эффективно искать данные из первой строки на которые показывает pointers из строки N. Никто из emacs-guru не смог помочь мне с этим (решением было открыть файл в разных буферах и мышкой подогнать размер верхнего, чтобы было как-то видно). Пришлось использовать vim и выделение блока. Переход на строку — переход к ^ блочное выделение до последнего ^ в строке — переход к первой строки — вуаля!

Это не синтетический пример, а реальная задача из жизни по адаптации тестов.

Но вот vimgdb ни в какие подметки gud-gdb не годится, конечно…
НЛО прилетело и опубликовало эту надпись здесь
Не поможет "^^^" может быть переменной длины. Но за идею спасибо!
Можно вот так:

(defun select-by-ptr ()
  (interactive)
  (beginning-of-line)
  (let ((pos (1- (point))))
    (re-search-forward "\\^+")
    (goto-char (- (match-beginning 0) pos))
    (push-mark nil t t)
    (goto-char (- (match-end 0) pos))
    (setq deactivate-mark nil)))
<DoktorSeven> emacs is an okay OS but its text editor sucks.

bash.org/?643516
Git, как оказалось, по умолчанию использовал Vim
Git использует редактор, установленный дефолтным окружением. Сделаете дефолтным nano — и в git-е будет nano.

Так и не понял зачем vi-топор программисту 21-го века.
vi is forever, vi is everywhere!
«Щенок, б… ть!»

На правах шутки конечно =)
НЛО прилетело и опубликовало эту надпись здесь
То есть вы из «Секта свидетелей что вне UNIX жизни нет»?
А если серьезно, то пример ни о чем.
А если серьезно, автор недалеко ушел от истины со своим примером про терминатора. Вот хотя бы одна из последних новостей про Linux-винтовку. Windows хорошая ОС, но Unix-инкарнации в мире распространены гораздо больше — Linux, Mac OS X, *BSD, web-сервера, облака и т.п. В основе редактирования поведения классических Unix'ов лежит редактирование конфигов и здесь уверенное владение vi, как редактором, присутствующим во всех системах, служит очень большую пользу. Кстати (просто интересный факт) — это одна из причин, почему так сильно хаят systemd — он очень сильно отходит от основ философии Unix в этом плане.
Я никсовод со стажем ))
Только программирование и редактирование конфигов — вещи слегка разные, как минимум в моем понимании.

Такжe мне не понятно, почему в статье речь о emacs и vim, a топор нужен vi.
НЛО прилетело и опубликовало эту надпись здесь
И что мне мешает их поредактировать в той среде, в которой я напрограммировал?
К тому же, по хорошему, это задача одноразовая.

Я прекрасно понимаю зачем vim админу, но я не могу понять, чем он хорош программисту (за исключением привычки или дохлого компа, но это часности, с которыми также не все гладко).
У многих, я видел, vim настроен и обмазан плагинами так, что практически соответствует IDE'шкам: то есть там и ctags, и fuzzy-поиск, вот это всё. Кто-то же просто использует vim как редактор в MSVS.

Иначе говоря, можно вполне редактировать текст как в классическом vi, не отказываясь при этом от возможностей, предоставляемых IDE (или реализуя их в той или иной степени через плагины vim'а).
Вот и мы пришли к часностям. Поверьте, у меня тоже есть такие знакомые. И ни один из них на вопрос: «Почему», не может дать другого ответа кроме: «Привычка».

Обвешав vim плагинами, мы получим уже не такой быстрый vim (и все равно не получим всех возможностей IDE) и будем страдать на другом компе.
Обвешав vim плагинами, мы получим уже не такой быстрый vim [...] и будем страдать на другом компе.
Верно. Поэтому я и отказался от vim'а в пользу простого и аскетичного nvi, который везде работает одинаково.
Ну я надеюсь вы же понимаете, что nvi невозможно сравнивать с IDE.

Сейчас тенденции в мире разработки таковы, что прикладному программисту на сервера надо ходить все реже или не нужно ходить вовсе.
И при современных интернетах удаленный файл элементарно редактируется привычной тулзой на локальном компе.
Ну не такой быстрый vim с плагинами — это какая-нибудь крайность вроде сборки spf13. При использовании Vim с разумным количеством плагинов, добавляющих code completion, дерево навигации по проекту, снипеты, linter'ы и несколько других плюшек скорость работы редактора по ощущениям не снижается. Хотя плагины тоже разные бывают и один какой-нибудь товарищ может так тормозить, что приходится от него отказываться.

Попробую объяснить, почему для разработки я использую именно этот редактор. Vim — для меня уже не просто привычка, а реальный инструмент, который предоставляет мне унифицированную среду и которую можно приспособить под любой вид разработки (например, при работе с PL/SQL в комментарии ниже). При этом в одном редакторе у меня может быть открыто несколько вкладок, на первой находится все что связано с Oracle (Vorax), на второй MVC проект приложения на ExtJS, на третьей какой-нибудь HTML и CSS, при этом в ходе процесса разработки не теряется контекст (не надо переключаться между разными IDE) и соответственно продуктивность разработки не снижается. Да слышал, что IDEA очень хороша и, по-моему там тоже все унифицировано с точки зрения хоткеев и сохранения контекста при переключении между, например, PyCharm и WebStorm, но у Vim'а один большой плюс — он полностью бесплатен.
Про SQL ничего не скажу — не мой профиль.
Что касается цены — программисты не самые бедные люди, но даже если и так, то есть абсолютно бесплатная IDEA Community Edition.
Что касается всего остального, то при желании можно обойтись только одной IDEA (без PyCharm, WebStorm, etc) установив в нее соответствующие плагины. Даже в бесплатную.

Что касается «не такой быстрый vim с плагинами» — это слова моих знакомых, которые сидят на нем.
Что касается цены — программисты не самые бедные люди, но даже если и так, то есть абсолютно бесплатная IDEA Community Edition.

А вот тут стоит упомянуть про ту самую привычку, про которую вы говорили :)
Зачем переучиваться, когда и так уже все ок?
Да не зачем, если все устраивает.

Но ответа на «зачем vi-топор программисту 21-го века» я так и не получил )
Бесплатная idea всё-таки ограничена по функционалу. Кроме того есть ощутимое количество плагинов, которые ставятся только на idea ultimate.
Python точно ставится, про остальное не скажу так как пользуюсь не IDEA, а другими их продуктами.
$200 за продукт, который можно превратить в dev-комбайн чуть ли не для всего, ИМХО, не заоблачная цена для программиста, который этим зарабатывает (да и по хорошему это должен делать работодатель).
К тому же у них есть бесплатные лицензии для студентов и опенсорсных проектов. Да EAP тот же.

А ведь еще есть netbeans c eclipse, которые многое умеют и совсем бесплатные.
Работодатель может купить только коммерческую лицензию, за $400. Но это не мешает мне иметь personal license на idea ultimate и rubymine, несмотря на то, что последний по работе мне почти не нужен (и рабочие нужды можно спокойно покрыть ruby-plugin'ом для идеи).

Лицензии для open-source проектов позволяют использовать ide только для соответствующих проектов. Кроме того, там есть требования на проект (активное комьюнити и т. п.). Имхо, проще купить и не париться.

Сидеть на EAP, если нужно работать — дело не самое лучшее. Хотя, сам этим балуюсь, если хочется новых фич пощупать.

Про eclipse вообще вспоминать не хочется (хотя, иногда приходится). Даже после пары месяцев на idea. Что уж говорить о паре-тройке лет… Сейчас вот тестирую clion, но он, конечно, сырой.
Речь шла о персональной покупке, соответственно и цену указал персональной лицензии.
EAP — крайний легальный вариант, если уж не купить никак.

Среди моих знакомых есть люди вполне довольные eclipse/aptana, как по мне они слишком неповоротливы. Думаю дело здесь опять же в привычке.
Netbeans вполне неплох. Единственное (что я могу припомнить) — это весьма скудные (на момент использования) возможности по форматированию кода и работы с БД. Что в итоге и привело меня к jetbrains.
А мне кажется, всему причиной лень. Я, например, довольно часто просматриваю код в vi, потому что нормальные IDE на моей машине запускались долго. Посмотрел — скомпилил, и постепенно понимаешь, что надо бы установить автодополнение и еще какие-нибудь плагины.
А мне лениво ставить Perl + PostgreSQL на домашний ноутбук жены, при том, что разработка на Perl + Mojo ведётся в виртуалке Azure, а mcedit для html/js неплох, но без автокомплита — это меня в определенный момент достало. А сейчас. с поломанной рукой, совсем печаль.
Потому что разворачивается программируемый софт частенько на виртуалках, где держать DE особо нет смысла, а при отладке время от времени по мелочи что-то да приходится править. Да, есть sshfs и это замечательная вещь, но мне как-то не везёт и порой она зануляет файлы при сохранении.
Зачем DE? Чем вас для правки по мелочи не устраивает sftp с автоматической синхронизацией?
Хотя сам факт правки на удаленной машине — это плохо.
НЛО прилетело и опубликовало эту надпись здесь
Иногда инета нет вообще. Как тогда быть?
Ну и если хватает инета для слайд-шоу с vim, его вполне хватит и для sftp.

И ребята, мы говорим о программировании, им вообще не стоит заниматься на удаленной машине во времена vcs/vagrant/docker/etc.
НЛО прилетело и опубликовало эту надпись здесь
Когда у меня не было интернета и электричества, то я писал код в emacs, радуясь, что он может работать на слабом ноутбуке и не жрать аккумулятор в больших количествах.
Отличный пример. Только поэтому всем надо взяться за изучение emacs.
Боюсь даже спросить на чем продолжили писать через несколько часов, когда ноут разрядился.
НЛО прилетело и опубликовало эту надпись здесь
Понимаете, у меня не возникает вопросов:
— зачем программисту нужно несколько ЯП
— зачем программисту нужна IDE
— зачем программисту нужна командная строка
— зачем программисту нужны два монитора
— и т.п.

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

Ни в коей мере не умоляя достоинств vim/emacs, я говорю, что содержимое статьи не соответствует ее названию.
Первое знакомство автора с vi меня умилило! Молодец! Такое упорство! Такой запал!

Я такая лентяйка, что когда впервые увидела vi и закрыла его выходом из терминала, мигом сменила его на nano или mcedit.

Порой незнание азов заводит нас в такие дебри, где мы становимся в последствии асами
Если вы за свою жизнь сделали меньше 100 раз yum -y install mc (apt-get install mc) — неплохой вариант :)
emacs tramp mode избавляет от слайд-шоу — работа идет через тот же ssh, но загружается все порциями и отзывчивость идет локальная
Я правлю код на тестовой версии приложения на удалённом сервере, когда считаю, что стоит обновить продакшен — однострочный скрипт делает git fetch && restart ./bin/app
Ну, просто для примера — иногда возникает необходимость «метода тыка». В таком случае имеем около 5..30 итераций цикла:

поправил > проверил

Расширять это до:

поправил > засинкал > переключился в консоль к виртуалке > проверил

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

Но опять же, этот случай далеко не 100 и даже не 20% работы, IDE'шки тоже юзаются, когда это удобнее :)
Да кстати, про название, видимо это реверанс в сторону уже почившего vi, самого яркого представителя «топоров», оказавшего неизгладимое влияние на своих потомков. :)

Насчет редактирования конфигов это просто один из самых популярных примеров, который приходит на ум. Я лично использую для программирования Vim, мне в нем объективнее удобнее работать (по сравнению с такими монстрами как Toad и SQL Navigator для разработки под Oracle), тем более для такой специфики как PL/SQL мало бесплатных альтернатив, а гибкость Vim позволяет настроить редактор под любой вид разработки (главное было бы желание и время).
В основе редактирования поведения классических Unix'ов лежит редактирование конфигов и здесь уверенное владение vi, как редактором, присутствующим во всех системах, служит очень большую пользу.
Так и есть. В свое время пришлось выучить vi (и слезть с joe) именно потому, что на SunOS его (joe) не было. Поплевался несколько дней, затем проникся и подсел (видимо, уже на всю жизнь).
Кстати (просто интересный факт) — это одна из причин, почему так сильно хаят systemd — он очень сильно отходит от основ философии Unix в этом плане.

В каком плане? Покажите мне бинарные конфиги в systemd.
Спасибо за поправку, никаких бинарных конфигов в systemd, действительно, нет. Перепутал с логами (
Да и с логами все очень хорошо: если бинарные логи вызывает непреодолимое чувство нарушения баланса в мире, можно выключить в journald постоянное хранилище и поставить любимую систему ведения логов.
Собственно, в centos 7 по умолчанию journald в ram (/run/log/journal), если не создавать директорию /var/log/journal. И настроен rsyslog, который уже хранит логи (и перенаправляет в агрегатор, если нужно).
vi — это архаизм, который должен давно умереть вместе с sendmail. Со времени моего знакомства с vi (на SVR4) в 94-м году я не увидел в нём ничего мало-мальски адекватного. А делать умный вид клацая клавишами и наслаждаясь непониманием окружающих это не моё…
Благо, Лидия Васильевна первой же командой показала ":q!".
К счастью этот «архаизм» прошел испытание годами и очень хорошо прижился. Я думаю пока существует клавиатурный способ ввода, будет существовать и модальный vi режим. И даже может быть переживет и клавиатуру. Например вот так: play.google.com/store/apps/details?id=net.momodalo.app.vimtouch&hl=en
К счастью этот «архаизм» прошел испытание годами и очень хорошо прижился.

Он прошёл это испытание лишь потому, что является дефолтным редактором в unix/linux системах. И в данном случае он полностью сравним с IE как с самым популярным браузером. Как не могу считать IE лучшим браузером так не могу и vi считать достойным редактором.
Может быть виной тому, то что 20 лет назад дефолтным редактором в unix был ed, но таки неоднократные попытки полюбить недоразумение именуемое «vi» остались тщетными. Хотя и ed я уже лет 10 не пользую…
Я не о редакторе в данном случае, я о модальном подходе, который используется в Vim. Навигация без необходимости отрывать пальцы от ключевого положения (ФЫВА — ОЛДЖ) гораздо более удобней, чем постоянный разрыв между мышкой, стрелками, функциональным клавишами и алфавитно-цифровой частью.
А я как раз о vi как о редакторе. А точнее как о редакторе «по умолчанию».
В тот день когда я познакомился с vi я увидел дискету 7.5 дюймов и узнал, что для её дисковода идеально подходит приводной ремень от швейной машинки «чайка». Но дискеты давно размагнитились и привод сдан на драгметаллы, а new-админа по сей день встречает m4, bind, mergemaster и vi. Зачем?.. Неужели нельзя его встретить более «дружелюбно» и расположить к себе? Конечно, unix-like системы никогда не позиционировали себя «для домохозяек», но на мой взгляд vi должен был уйти лет 10 назад с позиции «setenv EDITOR».
Дискеты бывают 8″, 5¼″ и 3½″.
На самом деле 8-ми дюймовая дискета меньше 8-ми дюймов и к нам они приходили с маркировкой 7,5inch, 7.9inch, 8inch, 200mm
Sendmail и bind остались по умолчанию только в FreeBSD, насколько я знаю, хотя этот монстр исключил Perl из базовой системы, чего Debian не сделал до сих пор.
В Debian у меня Postfix + SQL, PowerDNS + PostgreSQL, вполне удобные связки.
Вот это истинно верно! Знание о том как в vim перейти в режим вставки, сохранить и выйти в таких случаях пригождались не раз :)
а Git, как оказалось, по умолчанию использовал Vim

Может он просто был в переменной $EDITOR?
Скорее всего в переменной $EDITOR не было ничего.
Поэтому и запустился vi.
многие веб-сайты внедряют базовую vim-навигацию — gmail, trello, github

Еще habrahabr. Часто пользуюсь командой "/", чтобы быстро перейти в поле поиска и набрать запрос.
скажите пожалуйста как воспользоваться этой командой?
я нажимаю "/" на клавиатуре и ничего не происходит.
Да это недоработка хабра, надо нажать именно "/" в английской раскладке, "." в русской раскладке не активирует поиск. «j» и «k» при навигации работает также как и русские «о» и «л». Вот весь список горячих клавиш.
И клавиша f иногда отваливается, что бесит неимоверно. Но её ломают и чинят с переезда на новый дизайн.
да я пробовал нажимать "/" в английской раскладке.
т.е. нажал в терминале — убедился что печатается нужный символ
затем перешел на вкладку с хабром и попробовал нажать ту же клавишу опять
никакого эффекта
Возможно потому что у меня OSX — а не windows. Браузер хром. ну да ладно — видимо не судьба.
Вы не одиноки, у меня такая же беда.
У меня Mac OS X 10.9, хотя я использую Firefox, попробовал еще в Chrome 39 — все работает.
OSX 10.10. Firefox и Chromium — "/" работает, но только пока незалогинен.
До сих пор почти исключительно пользуюсь простым и «голым» nvi для для редактирования текста, в том числе для написания программ (изредка, когда нужно подсветить синтаксис, запускаю на пару минут mcedit).

Продвинутые редакторы и IDE'шки кажутся слишком сложными, «там думать надо». ;-)
Программ какого размера, позвольте поинтересоваться?
НЛО прилетело и опубликовало эту надпись здесь
Самого разного. :-) Если придерживаться некоторых правил оформления кода, то можно быстро находить, например, определения функций (vs. вызовы): достаточно лишь отделять спецификацию возвращаемого значения от имени переводом строки, и искать (или грепать) по ^function_name. (Так, кстати, принято во FreeBSD.)

При этом, если понадобится что-то глобально зарефакторить (т.е. обычным поиском не уже обойтись, нужно понимать грамматику), всегда можно запустить на раз «умную» IDE'шку или по-быстрому написать ad-hoc утилиту на основе какого-нибудь Clang AST-парсера.

Имхо всё это лишь дело привычки, ну и каких-то навыков, конечно.
НЛО прилетело и опубликовало эту надпись здесь
(изредка, когда нужно подсветить синтаксис, запускаю на пару минут mcedit).


так поставьте vim пополноценнее, там из коробки подсветка синтаксиса даже для логов есть :)
На машинах, где есть vim, запускаю и его тоже. Просто mcedit ставится вместе с миднайтом, который сам по себе полезная штука и чаще уже есть в системе.
НЛО прилетело и опубликовало эту надпись здесь
В IdeaVIM есть макросы.
НЛО прилетело и опубликовало эту надпись здесь
Только пользоваться им не перенося руки на стрелочные клавиши не получится.
Клавиатурные вегетарианцы — те, кто не прикасаются к мыши
Клавиатурные веганы — те, вегетарианцы, которые не прикасаются еще и к стрелочным клавишам.
Дальше наверное можно построить редактор, который управляется одним пробелом.
И наверняка есть еще редактор для впавших в клавиатурную нирвану — не прикасаться ни к чему.
НЛО прилетело и опубликовало эту надпись здесь
Я тоже не раз задавал себе этот вопрос: если vi используют столько людей, настоящих профессионалов — значит, они что-то в нем нашли. Но вот что — у меня так и не хватило терпения выяснить.
Да, да, как оказалось, зная Vim-овы команды можно очень эффективно переключаться между вкладками, переходить по ссылкам, листать вниз и вверх, искать текст на странице и многое, многое другое.

Как можно эффективнее «листать вверх и вниз», чем просто жать PageUp, PageDn, ну и пр. Чем именно эти функции удобнее, эффективнее в vi, чем, например, уж извините, в mcedit? Из статьи я это так и не понял.
Space — вниз, shift+scape — вверх.
g0 — переход в первую вкладку, g$ — переход в последнюю
>> — передвинуть вкладку вправо, << — влево
T — поиск и переход по уже открытым вкладкам
K, J — переход в правую, левую вкладку
p — открыть url из clipboard-а
yy — скопировать текущий url в clipboard
f — переход по ссылке (очень удобно увидеть все ссылки на странице и перейти к нужной)

это очень малая часть команд которые доступны в Vimium.
когда отсутсвует необходимость постоянно тянуться к мыши/течпаду и переключатся обратно к клавиатуре, все внимание переключается на экран. Соответсвенно информация усваивается лучше и производительность повышается.

это очень малая часть команд которые доступны в Vimium

Прекрасно, но все это можно делать с минимумом нажатий клавиш и в других редакторах, с более интуитивно понятным интерфейсом. Я-то допытываюсь, в чем заключаются те преимущества vi, которые могут сподвигнуть меня переключиться на него.
когда отсутсвует необходимость постоянно тянуться к мыши/течпаду и переключатся обратно к клавиатуре,...

Полностью согласен, сам не люблю разрываться между мышкой и клавиатурой. Но ведь это возможно и в других редакторах. В чем уникальность vi?
Уникальность в том, что редактор воспринимается как мольберт художника. Есть режим редактирования (когда непосредственно художник касается холста кисточкой), есть режим просмотра. Обычный редактор это как кисточка, которую оторвать от холста невозможно. Если холст большого размера и вам приходится его все время передвигать и переворачивать то такой подход естественно неудобен. Обьяснить преимущества навигаций клавишами HJKL чем обычные стрелки непосвященному конечно можно, но прочувствовать чем именно так лучше можно только самому. с Vim-ом нужно тренировать т.н. «мышечную память» (muscle memory) чтобы добиться каких либо заметных результатов. Это конечно новичков отпугивает, но если постараться то можно понять эффективность такого подхода
По своему опыту: от редекторов аля vim/emacs отпугивает не необходимость выучить сочетания клвищ до состояния «мышечной памяти», а отсутсвие средств для полноценной работы с кодом. Как ни крути, а в работе программиста чаще приходится работать с кодом, а не художественными текстами.

Сколько я слышал хвалебных од тому, как можно тонко настроить vim/emacs «под себя», но когда дело доходит до практики, то оказывается, что и плагинов то особо нету для редактирования кода. Есть полуфабрикаты типа ctags, плагинов реализующих сниппеты и тд и тп, но собрать из них IDE хотябы на уровне, не лучшего в своем роде, QtCreator не представляется возможным. А трудозатраты на написание плагинов, необходимых для комфортной работы, самостоятельно настолько велики, что проще смириться с ограничениями традиционных IDE, чем садиться за их написание.
Для того что бы использовать преимущества модального режима необязательно ведь в Vim-е сидеть. Многие IDE поддерживают Vim-режим посредством плагинов.
Хотя некоторые и очень достойны, например, VisVim для Visual Studio. Но все равно весь набор доступных команд редактирования и навигации не поддерживает ни один плагин.
К сожалению, да, это правда. Потому я был приятно удивлен насколько evil mode хорошо работает в emacs-е.
В работе использую в основном QtCreator, что Vim режим, что Emacs режим довольно ущербны и серьезно не дотягивают до свлтх прототипов.
В том, что нет необходимости тянуться к стрелкам. И в том, что для навигации по тексту есть отдельный режим, который сильно её упрощает.
К сожалению, на разных клавиатурах перечисленные вами клавиши находятся в разных местах. На некоторых моделях ноутбуков вообще включаются только через комбинацию, а на некоторых их вообще нет. В то же время shift, ctrl всегда находятся на знакомом месте. Особенно это проявляется в случае, когда вы обладаете навыком слепой печати
Emacs я не осилил, так что ничего про него не скажу.
А вот vim-ом пользовался долгое время практически для всего. Но очень быстро от него отказался, когда начал профессионально разрабатывать достаточно большие проекты (php). И единственное, чего в vim-е мне не хватало — это перехода к методу/переменной по клику. Всеми остальными наворотами IDE пользуюсь редко, а вот это очень полезная фича. Недавно попробовал вернуться на vim — её отсутствие взбесило за 10 мин. Когда вместо простокого Ctrl+Click нужно полторы минуты ковыряться в NERDTree или Project-е. Да, я знаю, что там есть плагины для это, но работают они кривовато.
В Emacs как с этим, кто расскажет?
В VIM можно для этого использовать ctags, а в PHPStorm — IdeaVIM, чтобы стало больше как VIM.
Кстати большой респект мейнтенерам IdeaVim — обалденный плагин. Наверное одна из немногих фич JetBrains-овских IDE, которая очень долго удерживала меня от перехода на Emacs. Я до сих пор для серьезной работы использую WebStorm, но в свободное время допиливаю свою Emacs-овскую конфигурацию.
НЛО прилетело и опубликовало эту надпись здесь
Руки и так мало двигаются у компьютерщиков, а предлагается еще и вариант с «я перестал двигать руку на 10 сантиметров и теперь бойлерплейчу на 40% эффективнее». Вся эта модальная фигня дает преимущества только на VT52.
Поэтому мне и нравится emacs — выкинул всю чушь тридцатилетней давности и древних терминалов типа C-n/C-p (тут, конечно hjkl — верх юзабельности) и перед тобой современная и развивающаяся среда, которая действует вполне в рамках любой другой программы и дружит с мышкой. А торопиться генерить текст мне некуда.
Кстати я заметил что C-n/C-p во многих продуктах поддерживается. Например в Chrome — при наборе в адресной строке, при переключении пользователей можно листать вверх/вниз по предложенным вариантам, в Sublime по менюшкам, Spotlight и Alfred — на OS X и.т.д.

>А торопиться генерить текст мне некуда.

В том то и дело что мы чаще заняты просмотром своего/чужого кода, чем нежели непосредственно редактированием. И вот тут то то «модальная фигня» обалденно помогает
По мне C-n C-p — тот же туннельный синдром, что и от hjkl, даже хуже.
>И вот тут то то «модальная фигня» обалденно помогаетм
И чем она помогает, ctrl-f (C-s) в одну клавишу вызывается? Для чтения удобнее всего парсящий AST IDE с ctrl+click доступом. А редакторы удобны для всякой динамической фигни, конфигов и шеллов. Если я пользуюсь языком более, чем пару часов в неделю, я ищу IDE и осваиваю ее, получается лучше, потому что специализированный инструмент лучше универсального, хотя и требует времени на освоение. Причем ни что мне никогда не мешало держать один и тот же текст и в IDE, и в редакторе, почему так не делают — не понимаю.
Рекомендую поближе рассмотреть современное состояние neovim. Он по своей философии куда ближе к emacs чем предыдущий vim, так как ставит расширяемость (в основном, на Lua) и встраиваемость (благодаря использованию msgpack) во главу угла. И разные байндинги теперь не хаки, а полноправные «граждане» в мире neovim, При этом стараются сотрудничать с авторами плагинов для оригинального vim, для портирования их, либо же обеспечения совместимости.
Недавно поставил себе на планшет vim touch. Вместе с hackers keyboard прекрасный текстовый редактор.
Простите нуба (меня) за нубский вопрос.
По жизни использую vim (разработка), и даже использую хоткеи типа dd, d$, x и тому подобные, т.е. не навигационные (за исключением перехода по результатам поиска, конечно, ну еще переход на нужную строку). само собой настроены ctags с автопересбором для проекта, свои хоткеи для табов и тд. Но никаких навигационных хоткеев не использую, и поэтому хочу уточнить, может я так сильно страдаю, и пора поднять свою производительность :)

Вот, например у меня строка типа
li = map(lambda x: "{0} - {1}".format(x, grade(x)), s)

печатаю, конечно вслепую, но наверняка у многих такое было, что 2 соседних буквы меняются местами по ошибке. и, допустим, что я напечатал:
li = map(lambda x: "{0} - {1}".fomrat(x, grade

и заметил ошибку в слове format. Как самый простой человек я стрелочками отхожу назад и правлю, а как делают гуру vim?
Начинаем VimGolf :) Я бы сделал так (позиция курсора в конце строки):
<Esc>Fmxp
Выглядит очень круто! даже по справочнику понял, что оно делает. спасибо!
используют AceJump :)
шучу конечно. Как товарищ подсказал ранее «F» в самый раз. А AceJump как бы крут не был как-то не использую практически совсем. Энергозатрат много — нажми букву, выскочит восемь тыщ подсказок, найди нужную подсказку и.т.д. По мне как-то быстрее штатными средствами допрыгать
Раз в статье не объяснили, то может быть кто-то мне в комментариях ответит в чём крутость Vim и Emacs?

Как я понимаю, Vim и Emacs это два архаичных линуксовых текстовых редактора, одной из особенностей которых являются сложные сочетания клавиш. Я не программист, а только учусь, и мне кажется что в современных софтвенных компания пользуются разнообразными IDE. Я сижу на Windows7x32 мне нравится текстовый редактор Notepad++ хотелось бы также узнать преимущества Vim или Emacs перед ним. Домашние сайты обсуждаемых проектов не впечатляют, закрадывается сомнение, что они могут предложить что-то восхитительное.
Основное преимущество vim/emacs — это возможность работать не используя мышь. Когда работаешь только с клавиатурой, используя хоткеи, производительность действительно существенно увеличивается. И тогда скорость работы зависит уже от скорости печати самого программиста.
Как я понимаю, Vim и Emacs это два архаичных линуксовых текстовых редактора,
Не совсем так; вернее, совсем не так. :-) Vim и Emacs — это современные многофункциональные и расширяемые редакторы, поддерживающие множество платформ, операционных систем, конфигураций и сценариев использования.
В современных софтверных компаниях каждый разработчик пользуется тем, чем ему удобно. Компании, которые навязывают своим программистам какую-то определённую IDE, или вообще IDE вместо любимого текстового редактора — либо не современные, либо не софтверные.
notepad++ нет на OS X например :)
notepad++ нет на OS X например :)
Не поверите, но есть (wine-порт).
Хотя, как по мне, ему есть нативные альтернативы.
Vim это иной стиль мышления.
В «обычном» текстовом редакторе человек тупо выполняет пошаговый алгоритм типа «shift+стрелочку вправо пока не встретим скобку;ctrl+C»,
хотя на самом деле ему не нужно гонять курсор туда-сюда, а нужно просто скопировать в клип текст до скобки.
В vim используются компактные команды которые заставляют редактор сразу выполнить _нужное_ действие «yt)»
что является простой и осмысленной для человека фразой Yank Till ")"

Это олицетворение старой истины «Машина должна работать, а человек — думать».

Не знаю можно ли квалифицировать геймдев компании как современные, но в нашей среде множество людей сидят на Vim.
Основное преимущество vim/emacs — это возможность работать не используя мышь.
— И это самое важное? В многих программах заложена возможность работать без мыши.
Vim и Emacs — это современные многофункциональные и расширяемые редакторы, поддерживающие множество платформ, операционных систем, конфигураций и сценариев использования.
— хотелось бы поконкретнее. Автор статьи уже написал несколько абзацев порожняка.
notepad++ нет на OS X например :)
— и не надо. Сижу под виндой, линуксоидов уважаю, а продукцией фирмы «яблоко» даже не интересуюсь.
В vim используются компактные команды которые заставляют редактор сразу выполнить _нужное_ действие «yt)»
что является простой и осмысленной для человека фразой Yank Till ")"
— ну вы же и подтвердили мои слова, что всё преимущество сводиться к хитроумной системе команд. Для меня фраза «Yank Till» совсем не осмысленная.

Возьмем к примеру программы для общения. Skype лучше ICQ (ранние версии) тем, что можно видеть собеседника, это преимущество. А фразы типа: «Vim — обалденная все таки вещь, единственный недостаток Vim-а — привыкнув раз, привыкаешь на всю жизнь.» это эмоции.

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

Вы про «Tab Tab Tab Вверх Tab Enter»? Это не «возможность работать без мыши», это костыль для галочки.
>> Сижу под виндой, линуксоидов уважаю, а продукцией фирмы «яблоко» даже не интересуюсь.
Ваше право. Но не нужно мерять других по себе. У меня OS X — основная система из вышеперечисленных.
Единообразность Vim на трёх системах удобна.

>>преимущество сводиться к хитроумной системе команд
Логичной и понятной

>> Для меня фраза «Yank Till» совсем не осмысленная.
Учите английский
Попробуйте поставить Vimium расширение под Chrome. Не нужно знать Vim, не нужно знать никаких команд и сочетаний клавиш. Зайдите на любой сайт и нажмите «f». Вам сразу станут очевидны преимущества такого подхода.
Зачем vi-топор программисту 21-го века?

Ответ на деле довольно прост: переносимость и обобщенность.

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

Дело в том, что программирование часто выходит за рамки любой IDE и очень нужен гибкий редактор. На пример я хочу написать программу на VimScript (ой утрирую, на деле возьмем любой редкий язык) или документацию на Markdown. Предложите ставить рядом с IDE, весом в ~1Гб еще одну или специализированный редактор? А если я пишу на 20 языках, да еще и в LaTeX верстаю? Что, если я один поддерживаю в свободное время сайтец, предлагаете поднимать сборщик с выгрузкой на сервер или ставить IDE на raspberry pi? Я частенько вопрошаю у google с помощью комбинаций клавиш в редакторе, а когда тот не может мне помочь, я прямо в редакторе подключаюсь к jabber и вопрошаю там. Моя неграмотность — мой бич. Я могу допускать синтаксические и грамотические ошибки прямо в документации к моему коду, а хотелось бы, чтобы редактор поправлял меня (и не только для английских текстов).

Преимуществом Vim является его переносимость и обобщенность, ведь программист это не печатная машинка, которая переносит поручения начальства в код, а еще и живой человек, которому, помимо основной работы, нужен простой, быстрый и гибкий редактор на все случаи жизни.
Единственный аргумент за vim, что я слышал, который реально делает vim лучше других — это vim работает в консоли, и когда у тебя куча серверов с консолями/без gui, и надо что-то постоянно редактировать. Тогда Vim рулит. Не имеет значения, на сколько быстро ты пишешь с помощью vim или %моя_любимая_IDE%, или как быстро переходишь по тексту, переключаешься между вкладками; время в основном съедается раздумиями и дебагингом/пробами алгоритмов.

пс. пробовал vim, использую vim. Но мне больше нравится когда все горячие клавиши переходов/поиска/подстановки работают в режиме редактирования, как в обычных ide, и не надо переключать режимы.
Время съедается в раздумьях, потому не очень хочется тратить его на позиционирование курсора на кнопочке размерами 25x25 пикселей, если вы понимаете о чем я.
Глупый аргумент, человек не однозадачный, а уж взаимодействие с любым интерфейсом уходит из сознания очень быстро
Я разве говорил об осознании или работе на автомате?

Мне проще закомитить изменения нажав gC, а затем выгрузить в репозиторий с помощью go, чем наводить курсор на vcs, затем на git, затем на commit, после нажимать Ok, после на push, и все это гоняя мышью по экрану (на примере JetBrains продуктов).

Вот честно, в IDE я боюсь комитить изменения. Для меня это целое событие. После того, как поднаписал под Vim плагин для Git, началь пользовать последним в разы чаще.
>После того, как поднаписал под Vim
Ну то есть суть в DIY-развлекухе, а не «о Боже, мой мозг так перегружен кликом по иконке, что я выпал из потока»
Вы это считаете DIY-развлекухой, я — «заточкой» инструментов под собственные нужды.

При чем тут «перегрузка» мозга я так и не понял. Я ни слова не говорил о сложности действий, я говорю о том, что эти действия занимают гораздо больше времени. Собственно любой GUI требует больше времени для решения задачи, чем DIY-развлекуха со скриптами, для решения той же задачи.
В поток лучше вообще не впадать, но если уж попал, то не надо в нём делать резкие движения и тем более комиты в центральный репозитория.
В JetBrains продуктах, если нет желания лазить по менюшкам (у меня его тоже нет), это делается элементарно из встроенной консоли.
Можно пример команды во встроеной консоли JetBrains продуктов для коммита и пуша изменений?
Встроенная консоль — это полноценный терминал внутри IDE.
Поэтому (у меня):
gc — git commit
gca — git commit -a
gp — git push
gl — git pull
и т.д.

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

А как на счет того, чтобы я нажал прямо в редакторе gb, и мне, в соседнем окошке, открылся список веток репозитория. Можно еще с помощью консоли сделать так, чтобы я выставил текстовый курсор на нужную мне ветку и нажал Enter, при этом весь проект изменился в соответствии с этой веткой?
>Можно еще с помощью консоли сделать так, чтобы я выставил текстовый курсор на нужную мне ветку и нажал Enter
Лол. Кликать мышкой — это лазать по менюшкам. А вот «выставлять текстовый курсор» — другое дело
Вот именно потому, что вы (судя по всему) не пользуете Vim, вы не различаете «перемещение курсора» и «работа мышкой». Для примера выставить курсор на нужную ветку можно с помощью «4j», а после жмем Enter. При этом руки остаются в удобном для последующего программирования положении, а не на мышке.
Зачем мне этот суррогат, если я в консоли могу набрать git branch имя_ветки? По поводу «руки остаются» я выше писал — руки должны двигаться, иначе они отсохнут раньше времени от гиподинамии.
Совершать движения пальцами для предотвращения гиподинамии это примерно как вычерпывать море ложкой. Когда речь идёт о наборе текста, то с точки зрения охраны здоровья — чем меньше движений — тем лучше.
То есть половина того функционала, что есть в JetBrains продуктах, программист, не желающий лазить по менюшкам, будет выполнять через консоль? Зачем тогда этот функционал нужен?
Вы привели пример, я вам ответил что в IDE это можно сделать практически аналогично, если есть желание. При этом не нужно ничего настраивать в самой IDE: приведенные алиасы живут в rc-файле и используются в любом терминале в системе.

А как на счет того, чтобы я нажал прямо в редакторе gb, и мне, в соседнем окошке, открылся список веток репозитория. Можно еще с помощью консоли сделать так, чтобы я выставил текстовый курсор на нужную мне ветку и нажал Enter, при этом весь проект изменился в соответствии с этой веткой?
По хоткею открывается окно со списком веток. Набирая название ветки, дерево сразу же фильтруется. По Enter загружается ветка.
Ни одного движения мышью. Внезапно?
в IDE это можно сделать практически аналогично, если есть желание

Воспользоваться консолью это не практически аналогично.

По хоткею открывается окно со списком веток

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

Что за хоткей?
Какой поставите в настройках, такой и будет.
Как на счет хоткея для сравнивания изменений текущего файла с ним же в другой ветке?
Он тоже есть.
И давайте на этом остановимся, иначе останемся без субботы.
Ок, ок )

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

У vim — свои сильные стороны, у ide свои. Частично они пересекаются, но не во всем.
Если в vim когда-нибудь появится тот функционал, который мне дает ide (и который я использую), то я бы дал ему шанс. А там кто знает, может быть и пересел.
Сейчас как раз занимаюсь написанием группы плагинов для приближения vim к IDE. Может когда нибудь пересядите и скажите — да, это удобнее ;)
Все возможно) Желаю вам успехов в написании.
Значит уже пора. vim подобные режимы есть не во всех IDE, но в IDEA MSVS и Eclipse они есть.
$ git push
В JetBrains продуктах, если нет желания лазить по менюшкам (у меня его тоже нет), это делается элементарно из встроенной консоли.
или хоткеем.

А функционал git add --patch они уже сделали, не знаете?

Ещё в идее убогий 3way merge, т. к. при его использовании невозможна навигации по коду остального проекта…
А функционал git add --patch они уже сделали, не знаете?
Увы, не в курсе: привык для vcs использовать консоль.
Вы очень странные ide использовали, дорогой оппонент. Либо это были просто редакторы типа gedit. Все топовые ide позволяют коммитить одним сочетанием клавиш и так же пушить (кстати, в том же JetBrains :). Если вы сравниваете то, что в ide надо записать макрос или добавить собственноручно «hotkey» с тем, что плагин уже свои подтягивает, то это некорректно. Вы всё равно донастраиваете vim устанавливая плагин.
Я уже писал выше, какими редакторами я пользуюсь. Я настраивал сочетания клавишь, в результате получалось вместо vcs->git->commit, после Ok, после Push нечто вроде gc, после Ok, после Push. К сожалению от мышки избавиться так и не вышло.

Я не говорю о том, что Vim лучше стандартными хоткеями, я говорю о том, что он:
  • Гибче — как то пробовал написать плагин под JetBrains решения, до сих пор не отошел
  • Удобнее — не люблю я тянуться за мышкой, когда пишу код или выполняю команды редактора

Во всем остальном, современные IDE куда более функциональные.
Кнопки тоже имеют свои хоткеи: ctrl+k, alt+p — коммит+push в JetBrains phpstorm (или ctrl+shift+k сразу push).
Не хочу смешивать ветки, но придется. Как на счет того, что я описал в этом комментарии. Хоткеев явно будет мало.
Как на счет того, что я описал в этом комментарии. Хоткеев явно будет мало.
Достаточно одного :)
Но Emacs тоже замечательно работает в TUI-режиме. И, к тому же, позволяет редактировать файлы удалённо, в т.ч. по SSH.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории