Комментарии 55
поиск вперёд клавишей /, а назад — ?
Это одна и та же клавиша.
Это верно далеко не для всех раскладок клавиатуры (в том числе и для языков на базе латиницы — см., например, множество национальных вариантов QWERTY, а ведь есть ещё вариации QWERTZ и AZERTY).
Его плюс в том, что он, например, есть на каждой Linux машине, и работает в терминале (привет, ssh).
Мне, как инженеру-админу очень удобно например. И код подправить, и конфиг написать.
И грузится он моментально в отличие от ide.
Скорость имеет значение, но она точно не главное преимущество. Скорость важна ровно настолько, чтобы не испытывать раздражение от тормозов: быстро работает подсветка синтаксиса, быстро открываются большие файлы, быстро можно попасть в нужное место файла… но всё это отдельные и не очень критичные кусочки общей картины.
А общая картина в том, что 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>
.
Суть не в скорости набора текста, а в скорости преобразования мыслей в результат. Мысль "надо переставить этот абзац выше, перед предыдущим" может быть реализована нажатием нескольких кнопок. Равно как и мысль "надо скопировать содержимое этого блока for в вот тот if". Равно как и мысль "надо отсортировать поля в объявлении этой структуры". Равно как и мысль "надо добавить json-теги полям этой структуры". Когда такие преобразования выполняются моментально, то не происходит прерывания процесса обдумывания реальной задачи ради обдумывания последовательности действий, которые надо выполнить в текстовом редакторе, чтобы получить результат, и ожидания пока все эти действия будут выполнены.
Не "торопиться", а "не отвлекаться".
Быстро сделал пару мелких правок, а потом всё равно сидишь и думаешь. Куда так торопиться-то?
Не совсем так.
Да, программист мало пишет и много думает. Но при этом он регулярно по коду перемещается. Еще и пробы проводит, которые потом удаляет.
Сидит совсем уж неподвижно мало времени.
Есть специальные программы для замера «пробега мыши в день» и количества нажатий на клавиши.
Поставьте, замерьте и сравните с тем объемом правок, что отправляете в git (там как раз будет видная разница изменений в количестве символов). Разница, вангую, будет и в сотни раз.
habr.com/ru/post/307084
Смысл в том, что с vi ваша клавиатура превращается в специализированный геймпад для редактирования текста с практически сотней кнопок, каждая из которых имеет как минимум две функции — с шифтом и без шифта; таким образом, у вас уже под две сотни функций доступных по нажатию одной кнопки (не считая шифта) (прим. пер.: что-то много автор насчитал, можно смело на два делить). Мощные сами по себе команды можно комбинировать друг с другом для получения наилучшего результата. Во время ввода это стандартная клавиатура, но при возврате в командный режим это идеальная машина для редактирования текста
Мне же захотелось пойти дальше, и я начал изучать Vim. Не могу сказать, что владею им в совершенстве, но уже сейчас при работе в других редакторах чувствую себя связанным по рукам и ногам. Редактором дело не ограничилось, и я перевел на аналогичное управление браузер, IDE и для программу для просмотра PDF и djvu.
Суть не в том, что десятью пальцами текст набирается быстрее. Суть в том, что при этом учишься слепому набору. А слепой набор позволяет преобразовывать мысли в текст не отвлекаясь на рассматривание клавиатуры и постоянное переключение внимания между клавиатурой, экраном и мыслями.
В JetBrains, как и во многих других популярных программах можно включить эмуляцию Vim.
Использую.
Но, к сожалению, там не полноценная поддержка:
1) Копирование-вставка из внешних источников не проходят командами vim. Только обычными командами копирования (при включенном vim-эмуляторе эти команды только мышью через контекстное меню и возможны).
2) vim-команды только к области окна редактирования относятся.
— это редактор который работает в текстовой консоли через ssh)
— Им действительно можно пользоваться когда у вас плохая связь с удаленным узлом где вы пытаетесь поправить конфигурационный файлик или посмотреть логи) все вот эти странные команды: типа перейти на 5 слов вперёд или на четыре строки вниз — помогают )
— VIMом можно открыть на редактирование текстовый файлик размером 1Gb )
… откровенно говоря не знаю чем ещё можно.
Конечно команды VIM это суровое легаси, но просто дизайн и идеология в нем от VI который в свою очередь задумывался во времена зелёных терминалов и тогда видеть на экране текст который ты редактируешь это было высшим достижением человеческой мысли)
Тогда VI конкурировал по юзаблити с перфокартами)
Насчёт "суровое легаси" я не уверен. Я вчера спросил жену, зачем она много лет назад поставила под виндой Vim… я ожидал услышать про какие-то киллер-фичи Vim по сравнению с виндовыми редакторами, но ответ был неожиданным: "мне надоело постоянно набирать :wq при попытке выйти из Блокнота". :) Суть в том, что это "суровое легаси", как ни странно, достаточно мнемонично и въедается в мышечную память, и в результате это не столько легаси, сколько вполне актуальный и эффективный в наши дни способ управления редактором.
Чего из описанного я не могу сделать в jetbrains?
Мышью не пользоваться от слова «вообще» — то есть вообще не пользоваться. Возможно, можно все и в IDE Jetbrains настроить на безмышинный способ, только вот в реальности никто этого не делает.
Использовать куда как более слабое железо для полноценной работы.
Работать удаленно вполне себе полноценно.
Вместо этого удалите текст, переместившись в него и используя d с соответствующим движением
Кстати ИМХО использовать операции с движениями не всегда лучше, чем лупить по одной и той же клавише. У повторного нажатия клавиши огромное преимущество — 0 ментального усилия, не нужно думать, какой текстовый объект скормить команде. С этой точки зрения jjjjj, как ни странно, лучше чем 5j. Парадокс — при маленьких перемещениях вверх-вниз удобнее повторно жать j, чем использовать префикс, а при больших перемещениях не знаешь префикс — тоже приходится искать более удобную альтернативу, например поиск.
Примерно то же с удалением — при правке небольшого неструктурированного куска порой приятнее x/X, чем d с аргументом.
вот тоже иногда думаю, что 5j надо ещё подумать, на сколько j сместиться… но так и не пришёл к какому-то однозначному выводу: то так попробую, то эдак… как в том анекдоте про мешающую спать бороду не могу выбрать что лучше.
Согласен, но есть нюанс: при работе на удалённом сервере и в условиях диких тормозов (либо из-за сети, либо из-за гигантского loadavg на сервере) промахи из-за лишнего нажатия обходятся слишком дорого (по времени), но зато очень легко посчитать на сколько строк/символов надо сместиться/удалить/заменить и использовать префикс для точной и быстрой навигации.
В случае с 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.) всё-равно приходится пользоваться стрелками (поэтому проще использовать один подход везде), при программировании большую часть времени мы читаем код и думаем, а не быстро редактируем текст, так что постоянно держать обе руки в середине клавиатуры большую часть времени бессмысленно и неудобно.
ролд
работали как hjkl
.set langmap =йцукенгшщзхъ;qwertyuiop[]
set langmap+=ЙЦУКЕНГШЩЗХЪ;QWERTYUIOP{}
(таких пар строк может быть несколько)И вообще покурите langmap.
(но у меня замечание есть: не удаётся сделать langmap для 'б' и 'Ю')
set keymap=russian-jcukenwin в .vimrc
set langmap=ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ;`qwertyuiop[]asdfghjkl\\;'zxcvbnm\\,.~QWERTYUIOP{}ASDFGHJKL:\\"ZXCVBNM<>
Уже упомянутый до меня вариант
set keymap=russian-jcukenwin
позволяет не переключаться в русскую раскладку в системе, а только в vim по
<C-^>
.В VSCode классная эмуляция Vim. С ним проблема выбора: IDE или нормальный редактор — наконец-то отпала.
Вообще непонятно почему выход-вход в режим редактирования быстрее передвижения руки на стрелку.
Комуто удобнее так, кому то этак.
Интересно, с какими неудобствами сталкивались Вы и как их преодолели?
P.S: Почему автор в статье не обратил внимание на одну из важнейших команд — .(точка), которая повторяет предыдущее действие.
Антипаттерны Vim