Pull to refresh

Comments 103

Да, а еще IdeaVim начинает дико глючить во всяких модальных окнах Intellij Idea, когда ты начинаешь вводить название файла, а в это время что-то начинает стираться, потому что ты нажал d.
З.Ы. Релевантно было для него год назад.
Еще до недавна глючило, но теперь перестало. Более того, теперь он загружает конфиг из ~/.ideavimrc; поддерживается, к сожалению, не все, но можно, например, перемапить клавишу.
По-моему, использование Vim для программирования в современных реалиях сродни проведению операции через замочную скважину. Уже давно у программистов совершенно другие рабочие места. Большие мониторы Full HD, огромные возможности автоматизации и намного бОльшие размеры проектов.
Мне было бы интересно, как в виме можно провести рефакторинг кода. Например, добавить параметр в функцию. Это же ужас.
Для этого можно использовать IDE от JetBrains с IdeaVIM, как сказано в статье. Из личного опыта, редактировать текст (что происходит намного чаще, чем рефакторинг) определенно быстрее с VIM.
IdeaVIM пол года назад глючил, по мелочи, но пришлось переучиться назад на стрелочки (пол года до этого работал с VIM)
Vim — невероятно продуктивный редактор текста, если его изучить. Кроме того, страдаю от туннельного синдрома. После перехода на vim симптомы практически исчезли, так как при работе с vim не надо напрягать руки/кисть, растопыривая их по клавиатуре.

И vim ортогонален IDE, в общем-то. В PyCharm, например, использую IdeaVIM.
UFO landed and left these words here
В VIM этот сценарий тоже довольно удобен: нужно найти паттерн, который необходимо отредактировать (например, используя /), сделать изменения, а потом повторять n.. При этом n без точки заменяет find_under_expand_skip из Sublime.
UFO landed and left these words here
Найти слово под курсором – *. Всего один символ.
UFO landed and left these words here
С не одним словом немного труднее, но тоже не так страшно. Скажем, нужно поискать 3 следующих слова:
y3w (yank three words)
/ ^R0 (search, put the content of the register 0, which is the default register)
При этом опытный VIM'er гарантированно сделает это быстрее чем вы дотянетесь до мыши, если только вы не Лучший Стрелок Дикого Запада.
Давайте будем конструктивными и говорить о удобстве и неудобстве, только в случае если осилили оба способа.

В Vim есть режим выделения строк в коммандном режиме. Если нажать просто “v" — то по передвижению курсора будет выделяться блок текста. Если же нажать большую “V” то бишь с шифтом, то по передвижению вверх вниз будет выделяться целый блок строк, от начала и до конца, целиться не надо.

Потом нажимаем “dd” чтобы вырезать или “yy” чтобы скопировать. Переходим на строку после которой нужно вставить и нажимаем “p”.

У меня эта операция занимает никак не больше времени чем мышкой, причём Vim я начал осиливать несколько месяцев как.
UFO landed and left these words here
Если печатаешь вслепую, то быстрее с клавы. Мышь потому нравится большинству людей, что они работают с ней вслепую, а с клавой смотря на неё.
UFO landed and left these words here
Не удобные сочетания это дело привычки всего лишь. Правда стандартные клавы не очень то и удобны для нормальной работы вслепую, для перемещения курсора приходится перемещать руку со стартовой позиции печати, потом обратно. Нужны клавы, где руки не нужно никуда перемещать.
UFO landed and left these words here
А мне лениво целиться мышью и выделять кусок кода, чтобы все что надо было и ничего лишнего.

Поэтому, всё по-прежнему сводится, к ослил/не осилил и кому как удобнее.

В любом случае, чтобы мнение было объективным — нужно попробовать оба способа на протяжении некоего периода времени. А так я могу сказать, что носки с отдельными пальцами — это неудобно, хотя сам их никогда не носил.
UFO landed and left these words here
Пардон не внимательно прочитал. Да Sublime крут в этом плане. Но и в Sublime у меня постоянно включен Vintage mode.
Туннельный синдром он не от «растопыривания рук по клавиатуре», а из-за неверного положения рук.
Я работаю на ноутбуке, причем часто вне дома, поэтому какие-то кастомные мега-клавиатуры мне не подходят. Не буду же я таскать их всюду с собой.

И, мне кажется, дело даже не в постановке рук, над которой я работал, а в продолжительности работы за клавиатурой.

Рекомендую просто, если проблемы с болью в руках, попробовать перейти на vim. Вместе с работой над эргономикой рабочего места и позицией рук, конечно.
Не сказать, чтобы я работаю за клавиатурой очень много (всё-таки не стенографист/копирайтер, а разработчик), но вроде хватает… В общем пару раз отхватывал «приятные ощущения» (в первую очередь на мышке) — изменение позиции на правильную резко возвращала работоспособность.

А у ноутбуков с эргономикой ещё и в том проблема, что они сравнительно «высокие» и «близкие» — клавиатура слишком высоко и слишком близко относительно монитора, из-за чего сложно руки расположить правильно и при этом нормально работать за компьютером.

В общем — в первую очередь надо подумать над эргономикой рабочего места (можно ещё со специалистами от медицины на эту тему пообщаться). А эргономика движений (вызываемых интерфейсами) — она наверное более индивидуальная штука (у меня руки просто не переварят зависание на одной точке).
Для Vim есть куча плагинов, которые добавляют функциональность и получается отличная IDE.
Имея опыт превращения Sublime Text в IDE могу сказать, что это всё не то. Ощущается так, как будто работаешь с горой костылей. Хотя возможно это не относится к Vim.
UFO landed and left these words here
Idea, Netbeans — выделяешь блок текста (40 по 67ую строку) -> замена (регулярка, результат).
Если вы о каком-то функционале не знаете — это не значит, что его нет.
UFO landed and left these words here
А мышку-то вы где потеряли?

PS Таким функционалом вообще не интересовался, но можно и без выделения, а можно и выделение с клавиатуры задать.
PPS а ещё у Idea есть замечательное блочное выделение по ctrl-w (внесение в выделение блока текста, начиная со слова или фразы — в зависимости от исходной точки, заканчивая при повторных нажатиях любым блоком кода — чем дольше нажимаешь, тем больший блок попадает в выделение.
А как вы узнаете, что вам нужны строки именно с 40-ой по 67-ю? (Что это за задача такая, интересно?) То есть, вы сходите на начало метода, посмотрите номер строки — 40, запомните, потом на конец — запомните 67. И только потом будете вводить эти команды. А в IDE вы сразу выделяете метод и делаете замену.

Кроме того, замена чаще требуется не по регулярке, а определенной переменной, либо названия метода и т.п. Там (в IDEA) еще проще: встали на заменяемого курсором, Shift+F6, написали новое, Enter. Красота.
UFO landed and left these words here
велело вам будет выделять с 40 по 200 напиример

Нумерация строк — позапрошлый век, а выделять мышкой запросто: ставите курсор на начало 40-й строки (при этом не зная ее номера), далее кру́тите колесом на 200-ю (опять-таки, не по номеру, а по содержимому), нажимаете Shift и клацаете мышкой на конец 200-й строки — все выделено!
Вот мои несколько примеров из личного опыта использования Vim в реальных проектах.

Большие проекты:
Например, я могу в своем GVim на первой вкладке открыть окна для разработки под Oracle (на данный момент проект несколько сотен тысяч строк кода). На второй вкладке открыть окна для разработки на ExtJS MVC-приложений. И меня вполне все устраивает.

Рефакторинг
Плагинов для умного рефакторинга а-ля Reshaper, не нашел. Но тем не менее, вот понадобилось заменить функцию почти в 100 файлах, это было сделано двумя командами:
$vim *.sql
:argdo %s/old_function/new_function/g
Меня это возможность выручала кучу раз.
Regexp'ы тоже всегда на подхвате.

Возможности автоматизации
Vim очень гибок в вопросе автоматизации. На месте можно быстро записать макрос, в случае необходимости отредактировать и сохранить на будущее. Одной командой можно запустить выполнение макроса в определенных или всех буферах, определенных (или всех) строках. Если требуется действительно что-то сложное, то можно это запрограммировать на vimscript, lua, python, ruby или еще как-нибудь. Яркий пример система автокомплита YouCompleteMe от гугловца Val Markovoic.

Большие мониторы
У меня два FullHD монитора. При таких условиях работать, действительно, удобно. Не представляю, как десятки лет назад разработчики обходились стандартной консолью 80x25.

Итог
Да, чтобы освоить Vim, надо этого хотеть, иначе ждет разочарование. Хотя и звучит парадоксально, но если немного постараться и привыкнуть к его интерфейсу, то Vim становится прост в использовании.
Хоть и пользуюсь emacs, поддержу оратора:

Большие проекты:

Для комфортной навигации по коду достаточно ctags и cscope. По коду практически любых проектов практически любого размера. Куча людей работает с ядром linux в vim/emacs, причем не только тех кто начинал с ним 20 лет назад. Хорошая навигация по файлам очень важна — у меня в текущем проекте > 300 открытых файлов, при разных задачах я включаю разные способы переключения — по имени, нечеткий поиск по имени, хоткеи для часто посещаемых файлов. Вообще чем больше проект, тем больше я кастомизирую среду под него, а всех способов кастомизации никакая IDE не предусмотрит.

Рефакторинг:

Не так страшен черт как его малюют. Все эти киллер фичи IDE типа переименования метода и изменения его сигнатуры — это не то, что занимает 99% времени работы с кодом. А если уж приходится с этим сталкиваться то ack и макросы работают на ура. Остальные рефакторинги в IDE мне никогда не были нужны. Я имею ввиду чтобы решить задачу или как-то кардинально сэкономить время на ее решение. В плане рефакторинга я как веб-программист 90% времени сталкиваюсь с необходимостью отрефакторить мешанину из html/php/js в представление, логику и клиентскую логику. И макрос который разбрасывает куски кода по нескольким файлам(создавая новые при необходимости) тут гораздо полезнее всего того, что может дать IDE.

Возможности автоматизации:

Макросы нужны как минимум для рефакторинга. Пример — у меня была папка с кучей мелких js файлов, где было неясно на какой странице они сидят и от каких переменных зависят, буквально по функции в каждом. Нужно было склеить это дело в 3 полновесных контроллера. Я написал макрос, который дописывал в начало файла пустые глобальные переменные и делал lint. В зависимости от того с какой из дописанных переменных lint проходил успешно, исходный файл дописывался к нужному контроллеру. Хорошая автоматизация — это та одна фича за которую я готов простить emacs все его недостатки.

Настройка

У меня 4 вида автодополнения замапленые на 3 разные хоткея — по файлам в каталоге, по символам кода и тэгам, по уже введенным словам, а также нечеткое автодополнение, которое тяжело описать, но которое может по одной кавычке дописывать целые блоки кода, экономя десятки нажатий на клавиши. И в разных ситуациях я решаю какой хоткей нажать, чтобы быстрее получить желаемый кусок текста. Про приятные мелочи, типа пуша на сервер и открытие соответствующего тикета в багтрэкере по одной клавише я даже не буду упоминать, тем более что в некоторых IDE есть интеграция с багтрэкерами.

Разные условия

С vim/emacs вы сможете работать везде. Иногда это важно. Я не раз сталкивался с параноидальными людьми, которые дают доступ на свои сервера только через teamviewer и дают устанавливать софт только из стандартных репов. Или вы просто не сможете развернуть у себя рабочее окружение и вам нужно будет работать по ssh, да порой не просто по ssh с хреновым каналом, при котором о работе через sshfs лучше забыть.

Итог

Если вы серьезно занимаетесь программированием и при этом не рефакторите ынтырпрайз целыми днями, то вы неизбежно придете к решениям типа vim/emacs либо прямым путем, либо будете прикручивать те же костыли к своей IDE.
Откуда такие абсолюты в утверждениях? Вне зависимости от типа проекта — я не приду к vim/emacs (которые непонятно ещё дадут ли чего, а глубокое обучение уже нужно), и не буду «прикручивать костыли к своей IDE» — в этих самых IDE столько функционала, что его изучать и изучать ещё…
Мне кажется это у вас абсолют, выражающийся в отрицании того что с течением времени вы будете пытаться улучшить инструмент с которым работаете, делая свою жизнь удобней.
Если вы присмотритесь:
и не буду «прикручивать костыли к своей IDE» — в этих самых IDE столько функционала, что его изучать и изучать ещё…


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

А вообще отдача при изучении IDE, как мне видится, выше, чем отдача от изучения vim.
Приходилось месяц работать над действительно крупным проектом по ssh-сессии (вдаваться в то, откуда такие трудности, не буду). Так вот, tmux, vim, exuberant-ctags и ack-grep полностью решали возложенные на них задачи и дискомфорта не ощущалось отчасти потому, что обычное desktop-окружение у меня очень схожее, только tmux заменяет нормальный X-овый менеджер, dwm.

На самом деле пользоваться машиной можно практически без использования мыши или иных манипуляторов. Терминал и редакторы, понятно, тут мышь не нужна; вьюверы вроде evince, mupdf и llpp понимают раскладку vim и позволяют как минимум прокручивать содержимое документа; для firefox есть vimperator и с ним можно управляться вполне сносно (для любителей emacs есть conkeror).

Если в наличии есть клавиатура от thinkpad с trackpoint, то ситуация еще лучше.
А у меня вышло наоборот — если бы не Соло на клавиатуре, так бы наверно и не научился печатать. В общем, у каждого свой вкус и подход к обучению, так что «держаться подальше» я бы точно не рекомендовал — попробуйте все и выберите то, что вам больше всего подходит.
поддерживаю, слепой печати на русской раскладке научился как раз по СОЛО, как и моя жена. А вот английской учился по какому-то онлайн курсу, но благодаря СОЛО понял, какой подход к обучению необходим.
СОЛО — это просто быстрый способ научиться печатать. Научиться печатать можно и без этих всех программ — просто набирая нужные тексты, но не так эффективно.
Шахиджанян далекие 7 лет назад научил меня набирать вслепую на клавиатуре. Прекрасно научил! А про отбивания желания — это все вопрос к себе. Если хочешь научиться, тебя ничто не остановит, а если не хочешь, любой крутой курс окажется бессилен.
Впервые услышал эти названия в этой статье. Что сказать, моим учителем были вареная и мморпг различные. Когда от скорости набора зависит, умрет твой герой и потеряет 4% опыта, которые ты качал на протяжении недели, то навык быстрой развивается моментально и совершенно естественно. В общем хоть какая-то польза от этих игр осталась
Я написал, что тренажёр не плохой. Но в нём слишком много саморекламы, слишком много Шахиджаняна. Писать по 100 раз фразы с этой фамилией невероятно бесило. Ещё этот звук при совершении ошибки я помню до сих пор. И там были странные письма благодарных солистов. Поэтому Соло запомнился мне как камера пыток.
На то время альтернатив не было, поэтому курс можно назвать хорошим, но сейчас есть куча подобных тренажёров без лишних нравоучений.
Лично я на Стамине обучался и тоже помню звуки ошибки, но я их вспоминаю с радостью, музыкальная тема и прочие звуки были на пять баллов. Иногда даже специально хотелось ошибиться чтобы звук услышать, наверное поэтому у меня до сих пор достаточно большой процент ошибок — около 2%
Звуки — отключаются настройками (ага, я тоже не знал, сапорту написал — удивился). Как и визуальные эффекты, кстати…
Собственно — я не прошёл этот курс. НО я с его помощью научился слепой печати (причём на базис русской раскладки весьма неплохо легла английская раскладка).

PS он реально не тренажёр, а курс. И там свой педагогический подход, который, вполне возможно, не универсален (не подходит всем).
Соло эффективен, но обладает перечисленными Вами чертами. Есть другой тренажер, не такой напрягающий — называется VerseQ.
Установил Ace Jump — достаточно удобно, особенно когда много мелкого текста на экране. Спасибо!
Хорошо отучает от использования мыши программирование в удалённой виртуальной машине через VPN по 3G — отрисовка графического интерфейса происходит с задержкой иногда на две-три секунды, так что просто не видишь реакции на действия мыши, и проще делать всё с клавиатуры.
Стоит еще добавить про тайлинговые оконные менеджеры. Если часто приходится работать больше чем с тремя окнами — это просто невообразимо удобная вещь.
Заинтересовали, можно чуть поподробнее, или хотя бы примеры?
2-3 монитора рулят, ага… И никаких тайлингов не надо.
Оппозиция! Не бойся высказаться!
Смотрел я на тайлинги — они значительно менее удобны ещё одного монитора. Возражения?
При чём здесь доп. монитор? Он избавляет вас от необходимости таскать мышкой окна приложений?

Плюс, в многомониторной конфигурации tiling wm ещё больше уделывает стековый, тк там перебросы окон между мониторами делаются опять же 1 кнопкой, как и между рабочими столами.
При чём здесь доп. монитор? Он избавляет вас от необходимости таскать мышкой окна приложений?

Абсолютно. У меня все окна «максимизированы». Чем больше мониторов, тем легче переключать контекст. Но меньше двух — уже тяжко.

Плюс, в многомониторной конфигурации tiling wm ещё больше уделывает стековый, тк там перебросы окон между мониторами делаются опять же 1 кнопкой, как и между рабочими столами.

В win-системе одним хоткеем (про другие — не знаю).

PS в тайлингах мне не нравится, что пространство монитора (итак небольшое) приходится делить на несколько источников информации.
Vim – весьма полезный для некоторых задач редактор (например, идеальный инструмент чтоб через ssh на сервере что-то быстро пофиксить). Для поседневного использования отталкивает лишь полнейшая неинтуитивность, огромное множество шоткатов и комманд, которые как "вилька и тарэлька – это нельзя понять, можно лишь запомнить".

Многие задачи удобнее и быстрее выполняются с помощью мыши (не всегда полностью мышью, но с помощью неё).
То есть, я к тому, что не надо упираться в крайности – «только мышью» или «только клавиатурой».

Лично для меня, пока что, идеалом является Sublime Text – его fuzzy-менюшки оставляют возможность пользоваться шоткатами вместо мыши, но при этом заучивать ничего не нужно – только 1 комбинацию для вызова fuzzy-поиска.
При этом никто не мешает выполнять мышью операции, которые удобнее выполнять именно визуально – выделение текста, перемещение курсора.
Спасибо, но при наличии большого количества отличных современных редакторов, лично я не понимаю, зачем нужно именно понимать Vim более, чем необходимо для хотфиксов через ssh. Не спорю, возможно, кому-то это нужно…
Могу говорить за себя, но мне лично не нужно, чтобы IDE что-то генерировала или соображала за меня. Напротив, необходим максимально удобный и гибкий инструмент работы с кодом, что собственно и предоставляет vim. Настроить можно абсолютно все и организовать именно удобным тебе образом.
Ну и на счет вашего аргумента — есть проекты, где весь код компилируется на удаленных машинах.
Не очень понимаю, что имеется в виду под «генерировала», «соображала за меня». IDE, в моём понимании, лишь инструмент для работы с кодом. Впрочем, как я писал выше, мне очень нравится Sublime Text, который не совсем IDE, а скорее многофункциональный текстовый редактор (как и Vim).

Компиляция кода вообще где угодно может происходить, не очень понимаю, зачем в этом процессе нужен текстовый редактор… В любом случае, я ж не против Vim вообще. Я против Vim лично для меня :) Просто потому, что он менее удобен (для меня), чем более современные инструменты.
Большинство современных редакторов плоть от плоти блокнота и кровь от крови его и главная их фича точно такая же как у блокнота — с ними может работать неопытный пользователь.
Главная фича Vim — комфорт, которого блокнот дать не может by design. Ради этого комфорта и стоит учиться пользоваться Vim. Пусть это и требует определённых усилий.
Как я вижу ситуацию:
«Блокнот»:
+ всё интуитивно
+ не надо запоминать ничего
‐ мало возможностей
‐ медленная работа с кодом
‐ Нельзя использовать через ssh

Vim:
+ Много возможностей (кастомизация, плагины, etc)
+ Быстрая работа с кодом (если освоить)
+ Можно использовать через ssh
‐ Необходимо заучить кучу комманд и шоткатов
‐ Неинтуитивные (для неопытного пользователя) режимы

Sublime Text:
+ Много возможностей (кастомизация, плагины, etc)
+ Быстрая работа с кодом (сразу)
+ Всё интуитивно
+ Не надо запоминать
‐ Нельзя работать через ssh

Повторюсь, такова картина лично для меня.
Я немного не то имел в виду. Можно открывать в ST файлы через ssh, но нельзя работать через ssh-консоль с произвольным сервером и пользоваться там ST для редактирования файлов, когда нужно. Vim-то он практически везде установлен.

update: А, о, это я не сразу понял, о чём пост. Да, спасибо, прикольно. Но всё равно это требует неких танцев с бубном, хоть и небольших.
Работает, спасибо. Круто, но это, всё-таки, не совсем то же самое. Vim установлен практически на любом сервере + не требует ничего, кроме консоли. Можно хоть со смартфона использовать.
Быстрая работа с кодом это конечно интересно, но в этом отношении IDE кроют ненастроенный и неоплагиненный вим как бык овцу. И Sublime Text тоже кроют. И разницы между vim и Sublime Text по сравнению с IDE в этом отношении почитай, что и нету.

ssh тоже не сильно важно.

А вот насчёт интуитивности к Sublime Text большие вопросы. То есть Ctrl+v, Ctrl+c и Ctrl+x это в общем интуитивно, как и стрелки, как и сочетание Ctrl+стрелки.
А вот чтобы выделить слово, кажется надо нажать Ctrl+d. Это ни разу не интуитивно и это придётся запоминать, как и огромную кучу других хоткеев. Но так как Sublime это такой расширенный и улучшенный блокнот — работать можно и без них. Правда удобство работы с текстом — тоже как у блокнота, хоть и на стероидах.

Вим подходит к проблеме более радикально. Он вообще в руках неопытного пользователя умеет только пищать и всё портить. Но применение принципиально другой схемы работы с текстом позволяет обученному пользователю творить чудеса, на которые блокнот не способен в силу отсутствия модальности.
Полноценные IDE обычно некастомизируемы чуть менее, чем полностью. А ST отлично превращается в ту IDE, которая нужна именно каждому конкретному разработчику. Хотя, конечно, оно не на 100% универсально. Например, для разработки под iOS\Mac OS всё равно Xcode будет намного удобнее, а для какого-нибудь, простихоспади, APS.NET – Visual Studio+resharper нет равных.

Для выделения слова вам не нужно ctrl+d, используйте ровно ту же комбинацию, которая используется для выделения слова в вашей ОС. В Mac OS, например, это Option+Shift+Right (или Left, в зависимости от того, в начале слова или в конце стоит курсор).

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

Если не сложно, приведите пример какого-нибудь «чуда» из Vim.
В разрезе выяснения значимых отличий Vim от Sublime Text обсуждение кастомизируемости что того, что другого эффективно не более, чем удобство работы с кодом. Правда по другой причине — они одинаково сильно поддаются кастомизации. В разумных пределах конечно. Из Sublime Text сделать Vim проще, чем в Vim реализовать Sublime, но мы вроде не об этом.

А вот дальше интересно. Комбинацию, которая используется для выделения слова в ОС можно без проблем использовать в любом из исчадий блокнота — никаких проблем. И это действительно плюс ST, но он идёт в графу «Просто для использования неопытным пользователем». Потому что, как вы совершенно верно отметили, так слово можно выделить только если курсор стоит в начале или в конце слова. Что конечно ужасно неудобно. А если он в где-нибудь в середине, то неизбежно придётся читать про Ctrl+d.

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

Что для абсолютно любого действия в Виме надо помнить хоткей или команду — большое преувеличение. Что такое режимы придётся выяснить — это да. А дальше можно обходиться минимумом. Можно даже пользоваться стрелками. Только работать не используя всё богатство возможностей редактора неудобно независимо от названия этого редактора. Изучать придётся и ST и Vim.

Приводить примеры чудес всегда нелегко. Особенно в случае с вимом. Если для того, чтобы крутить сальто нужно год тренироваться — кому нужно это сальто и, что самое главное, какое же это чудо :). Но я попробую.

Чудо — это вообще весь Вим и его режимы.

Чудо — что не нужно тянуть руку к стрелкам каждый раз, когда хочешь чуть-чуть передвинуть курсор. И что для выделения кусков текста не надо зажимать одновременно несколько клавиш.

Чудо — что если ты подредактировал строку, а потом после беглого просмотра файла понял, что надо вписать в ту же строку ещё что-нибудь — достаточно набрать gi и курсор окажется в конце последнего редактированного куска.

Чудо — что для первого поиска сделующего вхождения слова под курсором нужно набрать *, а для того, чтобы найти где оно встречается в третий раз достаточно нажать n. А чтобы найти где оно встречается выше по тексту — N.

Чудеса не в том, что можно сделать в Виме, а в том как это делается.

Если не учить хоткеи, то у нас остаётся fuzzy-поиск с большинством необходимых комманд – с ним ничего учить не надо, достаточно ввести несколько символов комманды. Причём, не обязательно даже точно помнить, как она называется.

Без использования хоткеев и комманд Vim будет НАМНОГО медленее и неудобнее обычного «блокнота», хотя бы за счёт перемещения курсора стрелками по 1 символу.

Чудо — это вообще весь Вим и его режимы.
Не очень понимаю. Всегда думал, что режимы – это неизбежное (в Виме) зло. Где-то даже на Хабре статья про это была, что это просто анахронизм, оставшийся «с той поры».

Что значит «тянуть к стрелкам»? Они у меня всегда под рукой. Про выделение не очень понял. Но в любом случае, нивелируется чудом «множественные выделения» в том же ST.

Чудо — что если ты подредактировал строку
Чудо – в обычном блокноте вообще не надо ничего нажимать, курсор там и будет, где мы подредактировали…

Чудо — что для первого поиска
А второе вхождение? А десятое? Для каждого – свой хоткей, что ли, учить? в ST есть поиск всех вхождений выделения по одному хоткею. Или не просто поиск, а выбор всех этих вхождений и одновременное редактирование. Или поиск всего этого во всех файлах проекта, например. Жаль, пока что нет редактирования прямо на экране результатов поиска – вот это и вправду чудо было бы.

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

Предлагаю на этом остановиться, т.к. даже этот мой коммент уже выходит в зону холиварщины… Обидеть никого не хотел, если всё-таки задел чем-то – извиняюсь.
Не холивара ради — ради демонстрации чудес. Огромное чудо в виме — это макросы. Это очень мощное средство, с помощью которого можно творить настоящую магию едва касаясь клавиатуры. Можно записать любую последоветельность нажатий клавиш, которую вим воспроизведет.

Небольшой пример (и немного Objective C).
gif
Есть весьма неоднородный код:

@propetry (strong, nonatomic) NSString *string;
@propetry NSUInteger someInt;
@propetry (weak, nonatomic) id <SomeDelegate> delegate;


Из которого мы хотим получить следующее:

    self.string = string;
    self.someInt = someInt;
    self.delegate = delegate;


«Множественное выделение» нас не спасет в этом случае. Однако, на помощь приходят макросы. Всего-то нужно набрать $bd0>>iself.<Esc>lyeea = <Esc>pj0 и потом воспроизвети макрос два раза 2@q.

Выглядит страшно? Возможно, однако если расшифровать — то все настолько красиво, что непроизвольно радуешься. Смотрите, какой получается рассказ:

$     (переместимся в конец строки)
b     (а теперь на одно слово назад)
d     (удаляем) 0 (все до начала строки)
>>    (сдвигаем код вправо)
i     (начинаем набирать текст)
self.
l     (двигаемся на один символ вправо)
ye    (копируем слово)
e     (теперь переходим в его конец)
a     (начинаем набирать текст)
 =·
p     (вставляем скопированное слово)
j     (переходим на следующую строку) 0 (и перемещаемся в ее начало)


А второе вхождение? А десятое? Для каждого – свой хоткей, что ли, учить?


Итого, я не пользуюсь хоткеями. Я говорю с компьютером. Мне не нужно учить для каждого действия свой хоткей. Я могу просто сказать n — «найди вхождение». И точно так же могу сказать 10n — «найди десятое вхождение». Если мне нужно перейти на начало строки, я говорю 0 — «начало строки». Если мне нужно удалить все до начала строки, я говорю d «удали» 0 «все до начала строки». Либо d «удали» b «предыдущее слово».

А теперь угадайте, что будет, если я захочу найти/скопировать/заменить/перевести в верхний регистр/… слово/абзац/содержимое кавычек, скобок/…
Боюсь вас огорчить, но макросы доступны в любом современном редакторе. В ST, например, тоже. Не все хотят говорить с компьютером, чаще нужно решить необходимую задачу. То есть, цель – получить результат, а не насладиться процессом получения.
Спасибо, не знал. В таком случае у ST есть шанс. :)

Так разговоры с компьютером не в ущерб результату. Все происходит на автомате, я набираю предыдущий пример за секунд 7. Я даже ни на секунду не задумываюсь — хотя, если задуматься, то можно увидеть красоту. А обычно я просто получаю результат — переместиться на пол-файла и заменить все внутри кавычек "" — мгновение, и все готово. Результат как раз получается максимально быстро, минимальным количеством нажатий клавиш и шевелением пальцами (вот если бы нужно было тянуться к мышке — нет, увольте, это в разы большие затраты энергии и времени).
К слову, если вы подскажете, чем вы такой gif-скринкаст сделали, я покажу, как данную операцию в ST можно сделать.
Видео записывал при помощи Screenflick, инструкция по конвертации в gif тут.
Спасибо. Вот:
Скрытый текст
image
Выделяем все три переменных, копируем их, переходим в конец строки, удаляем лишнее, перескакиваем через слово влево, удаляем всё до начала строки, добавляем нужное, вставляем скопированные имена.


Никакой магии, никаких хоткеев, кроме общесистемных. (Объективности ради – в случае, если таких строк будет не 3, а 133, то удобнее будет не выделять каждое слово отдельно, а выделить весь текст и воспользоваться хоткеем «поставить курсор в каждой строке»)
Я пытался подобрать пример, чтобы не сработало множественное выделение, как видно не удачно. В случае, если необходимо будет выбрать строки на основе регулярного выражение, скопировать их из одного файла в другой, при этом изменив, и повторить это для многих файлов — то саблайм уже не подойдет.

Однако, это весьма надуманный и специфичный пример. Есть очень много различных мощных инструментов, которые мало чем уступают друг другу. Каждому свое, дело вкуса. Я сам, в свое время, выбирал между вимом и емаксом — в пользу первого было лишь перемещение по тексту с помощью hjkl, вместо Ctrl+буква у второго.
Предполагаю, что для любого инструмента можно придумать пример, который можно будет реализовать только и исключительно в нём. :) Пока что, за несколько лет работы с ST, я не столкнулся с какой-то задачей при редактировании кода, которую было бы неудобно решать…

Насчёт выбора строк по регулярке – для этого в ST можно использовать поиск по регулярке (можно сразу выделить все вхождения), далее всё так же, как и с одиночным выделением – просто скопировать и вставить в другой файл.
С множественными файлами примерно так же, просто копировать надо будет не прямо из окошка файла, а из результатов поиска (куда выведутся все вхождения по всем нужным файлам).
Коротко скажу, что fuzzy-поиск это интересно, правда относится это не к редактированию текста, а к облегчению порога вхождения. То есть фича не текстового редактора, а любой программы. Но всё равно прикольно. И одновременное редактирование найденных значений тоже хорошо, хоть по сути неотличимо от find and replace. В остальных мелочах вы просто плохо информированы по поводу Вима и хорошо по поводу Саблайма.

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

На моей клавиатуре от home row до стрелок — сантиметров 10. Переносить руку на эти 10 сантиметров при малейшей необходимости подвинуть курсор, а потом, когда надо что-то напечатать — переносить руку обратно — верный путь к нервному расстройству. Конечно, если печатать вслепую не умеешь и вообще набираешь текст медленно и двумя пальцами, а правая рука и так ходит между клавиатурой и мышью — действительно создаётся иллюзия, что стрелки под рукой, но платой за эту иилюзию является низкая эффективность работы с редактором.

И режимы в Виме выполняют функцию ограждения пользователя от ужасов постоянного перемещения правой руки между мышью, стрелками и буквами. Без них Вим не нужен, в них его смысл и высокая миссия :). Именно с их помощью Вим помогает работать и несёт добро в мир!

А вот по поводу того, что вам не нужен инструмент, который будет помогать работать — это я покривил душой. Просто это не единственное ваше требование к инструменту. Вам, судя по вашим словам, также важно, чтобы кривая обучения была как можно более пологой, а лучше вообще отсутствовала. То есть есть какое-то соотношение степени в которой инструмент помогает жить и того, насколько трудно им овладеть.

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

P. S. Вы никого не обидели, не переживайте. Холивары — в свободное от работы время — крайне полезная и интересная штука ибо при участии в них велик шанс узнать что-то радикально новое.
> Всегда думал, что режимы – это неизбежное (в Виме) зло.

Нет, это киллер-фича. Выход из insert mode в command mode в vim позволяет использовать всю клавиатуру и все возможные буквенные keychord-ы для операций над текстом. В обычных редакторах, если судить с позиции vim, огромная часть keychord-ов жёстко забита на вставку текста, оставляя для хоткеев лишь Ctrl, Alt, Shift комбинации (плюс часть небуквенных клавиш и мышь).

> Что значит «тянуть к стрелкам»? Они у меня всегда под рукой.
При слепой печати — нет.

> А второе вхождение? А десятое? Для каждого – свой хоткей, что ли, учить?

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

Плюс что, поиск n-ного вхождения — это такая частая операция, что мы её вдруг используем для проверки редактора на крутость? Я разработчик и не помню ни разу, чтобы такое мне понадобилось на практике хоть раз в жизни. Вот vim-овский инкрементальный поиск /, n, n, N, n, — сплошь и рядом. Такими вопросами можно доказать, что любой редактор плох, достаточно задавать всё более экзотические вопросы «а может ли так ваш редактор».

> в ST есть поиск всех вхождений выделения по одному хоткею. Или не просто поиск, а выбор всех этих вхождений и одновременное редактирование.

Ну во-первых давайте тогда ваш вопрос про N-ный результат поиска и к ST применим, чтобы честно было. На том уровне, на котором я знаю ST, ответ для ST — «возможно только через скриптование». Для vim, как видите, ответ «возможно из коробки». Мультикурсорность — да, это одна из самых крутых фич ST, не имеющих известных мне аналогов в vim/emacs.
Квазирежимы круче на порядок, зажал модификатор, и ты в квазирежиме, отпустил его, и снова в основном режиме.

Правда модификаторы надо делать на больших пальцах, тогда все остальные будут свободны для работы с этим модификатором, и будет достаточно по одному (вместо двух шифтов — один на большом пальце, вместо двух Ctrl — один на большом пальце), ну и модификатор для второго слоя.

Пример, если сделать Shift на большом пальце, то им можно заменить аж три кнопки, левый и правый шифт, и Caps Lock, последний становится не нужен, зажал Shift, и печатай себе.

VIM конечно это не только режимы (по сути разные слои плюс терминал под рукой), но и навороченные возможности по редактированию текста, но вот почему-то добавление слоя со стрелками на основную позицию рук оказалось достаточным, чтобы везде работать с большим удобством, даже без кучи специальных команд, просто используя комбинации с Shift, Ctrl, Del, Backspace, стрелок, и т.п.
В теории было бы хорошо такое иметь даже в vim, но реальное положение дел следующее:

— На стандартной клавиатуре до шифта большим пальцем не дотянуться. И вообще, зажатие клавиши-модификатора обездвиживает руку, особенно это видно на составных командах vim («2dW» или «d(» не набрать с какой бы то ни было зажатой modkey без страданий).

— Нет редакторов (известных мне), которые бы позволяли при зажатой modkey функциональность как в vim command mode. Одиночные команды ещё ладно, а вот аналогов для составных команд нет.
Стандартная клавиатура плохо подходит для нормальной работы, или надо тюнинговать раскладку. Если модификатор на большом пальце, то рука не обездвижена, в этом и идея.
По поводу теории, я так уже почти три года работаю на CatBoard, поэтому утверждаю с позиции практики. В теории сейчас моя новая разработка — кнопка Quasi в новой клавиатуре Ладошки, клава ещё не готова, поэтому идея пока не опробована, там получается на одно нажатие больше, зато не надо раскорячивать руки, можно что угодно набирать, даже одной рукой, и мышью управлять с клавиатуры (не для рисования, а для управления в оконной среде, нажимать ссылки, кнопки, меню), чтобы руки не снимать с клавы вообще.
Как будто все работают на чужих машинах, даже у сисадминов есть своя машина. На чужой нужно бывает лишь адрес в браузере набрать, ну или пароль там, но не будешь же сидеть и код или документ писать.

Хотя и это не проблема, я вот таскаю свою клаву куда надо, даже в Андроид работает (надо только сделать нормальный переключатель раскладки — Ctrl+Shift Down Enter), есть режим MacOS (вместо Ctrl кнопка Cmd/Win, и переключатель раскладки другой). Причём работаю в своей раскладке JCUKEN, а компы все настроены на стандартную QWERTY. Просто подключил клаву даже к чужому компу, и как дома.
Если есть перепрограммируемая клава с кучей кнопок на больших пальцах, то можно обойтись без VIM, и нормально работать в любых программах. Для этого достаточно вынести стрелки в основную область Fn+IJKL (например), вынести модификаторы на большие пальцы (в этом случае достаточно одного шифта и контрола). И лучше чтобы были квазирежимы, а не режимы, так гораздо удобней работать, отпустил Fn, и снова в основном режиме, нажал её, и нужные кнопки сами прыгнули под пальцы.
Давайте будем честными до конца:
— это не чудо, это ваше предпочтение.

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

Да, я пользовался vim, я даже знаю про различные режимы (и вполне могу подредактировать файл конфигов/...), но мне это не удобно. Точнее удобно, но именно для какой-то быстрой, небольшой операции. А вот кодить я там и с подсветкой синтаксиса и прочими плюшками не смогу. Для этого нужна IDE, а не текстовый редактор.
Эта книга о скриптовом движке Vim, для разработчиков плагинов. Отличная книга по самому редактору — Practical Vim.
Мне Vim сам по себе тоже не люб, но нравится его подход. Поэтому я использую Sublime Text и PyCharm с эмуляцией Vim. И чем больше я этим пользуюсь тем меньше тянусь к мышке. Всё работает на уровне рефлексов. Но конечно для каких-нибудь множественных выделений пользуюсь мышью.
есть два режима – Insert Mode и Command Mode.

А Visual Mode куда делся?

Для Vim тоже есть EasyMotion плагин
Я посчитал его подвидом Command Mode. Оставил это для самостоятельного изучения.
Их немного больше.

Normal mode
Visual mode
Select mode
Insert mode
Command-line mode
Cmdline mode
Ex mode
Operator-pending mode
Replace mode
Virtual Replace mode
Insert Normal mode
Insert Visual mode
Insert Select mode
Насчёт «стрелок курсора» на «основной позиции печати» здесь:
Печатать в слепую научили меня иностранные-игровые сервера WOW, когда все шли в инст ночью по моему времени. Хотел, не хотел научился печатать в слепую (Да еще и быстро!) в кромешной темноте, и тихо, что бы по шее от родителей не получить :)
Only those users with full accounts are able to leave comments. Log in, please.