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

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

Не ошибка ли?
поиск вперёд клавишей /, а назад — ?

Это одна и та же клавиша.
и как вы тогда набираете их в тексте?

Это верно далеко не для всех раскладок клавиатуры (в том числе и для языков на базе латиницы — см., например, множество национальных вариантов QWERTY, а ведь есть ещё вариации QWERTZ и AZERTY).

В русской раскладке нет.
Это не равнозначные команды.
Мне кажется, что тут описаны какие-то совсем тривиальные действия, доступные в любом приличном ide, но только делаются они совершенно контринтуитивно. В принципе, «привычные» сочетания клавиш — тоже всего лишь привычные. Но в чем тут соль? Чего из описанного я не могу сделать в jetbrains? Где преимущество vim?
Ну не много где такое же управление как в vim. И да, многие продукты копируют стиль vim.

Его плюс в том, что он, например, есть на каждой Linux машине, и работает в терминале (привет, ssh).
Мне, как инженеру-админу очень удобно например. И код подправить, и конфиг написать.

И грузится он моментально в отличие от ide.
Ну, как я понимаю, главным преимуществом вима заявляется скорость. Так-то nano тоже везде есть. И конфигурации править в нем тоже можно. Но никто же через ssh не редактирует код так, чтобы там надо было десятипальцевой печатью пользоваться?

Скорость имеет значение, но она точно не главное преимущество. Скорость важна ровно настолько, чтобы не испытывать раздражение от тормозов: быстро работает подсветка синтаксиса, быстро открываются большие файлы, быстро можно попасть в нужное место файла… но всё это отдельные и не очень критичные кусочки общей картины.


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


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

НЛО прилетело и опубликовало эту надпись здесь

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

В смысле, никто не редактирует?
Но никто же через ssh не редактирует код так, чтобы там надо было десятипальцевой печатью пользоваться?

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

При использовании совместно с mosh, а не ssh — даже и на не очень хорошем канале связи комфортно работать.

Так-то nano тоже везде есть.

Он не совсем полноценно эмулирует те «горячие клавиши», к которым мы привыкли в Windows, к примеру. У терминалов есть ограничения на сочетания клавиш. Поэтому все равно придется учить. Ну а почему бы не выучить сразу нечто более заточенное на терминал?

vim только кажется сложным.
40-минутного vimtutor вполне достаточно чтобы начать работать.

И грузится он моментально в отличие от ide.

Это голый vim, без кучи плагинов, что приближают его к IDE — только такой голый vim и грузится мгновенно.

Но целом да, даже и с плагинами — все равно существенно быстрее IDE.

Существенно быстрее — это явное преуменьшение. У меня куча (36 в данный момент) плагинов в ~/.vim/bundle/ плюс тьма других настроек (750 строк только в vimrc, а плюс к нему ещё кучка файлов с настройками есть), и при этом vim запускается (восстанавливая при этом предыдущую сессию и открывая кучу файлов в разных вкладках, которые были в нём открыты в прошлый раз) быстрее, чем на клавиатуре отжимается Enter после набора vi<Enter>.

Дело в том, что это статься не про преимущества вима, статья всего лишь показывает новичкам, чего им стоит остерегаться и к чему приучаться, чтобы стать умельцами этого редактора. Чтобы люди прекратили приходить в вим и использовать его как блокнот, только с hjkl вместо стрелок. А если Вы хотите найти причины, зачем вам стоит на вим перейти, для этого существуют многие другие статьи, хотя лично меня убедили видео, как другие люди со скоростью света редактируют tex, это было невероятно круто. (-:
Ссылочку на видео не дадите?
Большую часть времени я всё же думаю над тем, что написать в коде или в тексте, а не собственно пишу. В этом смысле, не особо понятно, зачем мне редактировать текст быстрее, чем сейчас. По крайней мере, освоение 10-пальцевого метода печати покрыло бы нужду с значительным избытком, но не привязывало бы меня к одному конкретному редактору. К чему все эти «скорости»? Потоковый перегон речи в текст? А для этого точно нужен вим?

Суть не в скорости набора текста, а в скорости преобразования мыслей в результат. Мысль "надо переставить этот абзац выше, перед предыдущим" может быть реализована нажатием нескольких кнопок. Равно как и мысль "надо скопировать содержимое этого блока for в вот тот if". Равно как и мысль "надо отсортировать поля в объявлении этой структуры". Равно как и мысль "надо добавить json-теги полям этой структуры". Когда такие преобразования выполняются моментально, то не происходит прерывания процесса обдумывания реальной задачи ради обдумывания последовательности действий, которые надо выполнить в текстовом редакторе, чтобы получить результат, и ожидания пока все эти действия будут выполнены.

Быстро сделал пару мелких правок, а потом всё равно сидишь и думаешь. Куда так торопиться-то?

Не "торопиться", а "не отвлекаться".

Быстро сделал пару мелких правок, а потом всё равно сидишь и думаешь. Куда так торопиться-то?


Не совсем так.

Да, программист мало пишет и много думает. Но при этом он регулярно по коду перемещается. Еще и пробы проводит, которые потом удаляет.

Сидит совсем уж неподвижно мало времени.

Есть специальные программы для замера «пробега мыши в день» и количества нажатий на клавиши.

Поставьте, замерьте и сравните с тем объемом правок, что отправляете в git (там как раз будет видная разница изменений в количестве символов). Разница, вангую, будет и в сотни раз.

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

habr.com/ru/post/307084
Смысл в том, что с vi ваша клавиатура превращается в специализированный геймпад для редактирования текста с практически сотней кнопок, каждая из которых имеет как минимум две функции — с шифтом и без шифта; таким образом, у вас уже под две сотни функций доступных по нажатию одной кнопки (не считая шифта) (прим. пер.: что-то много автор насчитал, можно смело на два делить). Мощные сами по себе команды можно комбинировать друг с другом для получения наилучшего результата. Во время ввода это стандартная клавиатура, но при возврате в командный режим это идеальная машина для редактирования текста
Я регулярно пишу как код, так и тексты. Довольно много. И даже десятипальцевый метод ввода для меня избыточен, так как большую часть времени всё же думаю. Мне не понятна область применения программы. Хорошо, конечно, что и такое есть, но выглядит это чем-то из прошлого века без видимых преимуществ.
Даже если не нужна высокая скорость, десятипальцевый метод гораздо лучше, так как не нужно напрягать глаза и кивать головой. Процесс обучения нудный и раздражающий, но если осилите, обычный способ набора будет восприниматься как пытка.

Мне же захотелось пойти дальше, и я начал изучать Vim. Не могу сказать, что владею им в совершенстве, но уже сейчас при работе в других редакторах чувствую себя связанным по рукам и ногам. Редактором дело не ограничилось, и я перевел на аналогичное управление браузер, IDE и для программу для просмотра PDF и djvu.

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

В JetBrains, как и во многих других популярных программах можно включить эмуляцию Vim.


Использую.
Но, к сожалению, там не полноценная поддержка:

1) Копирование-вставка из внешних источников не проходят командами vim. Только обычными командами копирования (при включенном vim-эмуляторе эти команды только мышью через контекстное меню и возможны).

2) vim-команды только к области окна редактирования относятся.

«Преимущество Vim» в статье не перечислены ) На мой вкус они следующие:
— это редактор который работает в текстовой консоли через ssh)
— Им действительно можно пользоваться когда у вас плохая связь с удаленным узлом где вы пытаетесь поправить конфигурационный файлик или посмотреть логи) все вот эти странные команды: типа перейти на 5 слов вперёд или на четыре строки вниз — помогают )
— VIMом можно открыть на редактирование текстовый файлик размером 1Gb )
… откровенно говоря не знаю чем ещё можно.
Конечно команды VIM это суровое легаси, но просто дизайн и идеология в нем от VI который в свою очередь задумывался во времена зелёных терминалов и тогда видеть на экране текст который ты редактируешь это было высшим достижением человеческой мысли)
Тогда VI конкурировал по юзаблити с перфокартами)

Насчёт "суровое легаси" я не уверен. Я вчера спросил жену, зачем она много лет назад поставила под виндой Vim… я ожидал услышать про какие-то киллер-фичи Vim по сравнению с виндовыми редакторами, но ответ был неожиданным: "мне надоело постоянно набирать :wq при попытке выйти из Блокнота". :) Суть в том, что это "суровое легаси", как ни странно, достаточно мнемонично и въедается в мышечную память, и в результате это не столько легаси, сколько вполне актуальный и эффективный в наши дни способ управления редактором.

Плюс один. А для всех, кто говорит «да зачем мне учить десятипальцевый метод, думаю я все равно медленнее, чем печатаю», и «да зачем мне учить Vim, у меня все что мне надо есть в Idea» я бы сказал — вы просто попробуйте. Если осилите, вам скорее всего понравится.
Чего из описанного я не могу сделать в jetbrains?

Мышью не пользоваться от слова «вообще» — то есть вообще не пользоваться. Возможно, можно все и в IDE Jetbrains настроить на безмышинный способ, только вот в реальности никто этого не делает.

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

Работать удаленно вполне себе полноценно.
Вместо этого удалите текст, переместившись в него и используя d с соответствующим движением

Кстати ИМХО использовать операции с движениями не всегда лучше, чем лупить по одной и той же клавише. У повторного нажатия клавиши огромное преимущество — 0 ментального усилия, не нужно думать, какой текстовый объект скормить команде. С этой точки зрения jjjjj, как ни странно, лучше чем 5j. Парадокс — при маленьких перемещениях вверх-вниз удобнее повторно жать j, чем использовать префикс, а при больших перемещениях не знаешь префикс — тоже приходится искать более удобную альтернативу, например поиск.

Примерно то же с удалением — при правке небольшого неструктурированного куска порой приятнее x/X, чем d с аргументом.

вот тоже иногда думаю, что 5j надо ещё подумать, на сколько j сместиться… но так и не пришёл к какому-то однозначному выводу: то так попробую, то эдак… как в том анекдоте про мешающую спать бороду не могу выбрать что лучше.

set rnu
И больше не надо думать, vim покажет номер строки.

все равно надо отнимать в уме
Зачем? Номер же относительный, от положения курсора.

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

Мне кажется, это значит, что вы ещё не привыкли к виму. (-: Однажды я открыл его и понял, что текстовые объекты и движения стали моим способом мыслить о строчках и буквах передо мною: когда я вижу интересующий меня объект, я вижу его как слово, СЛОВО, строку или text-object, а например думать про движения в рамках 5j помогает опция 'relativenumber'.

В случае с Vim есть ещё вариант «войти в визуальный режим (v / V / ^V), выделить нужный текст, выполнить операцию» — с одной стороны, это позволяет перед выполнением операции убедиться в том, что выделено именно то, что нужно, с другой стороны, в случае, если для выделения достаточно одной команды движения, это значит, что нажатие v было лишним. Хотя привычка использовать v и V мешает, если приходится редактировать что-то в среде, где полноценный Vim недоступен, а есть только базовый vi.

Я vim использую уже лет 20 примерно, но никогда не понимал ни тяги к hjkl, ни смысла отказываться от навигации стрелками в режиме вставки. Более того, я ещё и на Ctrl/Alt/Shift-стрелки навесил разные полезняшки.


И не надо рассказывать, как это замедляет работу — нажать Up из режима вставки точно не медленнее, даже с учётом перемещения кисти на стрелки и обратно, чем Esc, k, i. Более того, обычно смысл выходить из режима вставки для навигации объясняется тем, что просмотр текста и внесение изменений — это разные задачи. Это правда, и именно поэтому перенос руки на стрелки и обратно при переключении между этими задачами работает ничуть не хуже (а как по мне — даже лучше), чем Esc и i. Плюс когда рука на стрелках то легко доступны дополнительные кнопки навигации PgUp, Home, etc. плюс комбинации с Ctrl/Alt/Shift — и хотя по возможностям это далеко от того, что может вытворять vim в командном режиме, но в 99% случаев этого более чем достаточно.


Плюс к этому есть и другие причины, по которым перемещение руки на стрелки не является проблемой: при работе в браузере (например, написании этого комментария) и других приложениях (мессенджерах, etc.) всё-равно приходится пользоваться стрелками (поэтому проще использовать один подход везде), при программировании большую часть времени мы читаем код и думаем, а не быстро редактируем текст, так что постоянно держать обе руки в середине клавиатуры большую часть времени бессмысленно и неудобно.

ZZ по мне быстрее
Вместо неё удобнее использовать :x, кмк.
Может кто-нибудь знает какой-нибудь plugin или имеет готовый remap чтобы при смене раскладки команды работали. Например чтобы клавиши ролд работали как hjkl.
попробуйте
set langmap =йцукенгшщзхъ;qwertyuiop[]
set langmap+=ЙЦУКЕНГШЩЗХЪ;QWERTYUIOP{}
(таких пар строк может быть несколько)

И вообще покурите langmap.
(но у меня замечание есть: не удаётся сделать langmap для 'б' и 'Ю')

Я для этого написал ruscmd, он более продвинутый по сравнению с вышеупомянутым вариантом на langmap.

set keymap=russian-jcukenwin в .vimrc

Возможно, Вам как и мне, будет удобно мапнуть все и сразу:
set langmap=ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ;`qwertyuiop[]asdfghjkl\\;'zxcvbnm\\,.~QWERTYUIOP{}ASDFGHJKL:\\"ZXCVBNM<>


Уже упомянутый до меня вариант
set keymap=russian-jcukenwin
позволяет не переключаться в русскую раскладку в системе, а только в vim по <C-^>.

В VSCode классная эмуляция Vim. С ним проблема выбора: IDE или нормальный редактор — наконец-то отпала.

Если вам чтото надо повторить много раз, логичнее использовать регекспы.

Вообще непонятно почему выход-вход в режим редактирования быстрее передвижения руки на стрелку.
Комуто удобнее так, кому то этак.
По своему опыту работы с vim (точнее эмуляцией vim на VisualStudio), постоянно сталкиваюсь с одной очень неудобной ситуацией: когда нужно скопировать один кусок текста и вставить с заменой в нескольких местах. После первой вставки с заменой, в буфер помещается заменяемый текст, поэтому приходится повторно копировать кусок. Выглядит это примерно следующим образом: yaw (скопировал) vaw(выделил другое слово) p(вставил) yaw(копирую заново в буфер) и т.д. Я знаю, что есть специальная команда вроде «0p, которая выполняет вставку из определенного буфера, однако само сочетание „0p набирать не очень удобно.
Интересно, с какими неудобствами сталкивались Вы и как их преодолели?

P.S: Почему автор в статье не обратил внимание на одну из важнейших команд — .(точка), которая повторяет предыдущее действие.
Макрос? Запишите действия по замене слова, затем повторите через @@. При необходимости перезабейте @@ на более удобную.

Можно загнать текст в нестандартный буфер ("ayy например) и вставлять от туда. Так заменяемый текст не будет затирать вставляемый.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории