Vim for beginners

Vim по полной: Деплой

Оглавление

  1. Введение (vim_lib)
  2. Менеджер плагинов без фатальных недостатков (vim_lib, vim_plugmanager)
  3. Уровень проекта и файловая система (vim_prj, nerdtree)
  4. Snippets и шаблоны файлов (UltiSnips, vim_template)
  5. Компиляция и выполнение чего угодно (vim-quickrun)
  6. Работа с Git (vim_git)
  7. Деплой (vim_deploy)
  8. Тестирование с помощью xUnit (vim_unittest)
  9. Библиотека, на которой все держится (vim_lib)
  10. Другие полезные плагины

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

Добиться этого достаточно просто, благо есть даже целая методология, называемая «Непрерывной интерграцией», позволяющая в кратчайшие сроки деплоить мелкие изменения, но как сделать, чтобы это было достаточно удобно для программиста? Ведь никому не хочется писать код, а после переключаться в контекст системы деплоя или даже использовать ssh соединение чтобы развернуть мелкие изменения на продакшене (или на dev сервере).
Именно нежелание часто переключать внимание между редактором и системой деплоя побудило меня реализовать плагин, о котором я вам хочу рассказать.

Опыт перехода с Sublime на Vim

Из песочницы

Данная статья не раскрывает всех премудростей перемещения по тексту или его редактирования. Основные движения можно узнать в vimtutor, остальные комбинации изучаются в процессе работы. Некоторые из них, особо важные в процессе программирования, я освещу позже.
Я достаточно долгое время использовал sublime (около 4 лет) в качестве основной среды разработки, но в последнее время кое-что изменилось: я освоил слепой 9-ти пальцевый метод печати. В тот момент я начал понимать людей, которым неудобно тянуться к мышке или стрелочкам. Убирать пальцы с «домашних» позиций стало неестественно и непродуктивно. Тогда я включил vintage. Проблема, вроде бы, стала неактуальна, но чего-то не хватало. Не помню, что заставило меня пересесть за vim, но мне всегда нравилось, как в нем выделяются фигурные скобки (MatchParen) и как выглядит курсор :). Vim я пробовал и до этого, когда правил конфиги на сервере, правда, вся «магия» ограничивалась переходом в режим вставки и успешным сохранением/выходом из редактора.

Level 1 — Survive

The most distinctive feature of VIM is that it has modes. We can define the main four of them:

  • Normal mode — here you can type text commands and do navigation. To enter this mode press
  • Insert mode — in this mode you can type text as in other editors. To enter this mode press
  • Visual mode — here you can select text. To enter this mode press
  • Command mode — editor commands (like save, open, etc.). To enter this mode press

Also, you have to learn basic navigation which works in a normal mode. Forget about arrows because they are slow to work with. When you are typing, your fingers are usually placed in the middle of your keyboard. Left hand on asdf and right hand on jkl;. And usually, you are navigating in your code up/down and rarely left/right (later we will speak about navigation within the line). So navigation in VIM is the following:

  • down — (looks like a down arrow)
  • up —
  • left —
  • right —

Сохранение и редактирование

Save(сохранить) и Save as…(сохранить как…)

Мы уже видели, как используя ex-команду :q выйти из vi.

  • :w – записать или сохранить файл;
  • :w filename – для сохранение под другим именем;
  • 😡 или :wq – сохранить и выйти.

В Vim (и других потомках Vi, типа elvis), вы можете держать открытыми одновременно несколько буферов. Введите команду

  • :sp filename.txt для открытия файла filename.txt в новом окне;
  • :sp (без имени файла) откроет дополнительное окно для активного буфера.

Для перехода между окнами нажмите <C-w>,<C-w> (дважды <Ctrl>+<w>). Любая из команд :q, :q!, :w и 😡 относиться только к активному окну.

Простое редактирование

Вот и подошло время заняться изучением простых команд редактирования. Рассматриваемые здесь команды считаются «простыми» из-за того, что оставляют вас в командном режиме. Более сложные команды автоматически переводят вас в режим ввода текста, позволяющий добавлять в буфер символьную информацию, набираемую на клавиатуре; их рассмотрим позднее.

  • х – удаление символа под курсором;
  • J – присоединение следующей стоки к текущей;
  • r+символ – замена символа на символ;
  • dd – удаление текущей стоки.

Повторение и удаление

Повторить любую команду редактирования вы можете нажимая клавишу <.> (точка). Если попробуете, то можете увидеть, что печать dd… удалит 4 строки, а J…… объединит семь строк. Как обычно, Vi обеспечивает вас различными удобными средствами сокращения трудозатрат.

Удалять текст вы можете также комбинируя команду d с любыми командами перемещения. Например, dw удалит часть текста от текущей позиции курсора до начала следующего слова; d) удалит вплоть до следующего конца предложения, и d} удалит весь остаток абзаца. Поэкспериментируйте с командой d и другими командами редактирования, пока не почувствуете себя с ними уверенно.

Vim не единственный редактор

Есть много других интересных редакторов. Atom и Microsoft Visual Studio Code развились настолько, что вполне практично использовать браузерные нативные приложения. Sublime Text остаётся прекрасным приложением. IntelliJ IDEA теперь имеет бесплатную версию Community Edition. Все они поддерживают режимы наподобие Vim и достойны того, чтобы вы попробовали их в определённых ситуациях.

Программисты-новички часто спрашивают меня, какой редактор выбрать. И я всегда предлагаю начать с Sublime Text. У него знакомый интерфейс, прекрасная экосистема плагинов с актуальной подсветкой синтаксиса, он хорошо работает на macOS, Windows и Linux. Если вы учитесь программировать, то вам не нужно забивать голову странными таинственными комбинациями символов и разными режимами редактирования только для перемещения и изменения текста на экране. Хотя кто-то потом выберет Vim и отметит его скорость и мощь.

Лучший редактор для Java, пожалуй, IntelliJ IDEA. Версия Community Edition бесплатна и имеет все возможности, которые, вероятно, понадобятся современному Java- или Kotlin-разработчику. Здесь хорошая встроенная поддержка Maven-сборки, качественная интеграция с Git, невероятная поддержка рефакторинга, интеллектуальное завершение набираемого текста, классные подсказки параметров функций, умное индексирование, поиск лучше ctags, интерактивный отладчик. Когда я пишу на Ruby, если нужно что-то отладить и вставить больше парочки , то я запускаю IntelliJ и работаю с его отладчиком. А если скучаете по Vim, то бесплатный плагин IdeaVIM даст вам привычные биндинги.

Я не пробовал Visual Studio Code, но могу воспользоваться им, когда начну писать на TypeScript, поскольку оба разработаны Microsoft и хорошо работают вместе. Я видел несколько видеороликов и впечатлён его возможностью завершать набираемый текст. Да и вообще читал много положительного о нём. Мой друг утверждает, что Vim-плагин YouCompleteMe очень полезен, если пишете на C или C++, и у него есть поддержка TypeScript.

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

Почему я до сих пор использую Vim?

Vim — мой любимый редактор. Я начал его использовать много лет назад, когда перешел на Linux. Он пришелся мне по душе, так как я мог редактировать небольшие исходные файлы на своем четырехъядерном компьютере без необходимости долго ждать, пока он откроется.
Могу с уверенностью сказать, что Vim не плохой редактор и очень расширяемый, но это не повод говорить о том, что Vim подходит всем, так как это вопрос вкуса. При использовании Atom или Code у меня часто возникают зависания, бывает они длятся по нескольких минут.Как вы думаете, сколько памяти нужно редактору, чтобы открыть следующий C файл?

Буферы, буферы, буферы

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

С буферами легко разобраться: после запуска Vim любой открытый или созданный вами файл превращается в именованный буфер. Вы можете просматривать их с помощью команды и перемещаться к какому-то из них с помощью , где — любая часть имени файла буфера. Либо с помощью номеров, которые выводятся по команде .

Если вы запускаете Vim из командной строки с несколькими файлами в виде аргументов, то каждый файл уже будет открыт в буфере. Если вы установили vim-unimpaired, то для простой навигации между буферами помогут биндинги и .

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

Иногда я случайно создаю буферы, например, когда пытаюсь открыть файл, ввожу и слишком быстро жму Enter. Команду можно использовать для стирания буфера и удаления его из списка, но тогда ещё закроется окно Vim или сплит, в котором открыт этот буфер. Хорошее решение — bufkill.vim, предоставляющий для стирания текущего буфера и сохранения открытым текущего окна. Я часто им пользуюсь, поэтому привязал к .

Если нужно переименовать, сделать chmod или удалить файл, то можете перейти в терминал и внести изменение, но тогда буфер Vim перестанет быть синхронизирован и покажет раздражающее предупреждение «File is no longer available». Лучше взять NERDTree и подсвечивать текущий файл с помощью , нажав для изменения и выбрав действие вроде перемещения или переименования. Я предпочитаю vim-eunuch, добавляющий ряд команд: применяет chmod к текущему файлу, переименовывает файл в его родительской директории, может перемещать файл в другое место, а удалит файл и буфер. Есть ещё несколько команд, но к этим я прибегаю чаще всего.

Почему, ну почему, эти #?@! придурки используют vi?

Предлагаю читателям «Хабрахабра» перевод статьи «Why, oh WHY, do those #?@! nutheads use vi?» за авторством John Beltran de Heredia.

Да, даже если вы не можете в это поверить, у редактора vi, увидевшего свет более тридцати лет назад (и его более молодого, всего-то пятнадцатилетнего лучшего клона & большого улучшения — vim) очень много фанатов.

Нет, они не динозавры, которые не хотят идти в ногу со временем — сообщество пользователей vi продолжает увеличиваться: я, который начал только два года назад (после десяти лет работы программистом). Мои друзья переходят на vi сейчас. Черт, большинство пользователей vi даже еще не были рождены, когда он был написан!

Да, есть конкретные причины, почему модель редактирования vi/vim превосходит любую другую. Вам не надо быть экспертом в Unix, чтобы использовать vi — он доступен бесплатно практически для любой существующей платформы; для большинства IDE существуют плагины, позволяющие использовать его возможности. Давайте же развеем некоторые заблуждения и рассмотрим пару примеров, демонстрирующих его превосходство.

Vim

Всё начиналось в меру невинно. На первом курсе ты экспериментировал один или два раза, но Nano и Pico были проще, они были ближе к тому, чем ты уже пользовался в средней школе на машинах с Windows и Mac. Но время текло, твой багаж знаний пополнялся тем, что вам давали в вузе, и ты начал что-то замечать: все действительно великие программисты, люди, которым под силу было уместить в 4 строчки, то, для чего тебе требовалось 10 страниц кода, те, у которых богатое функциональностью решение учебного проекта было готово через день, в то время как ты неделями мучался лишь с базой, никто из них не пользовался Nano или Pico.
Однажды, засидевшись допоздна за заданиями, которые должны были быть готовы к полуночи, ты мимолетом опустил взгляд за плечо одного из этих тихих убер-программистов. Ряды мониторов в темноте компьютерной лаборатории сверкнули в твои глаза, и в трепете ты наблюдал невозможные узоры кода и текстовые манипуляции, которые озаряли экран.
«Как ты это делаешь?» — недоверчиво спросил ты.
Твою жизнь изменил лаконичный ответ, состоящий из одного слога: «Vim.»
Вначале ты был раздражен и куда менее производителен. История браузера являла полный индекс документации Vim, твои Nano и Pico-друзья считали тебя сумасшедшим, Emacs-товарищи умоляли одуматься, ты заплатил деньги за ламинированный экземпляр пямятки Vim. Даже спустя недели тренировок, ты всё ещё по привычке иногда тянулся к мыши, но затем одергивал руку, понимая, что придется искать в сети нужную комбинацию для выполнения рутинной операции, о которой раньше тебе никогда не приходилось задумываться.

Блиц раздел

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

Комментарии про отладку

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

Это не является минусом конкретно Vim, так как в том же Sublime Text дела обстоят не лучше. Хотя вам никто не мешает просто научиться ими пользоваться из консоли. Туториалов на эту тему полно, и сам процесс несложный.

Уход за проектом

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

Про настройку проверки синтаксиса и непосредственного написания кода уже написано много статей, но могу посоветовать установить для автодополнения по табу, отключить у него проверку синтаксиса и поставить для неё :

Прыжки по тегам

У Вима есть встроенная комбинация клавиш , который позволяет вам перейти к имплементации выделенного термина. Однако для его работы нужны те самые тэги. Сгенерировать их можно терминальной командой ctags:

Если вам нужно перейти к объявлению этого термина, то вам поможет (у вас должен быть установлен YCM):

Однако, постоянно отправлять Вим в задний фон и запускать ручками команду — не очень удобно. Также не очень удобно в больших проектах подолгу ждать выполнение индексации. Но у меня и для этой проблемы найдётся ответ…

Асинхронные команды

Одним из недавних трендов программирования является асинхронность. Она позволяет одновременно выполнять несколько разных задач, но сама программа остаётся однопоточной.

Вим — однопоточная программа (ему можно, у него амбиции ниже). Поэтому, если на него слишком много плагинов, то он поползёт со скоростью улитки. Но начиная с версии 8 (ну и в NeoVim это тоже есть) в него добавили API для асинхронных вызовов. Теперь ваш линтер, работающий в реальном времени, не будет замедлять сам процесс редактирования текста.

Давайте в качестве нашего подопечного возьмём плагин . Он умеет запускать асинхронно терминальные программы как в Vim 8, так и в NeoVim (ну и всех их разновидностях).

Теперь по нажатию клавиши F3 вы будете прогонять рекурсивно в директории проекта ctags. Вы всегда можете посмотреть вывод запущенной через программы в окне Quickfix. Умышленно убить программу в заднем фоне можно с помощью команды .

Соответственно, вызывать zathura можно также асинхронно:

Интеграция с Git

Человечеством ещё не было придумано более удобного способа пользоваться Git, чем через терминал. Многие IDE пытались бороться с такой тенденцией, но либо упрощали процесс настолько, что терялись важные фичи, либо усложняли до безумия. Но для фанатов делать всё из-под Вим таки нашёлся плагин , просто оборачивающий всеми любимые команды.

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

Vim: поиск по документации на Javascript

Обычно я работаю в Kate или Geany. Но иногда, как и всем людям, мне хочется освоить Vim. И каждый раз, примерно на второй минуте «освоения» возникает какой-нибудь совершенно дурацкий вопрос. Например, почему при нажатии стрелок (или клавиш jk) курсор скачет сразу через все строки абзаца?

Как бы я ни старался свои вопросы формулировать, поиск каждый раз выдаёт мне примерно одни и те же сто сайтов с заголовками вроде «100 самых полезных команд Vim». И какой бы сайт я ни выбрал, на нём всегда не будет хватать именно той «команды», которая мне нужна как раз сейчас.

Я подумал, как бы найти не сто, а вообще все команды Вим. И нашёл-таки страничку в сети, которая так и называлась: «Все команды Vim». И там действительно был очень большой список — штук шестьсот слов. Но не было указано, что эти команды делают, — просто список терминов. Меня так разозлила эта шутка, что я решил, наконец, почитать документацию и раз и навсегда составить свой собственный список «всех команд Vim». Результат на экране. Подробности ниже.

XKB: перенастроим клавиши под себя любимого

В один прекрасный день надоедает нажимать Shift, чтобы вывелся символ ~ вместо `.
Надоедает тянуться до Esc, при этом клавишей CapsLock пользуетесь РЕДКО.
Надоедает смещать кисть вниз и нажимать Ctrl/Cmd/Win слабым мизинчиком, либо, не дай бог, тянуться до них большим пальцем.
Надоедает лезть за PgUp, PgDn, Home и End, двигая руку каждый раз, чтобы всего лишь промотать страницу вниз.
Надоедает каждый раз, когда вы делаете опечатку, со злобой смотреть на клавиатуру в поисках кнопки Backspace.
Сегодня мы узнаем, как навсегда избавиться от этих мучений.

Зачем это всё?

Чтобы меньше нажимать клавиши. Чтобы меньше тянуться пальцами до тех клавиш, которые часто нажимаем. Чтобы руки меньше уставали. Чтобы легче запоминать что где. Чтобы быстрее печатать, в конце концов.
Многие раскладки для печати (Dvorak, Colemak и т.п.) сильно улучшают расположение клавиш, ставя их ближе к тем местам, куда нужно меньше тянуться. Но при этом совершенно забывают о модификаторах, спец. символах и командных клавишах (Enter, Backspace, Tab, Esc, Delete). А мы подумаем о том, как улучшить существующее положение вещей.
В статье пойдём от простейших изменений, до более интересной и глубокой настройки. И, как в конце хороших фильмов, я оставлю читателя подумать, что делать дальше, и не дам готового рецепта на всё. В конце концов, идеальных и универсальных решений нет, и на раскладку клавиатур товарищей нет.

Красота требует настройки

Самая базовая и, вместе с тем, одна из самых важных модификаций для программы, в которой вы будете проводить более 90% своего рабочего времени — внешний вид. Если вы пользуетесь терминальным Вимом и уже настраивали консоль, то эти изменения должны отобразиться и на самом редакторе, но можно пойти и дальше. Начнём с выбора темы.

Так наш подопечный (MacVim) выглядит сейчас:

Выбор темы

Для Вима силами волонтёров было написано немеренно готовых тем. Из большинства популярных редакторов их давно уже всех портировали. Как по мне, главная отличительная особенность Sublime Text — его тема , которую мы сейчас вероломно апроприируем.

Улучшенная строка состояния

Теперь давайте настроим наш status bar. Основная идея состоит в том, чтобы красиво показывать важную информацию по аналогии с tmux и панелями в WM на экране, касающуюся редактирования текста. Для этого давайте поставим :

Про Powerline мы поговорим далее, но главное, чего мы этим добьёмся, — секции строки состояния будут выделяться не прямоугольниками, а стрелками. Про Keymap мы поговорим в секции про интеграцию русского языка, но эта комманда просто скроет его индикатор из строки статуса (аналог останется в строке команд). Символ — это красивая альтернатива «ln», но также мною был опущен процентный показатель конца файла, ибо мне он показался излишним.

Вид Airline по умолчанию:

Вид после нашего вмешательства:

Шрифт и иконки

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

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

Но и они не работают.

И подключим его так (в GUI. И да, «фура» тут намеренно):

Теперь все наши элементы кастомизации должны встать на место:

Стандартные опции

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

Комбинированные команды

Vi действительно становиться мощным, когда вы начинаете использовать совмещенные (или комбинированные) команды, типа d{ и cw. Дополнительно к таким командам, вы также можете совмещать числа с любыми командами перемещения, как 3w, которая сообщает Vi о необходимости проскочить вперед на три слова. Вот еще несколько примеров таких комбинированных команд: 12b, 4j.

Разрешая комбинации (число)(команда перемещения), Vi позволяет еще совмещать команды d или c с числами или командами перемещения. Так d3w удалит следующие три слова, d2j удалит текущую и две следующие строки, и т.д. Попробуйте немного поэкспериментировать с командами c и d, совмещенными с перемещениями, чтобы почувствовать, каким мощным и лаконичным может быть редактирование в Vi. Когда эти команды станут вашей второй натурой, вы сможете редактировать файлы с невероятной скоростью.

Киллер фича Vim

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

Гуглим, выясняется, что для превращения вима в нормальный редактор нужно нажать i. Только сохранить поредактированный текст нельзя, перед этим надо несколько раз нажать эскейп, а потом набрать :w. А, чтобы его закрыть, нужно нажать эскейп, а потом набрать :q. Тяжёлое наследие прошлого. Ну, зато вим есть везде.

Но в какой-нибудь из статей, рассказывающей, как провести 5 минут в виме и остаться в живых, обязательно будет написано, что вим — лучший текстовый редактор в мире. И ещё выяснится, что люди в нём программируют. То есть, натурально, пишут код. То есть, на дворе 21 век, в любой момент можно скачать Visual Studio, Intellij Idea или, прости господи, Eclipse, а они пишут код в виме. Добровольно.

Syntastic. Плагин для невнимательных и многоязычных

Мотивация

Как часто вы, написав код, запускаете его и видите сообщение о синтаксической ошибке? Я часто. А как часто, найдя и исправив эту ошибку, вы вновь, запуская код, видите похожее сообщение?
Я часто…
Причин тому несколько:

  • я очень невнимательный
  • я пишу на многих языках

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

Эффективное использование Vim

Введение

Я очень люблю редактор Vim, использую его в своей работе (для написания кода) уже больше четырех лет и хочу поделиться своим опытом его использования.
Эта статья — не набор “волшебных команд” и рецептов (cookbook, как называют такие наборы по-английски), хотя они тут тоже присутствуют, а, скорее, попытка описать, как общие принципы построения эргономичных интерфейсов можно применить в практике использования Vim, чтобы сделать из него удобную и эффективную среду работы с текстами.
Эта статья также не является tutorial’ом для начинающих пользователей Vim, хотя и им (а также пользователям Emacs) может быть интересна, поскольку некоторые упоминаемые принципы являются достаточно общими и действуют не только в системах редактирования текстов, а вообще везде, где идет речь об использовании компьютера для редактирования чего-либо. Тем не менее, я предполагаю, что читатель знаком с основными концепциями, применяемыми в Vim (режимы, регистры, буфера, команды) и не останавливаюсь на их подробном описании.
По умолчанию Vim настроен очень старомодно, и эта настройка подразумевает, что пользователь при работе с текстом будет мыслить метафорами пятидесятилетней давности, как будто бы сейчас заря эпохи UNIX. Однако дизайн Vim позволяет сделать несколько настроек, после которых система станет выглядеть вполне прилично и станет работать весьма эффективно, сочетая в себе полезные черты и древних юниксовых инструментов работы с текстом, и современных WYSIWIG-процессоров, при этом обходя, насколько это возможно, присущие им недостатки. Вот об этих настройках и приемах их использования и пойдет речь.

Vim magic — Visual mode

Немножко о режиме выделения для тех, кому лень проходить vimtutor, или тех, кто ещё сомневается в том, что Vim это действительно удобно.
Режим выделения в Vim это одна из тех грандиозных вещей (наряду с *, = и text-objects), которые делают этот редактор особенно удобным. Как вы уже знаете, в Vim есть режим Visual, в котором можно выделять текст, чтобы потом с выделением что-нибудь делать, например, засунуть его в регистр, отформатировать, заменить в нем что-нибудь регулярным выражением или ещё что-нибудь. Чтобы войти в этот режим, нужно нажать v, а потом перемещать курсор обычными командами, передвигающими курсор в обычном режиме, расширяя таким образом область выделения.
Режимов выделения есть несколько: обычный, построчный и блочный. Обычный включается командой v и выделяет текст от символа до символа. Построчный включается командой V (Shift+v) и выделяет строки целиком. Блочный включается командой Ctrl+V (под Windows может включаться Ctrl+Q, если Ctrl+V занято под вставку текста из клипборда) выделяет вертикальный блок текста (не захватывает начала и концы строк в середине выделения, как это происходит в обычном режиме).

Level 3 — Mastering

You are on the way to become a VIM master. As you may found, this is not so easy to learn VIM. When you feel the power in your hands using VIM, you will want something more and this is what this part about. All topics are discovered superficially in order to let you decide what you want.

VIM is not an IDE

  • Hardcore! Do not repeat this at home! Google Chrome also has extensions for VIM-like navigation. (find it in Chrome Store)

Still, you have to keep in mind that the maximum performance can be achieved by using just VIM. Basically, it is suitable for small js/html/css projects, editing configuration files or just as a replacement of your notepad++ 🙂

VIM plugins

In my case, I pressed key and to navigate to the appropriate line. It was the easiest example and as usual, in the world of VIM, you can craft almost any command according to your needs.

Mappings

This feature I decided to consider separately. You may think about mapping as key bindings for all modes. That is to say, you can bind some pattern to perform some actions in different modes.

So let’s look at the easy and real example. Almost every person who works in VIM does not change the mode from insert to normal by pressing . We are doing it by pressing or because we have the following mapping: <>. stands for insert mode mapping and means that it works only in insert mode.

VIM features

There are a lot of things to learn in VIM besides the features mentioned above. You definitely should pay attention to the following list:

  • global commands
  • search and replace
  • macros and registers
  • buffers
  • tabs
  • indents and foldings
  • autocommands

They may exist in other development tools, but this is VIM. Day by day you will wonder how brilliant all these things are constructed. Check it out to make sure.

Небольшой лайфхак с редактированием буфера обмена

Я часто сталкиваюсь с такой ситуацией: пишу себе спокойно текст в чем-то (скажем, письмо в веб-интерфейсе гмейла), и вдруг, в какой-то момент возникает необходимость что-то переделать… и случается раздражение. Случается оно от того что редактирование в браузере (да и много где еще) не предполагает некоторых привычных для программиста удобств, вроде автоматической замены, регулярных выражений и макросов. При этом, вроде бы и не сложно скопировать текст в буфер и отредактировать его в правильном редакторе (Vim, Emacs, …), но очень уж не хочется отрываться от контекста и совершать какие-то телодвижения, отвлекающие от текущей задачи… И вот, я уже расставляю отступы (нумерую список, заменяю слово, …) вручную — результат достигнут, да и времени потрачено совсем не много, но осадочек остался…
Знакомая ситуация? Если ответ «да», в вашей операционной системе работает bash и ваша первая ассоциация к слову «редактор» это не «Microsoft Office» значит нам есть что обсудить под катом 🙂

Vim, немного крипоты

«у vi есть два режима: бибикать и всё портить»ADM-3AфотоПриведу несколько цитат перед статьёй, которые как бы намекают читателю: «— Ужаснись и беги. Слышишь смертный? Беги! И не говори потом, что тебя не предупреждали…»
https://ru.wikibooks.org/wiki/Vim* * ** * ** * *й* * *q

Команды Vim:

внезапным открытием

vimtutor ru

Перемещениеhjkl^$weE (Shift+e)e%2wначалу3eконцуj$Alt+{Alt+Shift+[Alt+}Altl+Shift+]послеShift+gввести номер507 Shift+g:45 Enter45ggmk‘k‘.HML ztzzzb*#Оконная навигация — окна и вкладки:bn :bp :ls :b имя_буфера :bd имя_буфера:bd Ctrl+w v:vsplitCtrl+w s :split Ctrl+w fCtrl+w qcCtrl+w nСtrl+w oзакрывСtrl+w Сtrl+w Ctrl+w+Ctrl+wEsc 5 Ctrl+w+Сtrl+w 5+ Esc 5 Ctrl+w —Сtrl+w 5- УменьшитьCtrl+wCtrl+wCtrl+w HJKLокноCtrl+w hjkl курсоркурсорvim -o filename1 filename2горизонтальныхvim -O filename1 filename2вертикальныхvim -d filename1 filename2:tab ball:tabnewgtgtgTgtпредыдущую:tabn:tabpCtrl+PageUpCtrl+PageDown:set mouse=a Вход в модальный режим редактирования текста:
i
левееaправееAконецRзамены текстаoOРедактированиеuUCtrl+rоператора и объектаоператорdобъектомdwdwded$d^cec$d2wxddDCrdiwdiwciwciwcibcibc%ditditcitcitceEscd$Ddbdi(di»ya(sсимволSвсе до конца строкиd5dCtrl+aCtrl+xVuVUg~~Автодополнения:Ctrl+p Ctrl+nCtrl+x Ctrl+fCtrl+x Ctrl+dCtrl+x Ctrl+iCtrl+x Ctrl+kCtrl+x Ctrl+]Ctrl+x Ctrl+o      Поиск:ff;?назадnNПредыдущееCtrl+oCtrl+i%Поиск и замена:s/было/сталотолько первого:s/было/стало/gвсех:g/string/d:v/string/dне содержащие:30,90s/было/стало/gc:%s/было/стало/gc:s/:30,90s/:%s/gcВыделениеvvCtrl+vпрямоугольных блоковgvdcyyywppvipvgUvg~Для одиночной строки нажать дважды< (Shift+,)> (Shift+.)УвеличитьФайловые операции:w:w file.txt:w! file.txt:w~/file.txt:e:e file.txt:ene:ene file.txtv:'<,’>w file.txt:r file.txt :r!ls:! lsНастройки~/.vimrc:set ic:set noic:set hls:set nohls:set is:set noisset nu set mouse=a:syntax onРазноеCtrl+gEsc или Ctrl+C или Ctrl+[:e
Enter
:e! Enter😡 и :wq:w! или :wq!ZQ~/.vimrcПолезные хитрости:%s#>\+>##g:%s/^\(.*\)\n\1$/\1/:%s/\s\+$//link:1,$ g/^$/ d:g/^$/d

Решение проблем:

йQ

  1. Статьи на хабре:https://habrahabr.ru/hub/vim/
  2. Почему, ну почему, эти #?@! придурки используют vi? (отличная статья! А комменты просто жгут)https://habrahabr.ru/post/307084/
  3. Vim и кириллица: парочка приёмовhttps://habrahabr.ru/post/98393/
  4. Аж целую книгу запилили по этому vim, я удивляюсь. Нашёл на файлопомойке тут:http://mirrors.pdp-11.ru/_books/desktop%20soft/vim/
  5. Прямая ссылка на книгу:O’Reilly — Learning the vi and Vim Editors 7th Edition (перевод).pdf
  6. Vimtouch под Android. Если готовый в googleplay:https://github.com/momodalo/vimtouch
  7. 100 команд vim, которые должен знать каждыйhttp://scabere.livejournal.com/62886.html
  8. Настраиваем Vim под Pythonhttps://habrahabr.ru/post/74128/
  9. VIM как IDE для разработки на Pythonhttps://habrahabr.ru/post/224979/
  10. Vim как IDE для веб-разработкиhttps://habrahabr.ru/post/53435/
  11. Окна и буферыhttps://habrahabr.ru/post/28572
  12. Многооконный режим редактирования файлов в Vimhttps://www.opennet.ru/tips/1714_vip_edit_text.shtml
  13. Хороший, почти как vimtutor, цикл видео уроков по vim.https://www.youtube.com/playlist?list=PLcjongJGYetkY4RFSVftH43F91vgzqB7U

История Vim и руководство по его эффективному использованию

  • Перевод
  • Tutorial

Примечание от переводчика: это первая часть монументальной (на самом деле монументальной) статьи о Vim и его возможностях от разработчика из Миннеаполиса и автора проекта PostgREST Джо begriffs Нельсона.
Первая часть статьи отводится на знакомство с историей Vim как редактора и автор рассказывает ряд интересных фактов и о возможностях Vim. Во второй части перевода будут сконцентрированы все фишки и лайфхаки, которыми Джо решил поделиться с аудиторией, там повествование, как таковое, затухает и остается лишь набор руководств к действию. Так как оригинал текста обладает совершенно неприемлемыми габаритами, мы разделили эту историю на две примерно равные по размерам статьи. Сегодня — первая из двух публикаций. Приятного чтения.

Эта статья основана на исследовании истории Vim и прочтении его руководства пользователя от корки до корки. Надеюсь, эти заметки помогут вам открыть (или переоткрыть?) для себя основные функциональные возможности этого редактора, а также позволят отказаться от использования предупакованных файлов vimrc и более вдумчиво использовать плагины.

Список литературы

Чтобы выйти за границы привычных тем, я бы порекомендовал обзавестись бумажной копией этого руководства и емким карманным справочником. Я не смог найти печатную копию руководства пользователя для Vim, так что в итоге просто распечатал идущий вместе с редактором PDF-файл с помощью printme1.com. Он идет вместе с софтом в . В качестве удобного списка команд могу посоветовать справочник «Vi and Vim Editors Pocket».

  • История
  • Иерархия конфигурации
  • Сторонние плагины
  • Бекапы и откаты
  • Include и path
  • Редактирование и компиляция цикла
  • Диффы и патчи
  • Буфер ввода / вывода
  • Типы файлов
  • Не забывайте про мышь
  • Разное

Написание прозы в Vim

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

Прекрасный плагин goyo.vim добавляет в буфер много функций и прячет всё лишнее. Он распознаёт status bar’ы Airline/Powerline/Lightline и тоже их прячет, ну, по большей части. Это плюс несколько других хитростей в настройке я называю режимом прозы:

Эту команду я привязал к . Она включает Goyo и избавляется от всяких забавных вещей, полезных при написании кода, например отступов при вводе скобок. Также плагин меняет цветовую схему с моей обычной тёмной на светлую версию Solarized

Это важно, поскольку визуально напоминает, что я в «режиме письма» и что нельзя отвлекаться: нужно создавать текст

Команда также заставляет функцию автозавершения вытаскивать слова из словаря, когда я нажимаю Tab в надежде, что могу писать быстрее. Эта фича всё ещё в разработке, но время от времени бывает полезна.

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий