Для чего нужен vim
Что такое Vim, для чего он нужен и с чего начать его изучение
Что такое Vim
Vim — это редактор командной строки. Не очень сложный и достаточно функциональный.
Он позволяет прямо из командной строки открывать и редактировать текстовые файлы. Он поддерживает много команд, которые позволяют значительно ускорить работу с текстовой информацией в окружении командной строки: копирование, вставка, удаление, поиск, замену; он поддерживает подсветку синтаксиса и много очень полезных вещей.
Альтернативами Vim являются Emacs (считается довольно трудным в освоении, но и очень мощным) и nano (попроще).
Для чего нужно изучить Vim и для кого нужен Vim
Пользователей Linux можно разделить на две категории: те, кто уже умеет пользоваться командной строкой — они уже понимают насколько гибкие и мощные вещи можно делать в Linux, как можно наладить взаимосвязь двух и более программ командной строки, как автоматизировать как простые, так и довольно интеллектуальные задачи; и те, кто считает командную строку анахронизмов, атавизмом или вообще не знает, что это такое.
Тем, кто относится к первой категории, желательно освоить Vim (благо это не очень трудно) — это повысит ваши возможности по управлению Linux’ом до следующего уровня.
Вам обязательно нужно знать один из редакторов командной строки (например, Vim) если вы:
Материалы по Vim
Если вы совсем новичок, и, может быть, впервые услышали про Vim или никогда им не пользовались, то начните с того, что наберите в командной строке:
Откроется учебник по Vim на русском языке. Авторы утверждают, что его можно освоить за 25-30 минут. Учебник очень прост, изложение доходчивое и оптимизировано для лучшего запоминания. Прямо в учебнике вы можете тренироваться: в нём даны несложные задания, т. е., в некотором смысле, это интерактивный учебник, хоть всё действо и происходит в командной строке.
После знакомства с учебником, благодаря грамотному, с педагогической точки зрения, изложению материала, в голове остаётся достаточно много. Если вы что-то подзабыли, то пользуйтесь шпаргалкой: «Памятка по Vim (Vi) — основы».
В принципе, эти два источника материалов — учебник и памятка — вполне достаточны для весьма виртуозного владения Vim’ом.
Для продолжения знакомства можно прочитать справку (она на русском языке и весьма познавательна):
Настройка vim для написания скриптов
Редактор vim имеет множество различных конфигурационных настроек. Некоторые из них могут пригодиться при написании скриптов:
Включает подсветку синтаксиса. При этой настройке различные элементы синтаксиса шелла будут отображены в различных цветах, когда вы просматриваете скрипт. Это полезно для идентификации определённых видов ошибок программирования. А также это клёво выглядит. Обратите внимание, что для того, чтобы это работало, у вас должна быть установлена полная версия vim; а также файл, который вы редактируете, должен иметь шибанг (shebang) (это магическая строка, которой начинается файл, вроде такой # /bin/bash). Если у вас трудности с приведённой командой, то попробуйте :set syntax=shinstead.
Включает опцию подсветки результатов поиска. Допустим вы ищем слово “echo.” С этой включённой опцией, каждое вхождение слова будет подсвечено.
устанавливает количество столбцов занятых в символе табуляции. По умолчанию — это 8 столбцов. Установка величины 4 (обычно делают так) позволяет длинным строкам легче влезать в экран.
Включает функцию автоотступа. Это заставляет vim делать отступы на новой строке на ту же величину, как только что напечатанная строка. Это ускоряет набор во многих типах программ, использующих управляющие конструкции. Для остановки отступа нажмите Ctrl-d.
Все эти изменения можно сделать постоянными, если добавить эти команды (без ведущего двоеточия) в ваш
За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.
На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.
Редактор, из которого не выйти. Как перестать бояться Vim и начать его использовать
Содержание статьи
Самый странный редактор
На первый взгляд Vim выглядит очень и очень странно. Знакомство с ним сопровождается страшными мучениями, когда ты просто не можешь понять, что происходит. Редактор либо вообще не реагирует на нажатия клавиш, либо ведет себя крайне неадекватно. Ты пишешь слово door, а вместо этого Vim переходит на новую строку и вставляет or. Ты стираешь эту галиматью и снова пробуешь что-то написать — и, о чудо, на экране действительно появляется текст.
А потом его опять начинает глючить.
Спустя несколько попыток разобраться, как это работает, и бесчисленное множество матерных слов ты идешь в интернет и узнаешь, что Vim — двухрежимный редактор. Писать текст здесь можно только в режиме ввода (INSERT), для перехода в который следует нажать кнопку i или Insert.
Основной же режим, для выхода в который используется Esc, здесь предназначен для ввода, как тебе на первый взгляд кажется, хоткеев. Причем состоять они могут всего из одной клавиши: w — передвигает курсор к следующему слову, 0 — в начало строки, $ — в конец строки, A переводит курсор в конец строки и переключает редактор в режим ввода, u — аналог Ctrl-Z в нормальных редакторах.
Погуглив еще немного, ты обнаруживаешь, что есть также «хоткеи» из двух и более последовательных нажатий. Такие, как, например, dd, который удаляет всю строку, и dw, удаляющий слово, gg и GG, которые перемещают курсор в начало и конец документа.
Немного привыкнув, ты уже можешь кое-как прыгать между режимами и вводить эти странные хоткеи — они даже начинают казаться тебе удобными, но один вопрос все-таки тебя не покидает:
— Зачем здесь эти режимы?!
«Хоткеи» Vim действительно удобны благодаря своей лаконичности, но разве необходимость переключаться между режимами не убивает все их удобство? Разве не проще нажимать пусть и требующие больше движений горячие клавиши в нормальных редакторах, чем мотаться взад-вперед между режимами? Да, может быть, сорок лет назад, когда на клавиатурах не было Ctrl и Alt, это и было оправданно, но сейчас-то зачем?
Так и заканчивает знакомство с Vim среднестатистический пользователь. Некоторое время он, конечно, еще потратит на то, чтобы найти выход, но затем забудет, как страшный сон, и вернется к своему любимому Sublime. А уж в условиях сурового сервера и nano сойдет.
Почему так происходит? По одной простой причине: для работы с Vim нужна совсем другая система мышления, переключиться на которую мало кому удается сразу.
23 мая 2017 года вопрос «Как выйти из Vim?» набрал один миллион просмотров на Stack Overflow
Философия Vim
Чтобы понять, почему Vim именно такой, какой есть, и чтобы научиться использовать его эффективно, необходимо запомнить две простые истины.
Истина первая. Разделение режимов Vim имеет абсолютно логичный утилитарный характер. В одном режиме ты пишешь текст, во втором редактируешь. В современных редакторах эти границы размыты, мы привыкли писать и тут же редактировать, стирать, снова писать. В режиме ввода Vim позволяет это делать, но в очень ограниченных пределах: написал не ту букву — стер, написал другую. Все остальное — в режиме редактирования (основной режим).
Истина вторая. «Хоткеи», доступные в режиме редактирования, — это вовсе не хоткеи, а мощная система команд с аргументами, циклами и регистрами. При использовании Vim ты ни в коем случае не должен мыслить стандартным образом: сейчас я тыкну мышкой на том слове, потом нажму Backspace столько раз, сколько потребуется, чтобы его стереть, напишу другое слово, а потом перемещу курсор обратно. Вместо этого ты должен отдать редактору команду: замени вон то слово на это и верни меня обратно.
Чтобы проиллюстрировать этот принцип, взглянем на простой пример. Допустим, ты просматриваешь только что написанный текст и решаешь, что в абзаце, на котором в данный момент расположен курсор, последнее предложение лишнее и его следует удалить.
Первая идея, которая придет тебе в голову, — взять мышку, выделить последнее предложение, выбрать в меню «Вырезать» или нажать Del. Звучит просто и логично, но что ты скажешь про это?
Нажатие этих трех кнопок сделает то же самое. Я очень удивлюсь, если на это у тебя уйдет больше пары секунд.
Что они значат? Давай разберемся:
Так как команды перемещения могут быть аргументами команд изменения, вся команда на человеческом языке звучит так: > — переместить курсор в конец абзаца, а затем d( — удалить все символы до начала предыдущего предложения. А если совсем просто: удалить последнее предложение текущего абзаца.
Команды можно повторять, например: 3> — переместить курсор на три абзаца вперед, >d2( — удалить два последних предложения в абзаце, 3J — объединить следующие три строки в абзац (J — Join), 3w — перейти на три слова вперед (w — word), 50G — перейти к пятидесятой строке (G — Go).
У Vim хорошая документация, просто набери :help и следуй инструкциям
Другой пример: ты опять же просматриваешь готовый текст и замечаешь слово Windows, которое лучше заменить на Linux. Решение в лоб — поставить курсор перед ним, нажать клавишу Del нужное количество раз, затем написать другое. Решение в затылок — переместить курсор на слово, нажать извращенную трехпальцевую комбинацию замены слова и написать другое. Правильное решение:
Чтобы просто удалить слово, можно использовать такую команду: /Windw (dw — delete word). Обрати внимание: в отличие от «поиска и замены» тебе не обязательно писать слово целиком. Более того, ты можешь сделать то же самое другими методами. Например, если слово Windows второе в третьем предложении, заменить его можно так: <3)wcwLinux.
Нуб в этой ситуации будет действовать прямолинейно: промотает код, найдет в нем нужный метод, тыкнет мышкой, вставит private перед именем метода, а потом промотает обратно. Более продвинутый разработчик использует хоткей для быстрого перехода к декларации метода, он может даже использовать другой хоткей, чтобы быстро сделать метод приватным, а самый продвинутый еще и воспользуется хоткеем для возврата.
Пользователь Vim сделает так:
Ты можешь сказать, что здесь у Vim нет никаких преимуществ по сравнению с хорошими средами разработки, но обрати внимание на два момента. Первый: это очень заезженный пример, и именно поэтому он легко решается с помощью современных средств разработки. Возьми ситуацию поэкзотичнее, и среда разработки окажется бессильна, а Vim позволит решить задачу быстро и эффективно.
Кстати, обрати внимание на команду «. Это команда ` (переход к метке) с аргументом ` (метка, которую редактор автоматически устанавливает перед любым перемещением курсора). Вместо « можно использовать `., которая перебрасывает курсор к последнему отредактированному месту. Метки можно ставить и самостоятельно с помощью команды m, за которой следует буква. Например, ma — поставит метку «a», вернуться к которой можно с помощью `a или ‘a (для перехода к началу строки).
Это опять же одна из стандартных функций редакторов, но Vim может сделать ее гораздо более мощной. Как ты уже должен знать, команды модификации текста принимают в качестве аргументов команды перехода, а это значит, что прыжок к метке тоже можно использовать в качестве аргумента. К примеру, удалить текст, начиная от текущего положения курсора до метки «a»: d`a.
К слову, команды удаления Vim не удаляют текст безвозвратно, а помещают его в буфер (в терминологии Vim — регистр), поэтому стандартными средствами здесь можно делать вещи, для которых в других редакторах потребовался бы отдельный хоткей. Например, менять две строки местами: ddp. Команда dd удаляет текущую строку (после чего курсор перемещается на следующую), p (paste) — вставляет текст из регистра под текущей строкой.
Вместо удаления строку можно просто скопировать с помощью yy (y — yank), а затем вставить с помощью все той же команды p. Объединим эту возможность с повторением команд и получим быстрый способ вставки множества одинаковых строк: yy10p.
Команда . выполнит предыдущую команду. И да, ее тоже можно зациклить: 3. — повторить предыдущую команду три раза. Команда qa начнет запись макроса с именем «a», остановить запись можно нажатием q. Выполнить макрос: @a.
Vim поддерживает огромное количество других команд, и первое время ты будешь теряться в том, как и что здесь работает. Однако большая часть функций тебе не понадобится. Ты должен заучить базовые команды модификации текста (удаление, вставка и так далее) и базовые команды перемещения (прыжки по словам, строкам, абзацам, блокам кода, меткам и прочему). Просто объединяй их, и ты сможешь сделать практически все в несколько нажатий кнопок.
Командный и визуальный режимы
Называя приведенные в предыдущем разделе комбинации клавиш командами, я нарочно отошел от стандартной терминологии Vim, чтобы как можно более четко объяснить, как это все работает. На самом деле в Vim есть отдельный командный режим, больше похожий на классическую командную строку, и он позволяет делать еще более продвинутые вещи.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
Илья Русанен
Главный редактор ][, занимаюсь разработкой и безопасностью
Зачем использовать vim
VI(M) — текстовый редактор, который появился в далеком 1991 году, но до сих пор пользуется огромной популярностью (наряду с Emacs). Как правило, на него переходят после других редакторов уже состоявшиеся разработчики. Нередко, переходят с полноценных IDE. Почему?
vim с настроенным линтером, файловым деревом NERDTree и нечетким поиском с fzf
В этом гайде не будет пошагового обучения виму. Цель — объяснить философию vim и причины его популярности, а также дать направление для дальнейшего обучения.
Различия редакторов
В современном мире есть из чего выбрать среди редакторов: Sublime Text, Atom, VS Code, Brackets. И это не считая IDE.
Visual Studio Code
Все они не лишены недостатков, но с точки зрения возможностей наворочены по максимуму. Между собой редакторы сравнивают по следующим характеристикам:
При таком способе сравнения vim выглядит достаточно бледно на фоне других редакторов. Да, он самый быстрый, но количество и качество плагинов явно уступает, а интеграций и вовсе нет, хотя, с другой стороны, многие из них не нужны в мире вима. Кроме всего прочего, обычный vim (а есть еще gvim — версия, запускающаяся в виде отдельного оконного приложения) — терминальная программа со всеми вытекающими последствиями. Мышка хоть и поддерживается, но работать используя её в виме — сомнительное удовольствие. Например скроллинг двигается рывками, так как в текстовом терминале смещение построчное.
И завершает картину кривая обучения. У вима она даже круче, чем у emacs. Чтобы научиться им пользоваться, придется в буквальном смысле страдать (но недолго если правильно учиться).
Чужой среди своих
Если слепой десятипальцевый метод печатания создан для эффективного набора текста, то вим создан для слепого десятипальцевого редактирования текста.
Вим предлагает другой взгляд на способ работы с текстом. Вместо горячих клавиш + мышка + перемещение стрелками вим вводит понятие режимы. По умолчанию, открыв редактор, мы попадаем в режим normal. В этом режиме вся клавиатура действует как приборная панель, набор текста в нём невозможен. Его основная задача — использовать клавиатуру для перемещения по тексту и выполнение модификаций с помощью команд. В отличие от горячих клавиш, все команды короткие и нередко составные, причем, нажатие составных команд всегда последовательное, а не одновременное, как в горячих клавишах.
Другими словами, вим предоставляет язык для модификации текста.
Приведу несколько примеров:
Сама система команд, при этом, выстраивается в логичную систему, где всё имеет смысл и находится на своем месте. Причем, не только с точки зрения обозначений (i — inner, a — around и так далее), но и с точки зрения расположения на клавиатуре. Из этого, кстати, следует интересный вывод: если ваша раскладка не qwerty, то вся клавиатура «поедет», и пользоваться вимом станет невыносимо больно.
vim cheat sheet by Max Cantor
Но для полноценной работы одного режима normal недостаточно. Для перехода в режим редактирования insert, существует более 6 способов! Например ввод команды i приводит к тому, что ввод начинается прямо в том месте, где стоит курсор, а shift + a перемещает курсор в конец строки (требуется довольно часто), в свою очередь cc стирает ту строчку, где находится курсор и входит в режим редактирования.
Для выхода из режима вставки в нормальный режим, достаточно нажать ESC.
При правильной работе в вим режим вставки используется только для ситуации набора текста (или стирания во время набора). Модификации и перемещения выполняются, в подавляющем большинстве случаев, в режиме команд.
Мощь режима normal вы можете оценить хотя бы по тому, что абсолютно в каждом популярном редакторе есть плагин, эмулирующий работу vim и, как правило, это самый популярный плагин с огромным отрывом от всех остальных. Например, плагин в VS Code установили более миллиона раз.
Наличие режимов — ключевая, но не единственная причина. Вторая, не менее важная — буферы. В обычных редакторах есть чёткое разграничение на табы с файлами и другие панели, такие как файловое дерево, встроенный терминал, окно вывода ошибок, окно конфигурации, окно отладки и так далее. Все эти сущности живут своей жизнью. У них свои правила работы и отображения, свой набор горячих клавиш и способ перемещения внутри них (если такое перемещение вообще возможно).
Еще одно внезапное преимущество появляется из-за текстовой природы самого редактора. Так как он открывается прямо во вкладках терминала, а продвинутые терминалы имеют такую возможность как split окна, то интеграция терминала внутрь vim особо не нужна и с помощью комбинации вкладок терминалов и вима можно очень удобно настроить рабочий процесс.
Терминал iTerm 2 со split-окнами
Возможности, описанные выше, не даются бесплатно. Существуют определенные пререквизиты. Главный из которых — слепая десятипальцевая печать. Опыт показывает, что если программист печатает вслепую, но не по десятипальцевой схеме, то он либо вообще не может адаптироваться, либо постоянно испытывает дискомфорт. Если же человек пока не научился печатать вслепую вообще, то изучение вима стоит отложить на будущее.
Как правило, люди, печатающие правильно, настолько ценят возможность не смещать руки относительно центральной позиции (смещение руки на стрелки для них доставляет физический дискомфорт и неприятие), что вим становится для них настоящим праздником. Вся система команд идеально ложится на соответствующую концепцию.
Клавиатура терминала ADM-3A
В мире вима есть одна деталь, серьезно влияющая на количество его пользователей. В отличие от современных редакторов, в которых настройка выполняется переключением галочек либо изменением значений в json-файле, вим требует поддержки своего файла конфигурации и ручном управлении буквально всем. В виме нет механизма для просмотра и установки плагинов прямо из редактора. Каждый плагин необходимо самостоятельно найти на гитхабе и вписать в этот файл. Если нужна дополнительная конфигурация, то в этом же файле её и нужно сделать. Сам конфигурационный файл использует язык программирования VimL, тот же, на котором написан сам редактор. К сожалению, не получается один раз настроить его и забыть. Несмотря на то, что в сети огромное число примеров этих конфигурационных файлов, постоянно приходится что-то подкручивать, заменять плагины и дописывать новые горячие клавиши.
Фрагмент файла конфигурации vim
Когда не стоит учить вим
Отдельно стоит сказать, что не стоит учить вим одновременно с тем, что вы собираетесь делать внутри него. Когнитивная нагрузка при изучении вима настолько высокая, что у вас не будет оставаться никакой энергии на изучение нового языка, фреймворка или, даже, программирования в целом. На вим имеет смысл смотреть тогда, когда вы уже спокойно работаете и хотите новых острых ощущений.
Другой важный аспект — готовность принять идеологию вима. Нередко происходит ситуация, когда программист садится за вим и при этом не начинает пользоваться вимом. Он продолжает использовать стрелки и практически не выходит в командный режим. Такой способ обучения виму самый опасный. Как только произойдет привыкание, переучить себя будет неимоверно сложно. Немалое число людей, считающих себя вимерами, не используют вим и в действительности работают крайне неэффективно.
Обучение виму — процесс сложный морально. Дело в том, что опыт сам по себе не делает вас лучше в чем-то. Научившись как-нибудь набирать текст, человек и через много лет будет делать это как-нибудь (не по скорости, а по эффективности работы с ним). То же самое касается использования редакторов.
Для повышения своей эффективности необходимо постоянно наблюдать за своими действиями, отслеживать те, что занимают слишком много времени, читать статьи и книги в поисках новых способов решения старых проблем. Такой подход, конечно же, важен не только при работе с вимом и даже не только в программировании, но именно в виме по-другому успеха достичь невозможно. Во время обучения нельзя себе давать слабину и действовать из принципа «сейчас сделаю хоть как-нибудь, а потом разберусь». Незаметно для вас сформируются неправильные привычки и дальнейший рост остановится. Если вы к этому не готовы, то изучение стоит отложить.
Сколько понадобится времени
Если следовать советам выше и постоянно правильно практиковать вим, то время от «любое действие занимает минуту» до «могу неспешно работать периодически подсматривая в документацию» займет около месяца. Дальше процесс пойдет легче, но останавливаться в развитии на этом этапе нельзя. Оттачивание всех необходимых навыков может занять и год. Но не стоит пугаться. В любом случае через месяц-два вы сможете вполне сносно работать.
NeoVim
Некоторое время назад был основан проект NeoVim. Это форк вима, разрабатывающийся энтузиастами. Сейчас он очень популярен и работает лучше, чем оригинальный Vim. Совместимость с плагинами почти полная, к тому же, большинство плагинов сейчас делаются с прицелом и на nvim тоже. Наша рекомендация использовать как основной редактор именно nvim.
Процесс обучения
Поставьте nvim и vim (с поддержкой python3).
Распечатайте и изучите vim cheatsheets.
Научитесь использовать возможности вашего терминала — сплиты/табы используя горячие клавиши.
Измените маппинги клавиш как описано выше.
Научитесь работать с пакетным менеджером plug. С него начинается вход в vim.
Изучите набор плагинов, подходящих под ваш стек, и установите их. В интернете много статей для настройки практически любого стека разработки. Единственная рекомендация, смотрите плагины основанные на lsp
Полезные ссылки
Плагины
Самый удобный способ искать плагины для vim — vimawesome.com.
Ниже список основных плагинов, без которых вим не вим:
Главный плагин с которого все начинается — vim-plug — пакетный менеджер, управляющий всеми зависимостями.
Кроме них понадобится и множество других. Например, под каждый язык есть свой собственный набор плагинов, информацию о которых можно почерпнуть гуглением либо просмотром содержимого репозитория https://github.com/sheerun/vim-polyglot.
Советы
Хотя вим и позволяет практически любую модификацию произвести чуть ли не в одну составную команду, злоупотреблять таким подходом не стоит. Например, задача «удалить три слова» уже требует умственного напряжения, если делать её одной командой. Гораздо проще вызвать удаление слова руками три раза. Баланс между одной сложной и набором простых команд придется искать самостоятельно. Важно дойти до уровня, когда вам не нужно задумываться над тем, «а что мне сейчас набрать, чтобы выполнить эту задачу?».
Периодически просто открывайте документацию установленных плагинов и читайте её. Каждый раз вы будете находить что-нибудь новое и полезное.