Vim — свободный текстовый редактор, созданный на основе более старого vi. Ныне это мощный текстовый редактор с полной свободой настройки и автоматизации. vim не похож ни на один другой редактор. Что в нем такого особенного и почему его стоит изучать. Зачем использовать vim. Философия и процесс изучения текстового редактора vim.

Оглавление

Что такое Vim?

В 1976 году родился отец Vim’а – текстовый редактор Vi. Он использовался для работы в терминалах и имел весьма непривычные методы работы в режиме редактирования текста. Vim (Vi IMproved) – это последнее, самое знаменитое воплощение Vi, его улучшенная, как следует из названия, версия. Он поддерживается любой платформой, какую вы сможете вспомнить, и даже имеет графический интерфейс.

Описание программы Vim

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

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

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

Преимущества и недостатки Vim

  • Поддержка большинства языков программирования
  • Многооконный режим работы
  • Множество полезных плагинов
  • Автоматизация написания кода
  • Возможность тонкой настройки
  • Сложно использовать (программа только для разработчиков)
  • Неполная реализация функций командной строки
  • Некоторые виды автоматических операций требуют дополнительной настройки

Функции и особенности Vim

  • Автозавершение кода
  • Написание кода
  • Написание текста
  • Поддержка командной строки
  • Подсветка синтаксиса
  • Поиск и замена
  • Проверка орфографии
  • Программирование
  • Регулярные выражения
  • Редактирование текстовых файлов
  • Эмуляция терминала

Системные требования

  • Поддерживаемые ОС: Windows 8, Vista, 7, 8.1, 10, XP
  • Разрядность: 32 bit, 64 bit, x86

Различия редакторов

В современном мире есть из чего выбрать среди редакторов: Sublime Text, Atom, VS Code, Brackets. И это не считая IDE.

Все они не лишены недостатков, но с точки зрения возможностей наворочены по максимуму. Между собой редакторы сравнивают по следующим характеристикам:

  • Скорость работы. Хотя её ставят превыше всего, практика показывает, что программисты готовы страдать ради продвинутых возможностей.
  • Возможности по редактированию текста, например мультикурсоры или сплиты (разделения экрана).
  • Наличие большого числа разнообразных плагинов, включающих поддержку языков и инструментов.
  • Интеграции, такие как git, терминалы и другое.

При таком способе сравнения vim выглядит достаточно бледно на фоне других редакторов. Да, он самый быстрый, но количество и качество плагинов явно уступает, а интеграций и вовсе нет, хотя, с другой стороны, многие из них не нужны в мире вима. Кроме всего прочего, обычный vim (а есть еще gvim — версия, запускающаяся в виде отдельного оконного приложения) — терминальная программа со всеми вытекающими последствиями. Мышка хоть и поддерживается, но работать используя её в виме — сомнительное удовольствие. Например скроллинг двигается рывками, так как в текстовом терминале смещение построчное.

И завершает картину кривая обучения. У вима она даже круче, чем у emacs. Чтобы научиться им пользоваться, придется в буквальном смысле страдать (но недолго если правильно учиться).

Чужой среди своих

Так почему же вим?

Если слепой десятипальцевый метод печатания создан для эффективного набора текста, то вим создан для слепого десятипальцевого редактирования текста.

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

Другими словами, вим предоставляет язык для модификации текста.

Приведу несколько примеров:

  • w — переместиться на слово вперед
  • W — перемещаться вперед по пробелам
  • b — переместиться назад
  • B — перемещаться назад по пробелам
  • dd — удалить строку
  • diw — удалить слово, которое находится под курсором
  • daw — удалить слово, которое находится под курсором вместе с окружением (всё, кроме пробелов, например кавычки)
  • gg — переместиться в начало документа
  • / — начнёт поиск; всё, что вводится далее, ищется в открытом файле (плюс есть команды для перемещения вперед и назад по найденному)

А вот, например, более интересная команда — r. После нажатия редактор ожидает следующего символа. Затем, когда он будет введен, редактор заменяет символ под курсором на введённый. Нетрудно догадаться, что r означает replace. Подобных команд в виме не одна сотня. И многие из них могут комбинироваться в довольно сложные цепочки, позволяя творить чудеса.

Сама система команд, при этом, выстраивается в логичную систему, где всё имеет смысл и находится на своем месте. Причем, не только с точки зрения обозначений (i — inner, a — around и так далее), но и с точки зрения расположения на клавиатуре. Из этого, кстати, следует интересный вывод: если ваша раскладка не qwerty, то вся клавиатура «поедет», и пользоваться вимом станет невыносимо больно.

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

Ключевое место в этой структуре имеет клавиша под названием Leader. Это не какая-то конкретная клавиша, она разная у разных пользователей, хотя сейчас, как правило, все используют пробел. Дело в том что большая часть пользовательских комбинаций (и тех кто предоставляют плагины), делаются как раз через лидер. В конфигурации она обозначается как .

vim cheat sheet
vim cheat sheet by Max Cantor

Но для полноценной работы одного режима normal недостаточно. Для перехода в режим редактирования insert, существует более 6 способов! Например ввод команды i приводит к тому, что ввод начинается прямо в том месте, где стоит курсор, а shift + a перемещает курсор в конец строки (требуется довольно часто), в свою очередь cc стирает ту строчку, где находится курсор и входит в режим редактирования.

Для выхода из режима вставки в нормальный режим, достаточно нажать ESC.

Кроме этих двух, у vim есть режим visual, который похож на normal, но используется исключительно для выделения текста. И еще один способ взаимодействия с редактором появляется после ввода символа : в нормальном режиме. Курсор перемещается вниз экрана, куда можно вводить различные команды. Так, например, делается выход из вим. В этой строке необходимо набрать q и нажать Enter. Команды, вводимые подобным образом, обычно обозначают так: :help. То есть необходимо набрать : затем слово help и затем нажать Enter.

При правильной работе в вим режим вставки используется только для ситуации набора текста (или стирания во время набора). Модификации и перемещения выполняются, в подавляющем большинстве случаев, в режиме команд.

Мощь режима normal вы можете оценить хотя бы по тому, что абсолютно в каждом популярном редакторе есть плагин, эмулирующий работу vim и, как правило, это самый популярный плагин с огромным отрывом от всех остальных. Например, плагин в VS Code установили более миллиона раз.

Другой, не менее интересный, а для многих, возможно, шокирующий пример популярности этого режима — программное обеспечение вокруг нас. Gmail поддерживает перемещение как в vim прямо в веб интерфейсе, Github тоже (попробуйте на странице любого репозитория набрать вопросительный знак на клавиатуре). В каждом браузере существует популярный плагин, позволяющий перемещаться по загруженным страницам в стиле вим. Все пейджеры, такие как less или more, также используют навигацию, портированную из вима. Соответственно, и все программы, использующие пейджеры, например git log (и другие команды git). Даже в bash достаточно набрать set -o vi, как командная строка превращается в vi (без m). Кстати, по умолчанию, в bash включен режим emacs с горячими клавишами из этого редактора.

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

В виме любой кусок редактора, открытый в своей собственной рамке — всего лишь текстовый буфер независимо от того, как он используется. Автоматически это означает единый способ взаимодействия с этими буферами. Например, упоминавшийся выше / поиск прекрасно работает в любой части редактора. То же самое касается перемещения с hjkl. Содержимое такого буфера можно копировать стандартными средствами как, целиком так и по выделению, его можно закрыть через команду, предназначенную для закрытия буфера (опять же, независимо от его внутренней структуры). Можно даже открыть больше буферов, чем места на рабочей области. Одни буферы могут спокойно перекрывать другие, что не помешает переключению между ними. Буферы настолько удобны, что несмотря на наличие табов (вкладок) в вим, пользуются ими крайне редко.

Еще одно внезапное преимущество появляется из-за текстовой природы самого редактора. Так как он открывается прямо во вкладках терминала, а продвинутые терминалы имеют такую возможность как split окна, то интеграция терминала внутрь vim особо не нужна и с помощью комбинации вкладок терминалов и вима можно очень удобно настроить рабочий процесс.

iterm2 with vim and split

 

Что за зверь Neovim?

Возможно, вы слышали о Neovim’е. Это современный форк классического Vim’а, отрефакторенный, легко расширяемый. Из коробки он уже не так суров, как его предшественник, с ним вполне можно иметь дело. Подробнее о Neovim – на neovim.io.

Почему Vim?

Вас точно мучает вопрос: зачем возиться с таким древним редактором в 2018? Не спешите делать выводы. Путь Vim совсем не похож на все, что вы видели раньше. Он поднимает вас на качественно новый уровень беглости, превращает в хирурга, виртуозно проводящего сложнейшие операции над кодом.

Текстовый редактор Vim специально создан для суперпроизводительности. Расположение каждой команды продумано до мелочей. Главные клавиши – прямо у вас под пальцами! В каждом режиме редактора собственный набор комбинаций, вам не требуется искривлять пальцы, пытаясь захватить все нужные кнопки разом.

Еще одно достоинство, которое делает Vim лучшим редактором в мире, – это адаптируемость. Его можно идеально настроить «под себя» (или под свою команду).

Vim настолько хорош, что большинство других редакторов сегодня поддерживают какой-нибудь Vim-режим

Печатайте вслепую!

Почему просто необходимо печатать вслепую?
Вспомните, как вы учились кататься на велосипеде! Сначала вы мучились, пытаясь понять, как же это делают остальные, не могли проехать и двух метров. Но вы старались! Вы пробовали ещё и ещё. Может быть час, день или даже несколько дней. Пока не почувствовали.
Помните, насколько приятным было то ощущение, когда вы впервые почувствовали, что нужно делать, и будто стали с велосипедом одним целым? А потом вы к этому быстро привыкли и забыли, что бывает иначе…
Если Вы не помните, как учились ездить на велосипеде, вспомните, как учились плавать или кататься на коньках, вспомните любое своё умение!
Так раз уж если Вам приходится пользоваться компьютером — получайте удовольствие от общения с клавиатурой, вместо того, чтобы постоянно ощущать этот ужасный 100-кнопочный барьер (с двухкнопочным в придачу) между вами и компьютером (и теми, с кем вы посредством компьютера общаетесь).

Vim — редактируйте вслепую!

То же славное ощущение, про которое я говорил выше, появляется и в Vim’е.
Если вы просто печатаете вслепую, ты вы с удовольствием вводите текст, не задумываясь на процессом.
Овладев Vim’ом, вы начинаете вслепую редактировать текст:

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

И всё это вслепую, не отрывая рук от клавиатуры, не пользуясь никакими элементами интерфейса и не используя сложных комбинаций клавиш Alt, Ctrl и т.п. Вместо этого, лишь используя по большей части легко запоминающиеся команды.
Ценой такого удовольствия является, как говорят, высокий барьер вхождения, т.е. сложный и небыстрый период освоения. Но это тот самый случай, когда единственной возможностью повысить качество работы является вложение времени в обучение.

Путь Vim

Основа Vim – клавиатура. Все важные команды расположены продуманно и максимально эффективно:

  • основные движения в центральном ряду под правой рукой – hjkl;
  • повторители ; и . один под другим;
  • мощная команда f прямо под левым указательным пальцем;
  • тут же слева основные операторы: s, x, d, c, r;
  • s – это синоним для cl, а x – для dl;
  • * и # используются для поиска текущего слова вперед и назад. Их легко запустить средними пальцами.

Все операторы осмыслены и легко запоминаются, благодаря мнемоническим зацепкам:

  • c – значит изменить (change),
  • изменить букву (change letter) – cl,
  • слово (change aword) – caw,
  • ciw – внутреннее слово (change inner word – без окружающих пробелов),
  • ct. – изменить все до ближайшей точки (change till .).

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

Философия Vim

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

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

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

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

Первая идея, которая придет тебе в голову, — взять мышку, выделить последнее предложение, выбрать в меню «Вырезать» или нажать Del. Звучит просто и логично, но что ты скажешь про это?

}d(

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

Что они значат? Давай разберемся:

  • } — команда перемещения, перебрасывает курсор в конец абзаца;
  • d — команда изменения, а именно удаления (d — delete);
  • ( — команда перемещения, перебрасывает курсор в начало предыдущего предложения.

Так как команды перемещения могут быть аргументами команд изменения, вся команда на человеческом языке звучит так: } — переместить курсор в конец абзаца, а затем d( — удалить все символы до начала предыдущего предложения. А если совсем просто: удалить последнее предложение текущего абзаца.

Команды можно повторять, например: 3} — переместить курсор на три абзаца вперед, }d2( — удалить два последних предложения в абзаце, 3J — объединить следующие три строки в абзац (J — Join), 3w — перейти на три слова вперед (w — word), 50G — перейти к пятидесятой строке (G — Go).

У Vim хорошая документация, просто набери :help и следуй инструкциям
У Vim хорошая документация, просто набери :help и следуй инструкциям

Другой пример: ты опять же просматриваешь готовый текст и замечаешь слово Windows, которое лучше заменить на Linux. Решение в лоб — поставить курсор перед ним, нажать клавишу Del нужное количество раз, затем написать другое. Решение в затылок — переместить курсор на слово, нажать извращенную трехпальцевую комбинацию замены слова и написать другое. Правильное решение:

/WincwLinux

  • /Win — команда перемещения с помощью поиска (в данном случае ищем Win);
  • cw — команда замены (c — change) с аргументом «слово» (w — word);
  • Linux — новое слово.

Чтобы просто удалить слово, можно использовать такую команду: /Windw (dw — delete word). Обрати внимание: в отличие от «поиска и замены» тебе не обязательно писать слово целиком. Более того, ты можешь сделать то же самое другими методами. Например, если слово Windows второе в третьем предложении, заменить его можно так: {3)wcwLinux.

Теперь о том, как редактировать код. Представь, что ты пишешь или просматриваешь свой код и замечаешь, что метод текущего класса, вызов которого находится под курсором, используется только здесь и поэтому его лучше сделать приватным. То есть тебе надо перейти к декларации метода и вставить перед ним слово-модификатор private.

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

Пользователь Vim сделает так:

gdiprivate «

  • gd — переходим к определению функции или метода (gd — go definition);
  • i — переключаемся в режим ввода;
  • private — слово-модификатор и пробел;
  • Esc — возвращаемся в обычный режим;
  • « — прыгаем туда, где были до перехода (возвращаем курсор обратно).

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

Второй момент: как и современные инструменты разработки, Vim имеет в своем арсенале огромное количество средств для повышения эффективности. Например, ты можешь заранее забить в конфиг Vim аббревиатуры: придумать для private псевдоним #p, который будет разворачиваться в private. А можешь повесить всю команду на одну комбинацию клавиш. Плюс для Vim есть несметное количество плагинов, которые облегчают разработку.

Кстати, обрати внимание на команду «. Это команда ` (переход к метке) с аргументом ` (метка, которую редактор автоматически устанавливает перед любым перемещением курсора). Вместо « можно использовать `., которая перебрасывает курсор к последнему отредактированному месту. Метки можно ставить и самостоятельно с помощью команды m, за которой следует буква. Например, ma — поставит метку «a», вернуться к которой можно с помощью `a или ‘a (для перехода к началу строки).

Это опять же одна из стандартных функций редакторов, но Vim может сделать ее гораздо более мощной. Как ты уже должен знать, команды модификации текста принимают в качестве аргументов команды перехода, а это значит, что прыжок к метке тоже можно использовать в качестве аргумента. К примеру, удалить текст, начиная от текущего положения курсора до метки «a»: d`a.

К слову, команды удаления Vim не удаляют текст безвозвратно, а помещают его в буфер (в терминологии Vim — регистр), поэтому стандартными средствами здесь можно делать вещи, для которых в других редакторах потребовался бы отдельный хоткей. Например, менять две строки местами: ddp. Команда dd удаляет текущую строку (после чего курсор перемещается на следующую), p (paste) — вставляет текст из регистра под текущей строкой.

Вместо удаления строку можно просто скопировать с помощью yy (y — yank), а затем вставить с помощью все той же команды p. Объединим эту возможность с повторением команд и получим быстрый способ вставки множества одинаковых строк: yy10p.

Нарисовать линию ———- можно так: вводим символ -, затем переключаемся в обычный режим с помощью Esc и вводим команду x10p (x вырезает символ под курсором, 10p вставляет его десять раз).

Команда . выполнит предыдущую команду. И да, ее тоже можно зациклить: 3. — повторить предыдущую команду три раза. Команда qa начнет запись макроса с именем «a», остановить запись можно нажатием q. Выполнить макрос: @a.

Vim поддерживает огромное количество других команд, и первое время ты будешь теряться в том, как и что здесь работает. Однако большая часть функций тебе не понадобится. Ты должен заучить базовые команды модификации текста (удаление, вставка и так далее) и базовые команды перемещения (прыжки по словам, строкам, абзацам, блокам кода, меткам и прочему). Просто объединяй их, и ты сможешь сделать практически все в несколько нажатий кнопок.

 

Почему редактор Vim такой суровый?

Перейдем к темной стороне Vim, к крутой кривой обучения:

редактор Vim

и к недружелюбности:

редактор Vim

Несмотря на то, что эти проблемы несколько преувеличены, они все-таки существуют. Есть по крайней мере 3 вещи, которые этому способствуют:

  1. Необходимо умение печатать вслепую.
  2. Управление полностью с клавиатуры.
  3. Ужасное первое впечатление.

Слепая печать в Vim

Без умения печатать вслепую совершать основные действия вы будете трудно и мучительно медленно. Поэтому если вы очень хотите покорить редактор Vim, начните со слепой печати. Вот несколько хороших ресурсов:

  • typing.com
  • keyzen.io
  • zType
  • Клавогонки

Управление с клавиатуры в Vim

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

Лучший совет – начинайте с основ и постепенно расширяйте словарный запас:

  • справка – :help {любая команда} или просто :h {любая команда};
  • перемещение – hjkl (:h movement или :h motion);
  • перейти в режим вставки текста – i (:h insert);
  • вернуться в нормальный режим – (:h mode-switching);
  • сохранить файл – :w (:h write);
  • выйти из редактора – :q (:h quit);
  • открыть файл – :e {filepath} (:h edit).

Обратите внимание на двоеточие перед большинством команд. Оно вызывает командный режим (ex mode).

Самый простой способ изучить редактор Vim – совместить его с вашим уютным редактором с помощью vim-режима. Так вы не попадете в положение Робинзона Крузо, сохраните все возможности обычного редактора и получите преимущества Vim.

Сложнее всего будет не выучить команды, а запомнить их на уровне инстинктов. Тут дело за практикой. Если вы будете регулярно практиковаться, изучая новые комбинации, то быстро станете vim-мастером. Вот вам несколько полезных ресурсов для практики:

  • vimtutor – небольшой встроенный учебник. Просто введите в терминале vimtutor (в neovim – :vimtutor).
  • «Рогалики» – текстовые 2D RPG, в которых вы перемещаете персонажа с помощью тех же клавиш hjkl и учитесь лучше контролировать клавиатуру.
  • Vim Adventures – увлекательная vim-игра.

Плохое первое впечатление от Vim

Последний оплот суровости Vim – ужасное первое впечатление. Вы набираете vim (или mvim для Mac GUI, или gvim для Windows, UNIX GUI) – добро пожаловать:

редактор Vim

Вот с этого бледного экрана вы начинаете работу с лучшим в мире редактором. Откройте файл – нет подсветки синтаксиса:

редактор Vim

Очень неуютно, на этом моменте многие в ужасе убегают.

У вас может появиться соблазн использовать предварительно настроенную версию Vim. Безусловно, первое впечатление в этом случае будет лучше, но так вы не поймете, как настроен ваш инструмент, упустите самую суть. Это будет просто черный ящик.

Если вы не чувствуете в себе сил покорять редактор Vim, попробуйте что-нибудь из следующего:

  • Установите neovim – он проще и приятнее во многих отношениях.
  • Пройдите vimtutor.
  • Поиграйте с vim-плагином в привычном вам редакторе.
  • Настройте редактор Vim под себя – на vim-sensible или vim wiki вы можете найти удобную конфигурацию.
  • Подключите нужные плагины (с vim awesome) с помощью менеджера расширений (например, vundle, vim-plug, pathogen или minpac).
  • Практикуйтесь.

Минимальные основы Vim

На данный момент существует две версии редактора — vi и vim. Vim расшифровывается как Vi Improved, улучшенный vi. Это новая версия, которая принесла очень много улучшений. В большинстве современных дистрибутивов используется именно она. Поэтому если я буду писать vi, это значит, что я предполагаю использование vim.

Текстовый редактор Vim может работать в двух режимах. Это и есть его главная особенность. Первый режим, который используется по умолчанию при открытии редактора — это командный. В этом режиме вы можете вводить команды vi, а также использовать символьные клавиши для управления редактором. Второй режим — обычное редактирование текста, он работает так же как и редактирование текста в nano. Для переключения в командный режим используется клавиша Esc. Для переключения в режим редактирования — клавиша i. Если вас интересует только как в редакторе vi сохранить и выйти, листайте вниз, но если вы хотите узнать как пользоваться текстовым редактором vim, эта статья для вас.

Перед тем как идти дальше я бы посоветовал вам пройти курс обучения встроенный в редакторе. Выполнение всех обучающих заданий займет 25-30 минут. Но после того как вы освоите все что там написано, эта статья поможет вам закрепить материал. Дело в том, что команд и сочетаний клавиш у vim очень много и запомнить их все без практики невозможно. Для запуска обучения наберите:

vimtutor

Но делать это сейчас необязательно, в этой статье есть вся необходимая базовая информация и после ее прочтения вы уже сможете уверенно пользоваться vim, а обучение пройти чуть позже.

Как использовать редактор Vim

Начнем мы, как обычно с запуска программы, а также опций, которые ей можно передать. Синтаксис Vim очень прост:

$ vimопцииимя_файла

Или:

$ vi опцииимя_файла

Простой запуск vim без указания имени файла приведет к созданию пустого файла. А теперь давайте рассмотрим основные опции запуска:

  • +номер — переместить курсор к указной строке после запуска.
  • +/шаблон — выполнить поиск по шаблону и переместить курсор к первому вхождению
  • «+команда» — выполнить команду после запуска программы
  • -b — двоичный режим, для редактирования исполняемых файлов.
  • -d — режим поиска различий в файлах, нужно указать несколько файлов для открытия.
  • -g — графический режим.
  • -n — не использовать автосохранение для восстановления файла при сбое.
  • -R — режим только для чтения.
  • -w — сохранить все действия в файл.
  • -x — шифровать файл при записи.
  • -C — режим совместимости с Vi.

Круто, правда? Но это только начало. Опции ничего по сравнению с командами редактора.

Установка редактора Vim

Редактор есть практически в любом стандартном репозитории каждого дистрибутива Linux. Воспользуйтесь своим установщиком пакетов (например, yum для CentOS):

sudo yum install vim

После этого vim должен корректно установиться.

Запуск Vim

Если не указывать никаких агрументов открывается пустой файл. В зависимости от вашего дистрибутива могут присутствовать представление и информация о лицензии.
Когда вы начнете пользоваться редактором, они пропадут. Чтобы открыть файл, укажите его имя. Например, далее мы создадим файл “newfile” и откроем его в vim.

Создание файла:

echo «Это новый файл. Вот вторая строчка, А это третья. Здесь ещё немного текста. Мы будем работать с этим файлом. Это будет очень здорово.» >> newfile

Открытие файла при помощи vim:

vim newfile

Быстрый старт Vim

Открываем файл в текстовом редакторе командой vi /путь/имя_файла, например:

sudo vi /etc/netplan/99-netcfg-vmware.yaml

Команда sudo используется в том случае, если для открытия файла нужны повышенные привилегии (например, редактирование системных конфигурационных файлов). Указанный файл откроется в текстовом редакторе:

Команда sudo
Скриншот №1. Команда sudo

Перемещаем курсор по тексту с помощью стрелок или клавиш h (влево), l (вправо), j (вниз), k (вверх) до нужного места в тексте.

Переводим открытый файл в режим редактирования текста нажатием клавиши i (раскладка клавиатуры должна быть англоязычной). В результате в нижней части экрана появится индикация режима работы — INSERT:

Режим редактирования текста
Скриншот №2. Режим редактирования текста

Вносим в текст необходимые корректировки.

Выходим из режима редактирования нажатием клавиши Esc — индикатор INSERT в нижней части экрана должен исчезнуть.

Теперь необходимо закрыть файл, сохранив внесенные изменения. Для этого набираем:

:wq

Данный набор символов также должен отобразиться в нижней части окна. Буква w помогает сохранить файл на диск (write), q — завершить работу редактора (quit):

Сохранение изменений в файле
Скриншот №3. Сохранение изменений в файле

Если же что-то пошло не так и вам необходимо закрыть редактор не сохраняя изменения в файле, просто введите команду:

:q!

Дальше — больше

Приведенной выше информации вполне достаточно, чтобы открывать, редактировать и сохранять файлы в текстовом редакторе Vim, однако у него есть возможности, которые могут существенно упростить и ускорить работу. Стоит начать с пояснения: Vi был одним из первых визуальных текстовых редакторов, однако начиная с определенной версии программный продукт стал доступен только под коммерческой лицензией. Энтузиасты начали разрабатывать свои аналоги этого текстового редактора, одним из которых является Vim (сокращение от Vi Improved — Vi  усовершенствованный). Vim получил широкое распространение в *nix-дистрибутивах и при запуске команды vi в консоли вероятнее всего откроется именно он.

Прежде всего нужно понять, что Vim может работать в нескольких режимах, каждый из которых обладает своими особенностями и набором поддерживаемых функций. Сразу после запуска редактора вы окажетесь в обычном режиме (normal). Здесь можно не только перемещать курсор по тексту, но и выделять/удалять/копировать/вставлять как отдельные символы, так и целые блоки текста. Эти задачи выполняются нажатием соответствующих букв и цифр (причем регистр букв имеет значение), точка отсчета — текущее положение курсора. Рассмотрим навигацию по файлу:

  • h — смещение курсора на один символ влево;
  • j — смещение курсора на один символ вниз;
  • k – смещение курсора на один символ вверх;
  • l – смещение курсора на один символ вправо;
  • w – смещение курсора в начало следующего слова в данной строке;
  • b – смещение курсора в начало предыдущего слова в данной строке;
  • G – переместить курсор в конец файла;
  • gg – вернуться в начало файла.

Действия навигации также можно совмещать с цифрами, например, комбинация 3w сместит курсор вперед на три слова, а 5k на пять строк вверх.

Часто используемые операции c текстом:

  • x — удалить символ под курсором;
  • d — удалить символы/строки;
  • dd — удалить строку целиком;
  • D — удалить символы от текущего положения курсора до конца строки;
  • v — включить режим выделения текста;
  • y — скопировать символы/строки;
  • yy — скопировать строку целиком;
  • p — вставить символы/строки;
  • u — отменить последнее действие.

Функции удаления и копирования требуют дополнительного пояснения, ведь при нажатии d или y вроде бы ничего не происходит. Дело в том, что редактор ожидает дальнейших указаний — сколько строк символов нужно удалить/скопировать и в каком направлении от текущего положения курсора вести отсчет. Чтобы удалить пять символов вправо от курсора, нужно последовательно нажать d5l, чтобы скопировать три строки, следующие после курсора — y5j. Если имеется выделенный текст, для его копирования достаточно нажать y.

Имеется в Vim и функция поиска:

  • /шаблон — все вхождения набора символов, указанного после / (слэша) будут подсвечены в тексте;
  • n — сместить курсор к следующему вхождению;
  • N — сместить курсор к предыдущему вхождению.

Другой режим работы Vim — режим редактирования. Переключиться в него можно несколькими способами:

  • i — режим вставки (INSERT), ввод начинается с позиции курсора;
  • a — режим вставки (INSERT), ввод начинается с позиции, следующей за курсором;
  • A — режим вставки (INSERT), курсор перемещается в конец текущей строки;
  • R — режим замены (REPLACE), все вводимые символы будут последовательно заменять находящиеся под курсором.

Если нужно заменить всего один символ, находящийся под курсором, достаточно нажать r и нужный символ — замена будет произведена без перехода в режим редактирования. Внизу экрана появляется соответствующий индикатор режима — INSERT или REPLACE. Вернутся в общий режим можно нажатием кнопки Esc (индикатор должен пропасть).

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

  • :q — выйти из редактора;
  • :q! — выйти из редактора без сохранения изменений в файле;
  • :w — сохранить изменения в файл;
  • :wq — сохранить изменения и закрыть редактор;
  • :r имя_файла — добавить содержимое указанного файла в редактируемый;
  • :r! команда_консоли — выполнить команду и добавить ее вывод в файл.

И еще кое-что

В данной статье рассмотрены часто употребляемые функции Vim, которых на самом деле гораздо больше. Чтобы закрепить навыки работы с редактором, освежить в памяти его возможности или узнать что-то новое, набираем в консоли команду vimtutor и проходим курс обучения (vimtutor ru — если предпочтителен русский язык):

Курс обучения

Режимы работы Vim

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

Нормальный режим

Режим по умолчанию, в котором vim находится после запуска. Применяется для быстрой навигации по документу и редактирования: в нем можно копировать, вставлять, перемещать, удалять и изменять текст. Переход из других режимов осуществляется нажатием клавиши «escape». Для набора текста не используется.

Режим вставки

Для набора текста нужно перейти в режим “вставки”. Он похож на интерфейс набора текста многих других программ. Вводимый вами текст появляется на экране в документе, каждая клавиша соответствует своему символу. Перейти в этот режим можно следующим образом:

i — в текущем положении курсора
a — на следующем символе после текущего положения
I — в начале текущей строки
A — в конце текущей строки

Режим визуального выделения

Позволяет визуально выделять текстовые фрагменты. Затем к ним можно применять команды нормального режима для редактирования или форматирования.

v — режим обычного (посимвольного) визуального выделения перемещением курсора вверх, вниз, влево или вправо

V — режим построчного визуального выделения. Строки выделяются целиком перемещением вверх или вниз

[ctrl]-v — режим блочного визуального выделения. Выделяется прямоугольный участок, который можно увеличивать и уменьшать. Позволяет выбирать фрагменты нескольких линий.

Командный режим Vim

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

Для перемещения используются такие команды:

  • h — на один символ влево;
  • l — на один символ вправо;
  • j — на одну строку вниз;
  • k — на одну строку вверх;
  • w — на слово вправо;
  • b — на слово влево;
  • H — перейти в низ экрана;
  • G — перейти в конец файла;

Можете запустить редактор и поэкспериментировать, чтобы было легче понять как это работает. Если перед тем как нажать кнопку буквы нажать цифру, то эта команда будет повторена несколько раз. Например, 3j переведет курсор на три строки вверх.

Для переключения в режим редактирования используются такие команды:

  • i — вставить текст с позиции курсора, символ под курсором будет заменен;
  • I — вставить текст в начало строки;
  • a — добавить текст начиная от позиции курсора;
  • o — вставить новую строку после этой и начать редактирование;
  • O — вставить новую строку перед этой и начать редактирование;
  • r — заменить текущий символ;
  • R — заменить несколько символов.

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

Более сложны команды редактирования текста. Вы можете править текст не только в обычном режиме, но и в командном с помощью команд. Для этого применяются такие команды:

  • d — удалить символ;
  • dd — удалить всю строку;
  • D — удалить символы начиная от курсора и до конца строки;
  • y — копировать символ;
  • yy или Y — скопировать всю строку;
  • v — выделить текст;

Эти команды редактора vim работают немного по-другому после нажатия одной из них ничего не произойдет. Мы еще можем задать количество символов, к которым будет применена команда и направление, с помощью кнопок перемещения курсора. Например, чтобы удалить два символа справа от курсора нажмите d3l, а чтобы удалить три строки вниз — d3j. Команды yy, dd, Y — не что иное, как сокращения.

Кроме этих команд, есть еще несколько полезных, которые мы не можем не рассмотреть:

  • p — вставить после позиции курсора;
    P — вставить перед позицией курсора;
  • u — отменить последнее действие;
  • . — повторить еще раз последнее действие;
  • U — отменить последнее действие в текущей строке;
  • /шаблон — искать вхождение;
  • %s/шаблон/заменить — заменить первое слово на второе;
  • n — продолжить поиск вперед;
  • N — продолжить поиск назад;

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

Командная строка Vim

Командная строка Vim запускается в командном режиме нажатием двоеточия — «:«. Здесь доступны команды для сохранения файла и выхода из редактора, настройки внешнего вида и взаимодействия с внешней оболочкой. Рассмотрим наиболее часто используемые команды редактора vim:

  • :w — сохранить файл;
  • :q — закрыть редактор;
  • :q! — закрыть редактор без сохранения;
  • :e файл — прочитать содержимое файла в позицию курсора;
  • :r файл — вставить в содержимое файла в следующую строку;
  • :r! — выполнить команду оболочки и вставить ответ в редактор;
  • :set переменная=значение — установить значение переменной, например, tabstop=4, или set number, с помощью этой команды можно управлять многими аспектами работы vim.
  • :buffers — посмотреть открытые файлы.

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

Перемещение

Вы всегда можете передвигаться по документу стрелками, но vim предоставляет более быстрый и удобный способ. В нормальном режиме для навигации применяются следующие клавиши:

h — перемещение влево
j — перемещение вниз
k — перемещение вверх
l — перемещение вправо

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

Также есть дополнительные функции навигации, вот несколько наиболее важных:

gg — переход в начало документа
G — переход в конец документа. Если предварительно ввести номер — переместиться на строку с этими номером
w — перемещение к следующему слову. Если предварительно ввести количество — переместиться на это количество слов
b — перемещение к предыдущему слову. Если предварительно вввести количество — переместиться на это количество слов назад
e — перемещение к концу слова. Если предварительно указать количество — переместиться на указанное количество слов
0 — перемещение к началу строки
$ — перемещение к концу строки

Редактирование файла в Vim

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

vim имя_файла

Затем, если вы не хотите пока использовать возможности командного режима просто нажмите i, чтобы перейти в режим редактирования. Здесь вы можете редактировать файл так же, как и в nano. После того как завершите нажмите Esc, чтобы перейти в командный режим и наберите :wq. Записать и выйти. Все, готово.

Выход из Vim

Выход без сохранения изменений:

:q!

Как запомнить: quit dammit! (закройся, чёрт возьми!)

Выход с сохранением изменений:

:wq

Как запомнить: write to disk and quit

Основные команды редактора vi

Запуск редактора vi

В следующей таблице перечислены основные команды для использования редактора vi —

Sr.No. Команда и описание

1 vi имя файла

Создает новый файл, если он уже не существует, в противном случае открывает существующий файл.

2 vi -R имя файла

Открывает существующий файл в режиме только для чтения.

3 просмотреть имя файла

Открывает существующий файл в режиме только для чтения.

vi имя файла

Создает новый файл, если он уже не существует, в противном случае открывает существующий файл.

vi -R имя файла

Открывает существующий файл в режиме только для чтения.

просмотреть имя файла

Открывает существующий файл в режиме только для чтения.

Ниже приведен пример создания нового файла тестового файла, если он уже не существует в текущем рабочем каталоге.

$vi testfile

Приведенная выше команда сгенерирует следующий вывод:

| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ «testfile» [New File]

Вы заметите тильду (~) в каждой строке, следующей за курсором. Тильда представляет собой неиспользованную линию. Если строка не начинается с тильды и кажется пустой, имеется пробел, табуляция, новая строка или какой-либо другой невидимый символ.

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

Команды позиционирования курсора

Команда — Действие командыПозиционирование на символ<td>;Позиционирование на строкуПозиционирование на словоПозиционирование на предложениеПозиционирование на параграфПозиционирование в окне

h Перемещает курсор на один символ влево
l Перемещает курсор на один символ вправо
BACKSPACE Перемещает курсор на один символ влево
SPACEBAR Перемещает курсор на один символ вправо
fx Осуществляет поиск указанного символа x справа от текущей позиции
курсора
Fx Осуществляет поиск указанного символа x слева от текущей позиции
курсора
tx Осуществляет перемещение курсора вправо на символ до указанного
символа x
Tx Осуществляет перемещение курсора влево на символ до указанного
символа x
Повторяет предыдущий поиск символа. Команда ; запоминает символ
и ищет следующее появление символа в текущей строке
, Повторяет предыдущий поиск символа, но в обратном направлении
j Перемещает курсор вниз на одну строку
k Перемещает курсор вверх на одну строку
Перемещает курсор на одну строку вверх, позиционируя его на первом
ненулевом символе
+ Перемещает курсор вниз на одну строку и позиционирует на первый
непустой символ
Перемещает курсор вниз на одну строку и позиционирует на первый
непустой символ
$ Переместить курсор на последний символ в строке
0(ноль) Переместить курсор на первый символ в строке
^ Переместить курсор на первый ненулевой символ в строке
w Перемещает курсор к началу следующего слова
W Игнорирует все знаки пунктуации и перемещает курсор на следующее
после пробела слово
e Перемещает курсор на последний символ в следующем слове
E Перемещает курсор на последний символ в слове. Игнорирует все символы
пунктуации за исключением пробела
b Перемещает курсор к первому символу предыдущего слова
B Используется подобно команде b, за исключением того, что слова
разделяются только символами пробел и новая строка
( Перемещает курсор в начало текущего предложения
) Перемещает курсор в начало следующего предложения
{ Переместить курсор в начало текущего параграфа, который ограничивается
пустой строкой
} Переместить курсор в начало следующего параграфа
H Переместить курсор к первой строке экрана
M Переместить курсор к средней строке экрана
L Переместить курсор к последней строке экрана

Статус

:.= Номер текущей строки
:= Количество строк в файле
CTRL-G Имя файла, номер строки, общее число строк и положение в файле (%)
l Спецсимволы в текущей строке: tab (^l), backslash (), backspace (^H), newline ($), bell (^G), formfeed (^L^)

Режимы

VI работает в командном режиме и режиме ввода. Сразу после запуска редактор находится в командном режиме, в котором можно перемещаться по тексту, выполнять копирование и вставку текста из буфера. Режим ввода включается по командам вставки, дополнения, замены. Нажатие [ESC] возвращает редактор в командный режим. Большинство команд выполняется сразу после нажатия клавиши. Исключение — команды, начинающиеся с двоеточия, которые выполняются после нажатия [Return].

Дополнительные команды перемещения курсора в редакторе vi

Команда — ДействиеПозиционирование с помощью номера строкиПоиск по шаблону

^f Прокрутка экрана вперед на полное окно. Откры- вается новое окно
с текстом, расположенным ниже текущего окна
^d Прокрутка текста вниз на пол-окна. Открываются строки, расположенные
ниже текущего окна
^b Прокрутка экрана назад на полное окно. Откры- вается новое окно
с текстом, расположенным выше текущего окна
^d Прокрутка текста вверх на пол-окна. Открываются строки, расположенные
выше текущего окна
1G Перейти к первой строке в файле
G Перейти к последней строке в файле
^g Выдать номер строки и состояние файла
/pattern Поиск вперед в буфере до первого появления шаблона. Курсор помещается
на первом символе шаблона
?pattern Поиск назад в буфере до первого появления шаблона. Курсор помещается
на первом символе шаблона
n Повторить последнюю команду поиска
N Повторить последнюю команду поиска в обратном направлении

Команды создания текста

Команда — Функция

a Создать текст после курсора
A Создать текст в конце текущей строки
i Создать текст перед курсором
I Создать текст перед первым ненулевым символом в текущей строке
o Создать текст с начала новой строки, расположенной под текущей
строкой
O Создать текст с начала новой строки, расположенной над текущей
строкой
Возвратить vi в командный режим из режима ввода текста

Вставка текста

i Вставка перед курсором
I Вставка перед строкой
a Добавление за курсором
A Добавление после строки
o Новая строка после текущей
O Новая строка перед текущей
r Заменить символ на символ
R Замена символов (режим замены)
CTRL-v char вставка управляющих символов (например, ESC и CTRL) до нажатия ESC
Внимание: коды CTRL-Q и CTRL-S обрабатываются операционной системой до передачи VI, поэтому их ввести невозможно.
:r file Вставить содержимое file после текущей строки
:nr file Вставить содержимое file после строки n
В режиме ввода:
CTRL-i или TAB Вставить смещение вправо на shift width
CTRL-d Уменьшить смещение вправо на shift width
CTRL-h или Backspace Удалить предыдущий символ
CTRL-w Удалить предыдущее слово
CTRL-u Удалить предыдущую строку
CTRL-x Удалить от начала вставленного текста
CTRL-v Вставить следующий спецсимвол (т. е. для вставки CTRL-H нужно нажать CTRL-v CTRL-h)

Команды удаления текста

Команда — ФункцияРежим ввода

BACKSPACE Удалить текущий символ
1w Удалить текущее слово
@ Удалить текущую строку нового текста или удалить весь новый текст
в текущей строке Командный режим
u Отменить последнюю команду
U Восстановить текущую строку в прежнем состоянии
x Удалить текущий символ
ndx Удалить n-ый объект текста x
dw Удалить слово над курсором и следующий за ним пробел, или знак
пунктуации
dW Удалить слово и пунктуацию над курсором с последующим за ним пробелом
dd Удалить текущую строку
D Удалить часть строки справа от курсора
d) Удалить текущее предложение от текущей позиции курсора до конца
d} Удалить текущий параграф от текущей позиции до конца

Команды изменения текста

Команда — Функция

r Заменить текущий символ
R Заменить те символы, которые введены в режиме ESCAPE
s Удалить символ, под которым расположен курсор и добавить текст.
Для окончания режима ввода нажмите клавишу ESCAPE
S Заменить все символы в строке
cc Заменить все символы в строке
ncx Заменить n объектов текста типа x (предложение, параграф)
cw Заменить слово или оставшиеся символы в слове на новый текст
C Заменить оставшиеся символы в строке от курсора до конца строки

Команда y

Команда — Функция

nyx Копирование n-го объекта текста типа x (предложение или параграф)
yw Создание копии слова
yy Создание копии текущей строки
nyy Копирование n строк
y) Создание копии всего текста до конца предложения
y} Создание копии всего текста до конца параграфа

Команды извлечения и присоединения текста

Команда — Функция

p Помещает содержимое временного буфера, полученное с помощью команды
y и команд удаления, в текст после курсора
yy Создает копию строки текста и помещает во временный буфер
nyx Создает копию n-го объекта текста типа x и помещает ее во временный
буфер
«xyn Помещает копию объекта текста типа n в в регистр с именем x
«xp Помещает содержимое регистра x после курсора

Специальные команды

Команда — Функция

. Повторить последнюю команду
j Соединить текущую строку со строкой, расположенной ниже
^l Очистить и восстановить текущее окно
~ Заменить нижний регистр на верхний

Удаление текста

Большинство команд удаления образуются из символа d и команды перемещения. Например, dw удаляет слово. Другие команды удаления:

x Удалить текущий символ
nx Удалить n символов вправо, начиная с текущего
X Удалить символ слева от курсора
nX Удалить n символов влево от курсора
D Удалить до конца строки
d$ Удалить от курсора до конца строки
dd или :d Удалить текущую строку
ndw Удалить следующие n слов, начиная с текущего
ndb Удалить предыдущие n слов, начиная с текущего
ndd Удалить следующие n строк, начиная с текущей
:n,md Удалить строки с n до m
dMotion_cmd Удалить все, что захватывает команда перемещения (например, dG удаляет текст от текущей позиции до конца файла, а d4 — до конца 4-го предложения).
«(a-z)ndd Вырезать n строк в именованный буфер (от a до z)
«(a-z)dd Вырезать текущую строку в именованный буфер (от a до z)
«np Отменить n-е из последних удалений (последние 9 удалений хранятся в буфере)
«1pu.u. Просмотр буфера удалений, пока не будет возвращено нужное (повторить — u.)

Буферы

Имя буфера может быть указано перед любой командой удаления, изменения, копирования или вставки. Префикс имеет вид «c, где c — любой символ нижнего регистра. Например, «adw удаляет слово и помещает его в буфер a. Затем его можно будет поместить в текст по команде «ap.

Вставка из буфера

p Поместить текст из буфера после курсора
P Поместить текст из буфера перед курсором
«(a-z)p или «(a-z)P Поместить текст из буфера (от a до z) после/перед текущей строкой

Перемещение внутри файла

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

Sr.No. Команда и описание

1 К

Перемещает курсор на одну строку вверх

2 J

Перемещает курсор вниз на одну строку

3 час

Перемещает курсор влево на одну позицию символа

4 L

Перемещает курсор на одну позицию вправо

К

Перемещает курсор на одну строку вверх

J

Перемещает курсор вниз на одну строку

час

Перемещает курсор влево на одну позицию символа

L

Перемещает курсор на одну позицию вправо

Следующие пункты необходимо учитывать для перемещения в файле —

  • vi чувствителен к регистру. Вы должны обратить внимание на использование заглавных букв при использовании команд.
  • Большинству команд в vi может предшествовать количество раз, когда вы хотите, чтобы действие произошло. Например, 2j перемещает курсор на две строки вниз по положению курсора.

vi чувствителен к регистру. Вы должны обратить внимание на использование заглавных букв при использовании команд.

Большинству команд в vi может предшествовать количество раз, когда вы хотите, чтобы действие произошло. Например, 2j перемещает курсор на две строки вниз по положению курсора.

Существует много других способов перемещения внутри файла в vi. Помните, что вы должны быть в командном режиме ( нажмите Esc дважды ). В следующей таблице перечислены несколько команд для перемещения по файлу.

Ниже приведен список команд для перемещения по файлу.

Sr.No. Команда и описание

1 0 или |

Позиционирует курсор в начале строки

2 $

Позиционирует курсор в конце строки

3 вес

Позиционирует курсор на следующее слово

4 б

Позиционирует курсор к предыдущему слову

5 (

Помещает курсор в начало текущего предложения

6 )

Помещает курсор в начало следующего предложения

7 Е

Перемещается в конец пустого слова с разделителями

8 {

Перемещает абзац назад

9 }

Перемещает абзац вперед

10 [[

Перемещает раздел назад

11 ]]

Перемещает раздел вперед

12 п |

Перемещается в столбец n в текущей строке

13 1G

Перемещается на первую строку файла

14 г

Перемещается на последнюю строку файла

15 НГ

Перемещается на n- ю строку файла

16 : п

Перемещается на n- ю строку файла

17 Ь

Движется вперед к

18 Fc

Перемещается обратно в c

19 ЧАС

Перемещается в верхнюю часть экрана

20 нГн

Перемещается на n- ю строку сверху экрана

21 M

Перемещается в середину экрана

22 L

Перейти к нижней части экрана

23 нл

Перемещается на n- ю строку снизу экрана

24 :Икс

Двоеточие, сопровождаемое числом, поместило бы курсор на номер строки, представленный x

0 или |

Позиционирует курсор в начале строки

$

Позиционирует курсор в конце строки

вес

Позиционирует курсор на следующее слово

б

Позиционирует курсор к предыдущему слову

(

Помещает курсор в начало текущего предложения

)

Помещает курсор в начало следующего предложения

Е

Перемещается в конец пустого слова с разделителями

{

Перемещает абзац назад

}

Перемещает абзац вперед

[[

Перемещает раздел назад

]]

Перемещает раздел вперед

п |

Перемещается в столбец n в текущей строке

1G

Перемещается на первую строку файла

г

Перемещается на последнюю строку файла

НГ

Перемещается на n- ю строку файла

: п

Перемещается на n- ю строку файла

Ь

Движется вперед к

Fc

Перемещается обратно в c

ЧАС

Перемещается в верхнюю часть экрана

нГн

Перемещается на n- ю строку сверху экрана

M

Перемещается в середину экрана

L

Перейти к нижней части экрана

нл

Перемещается на n- ю строку снизу экрана

:Икс

Двоеточие, сопровождаемое числом, поместило бы курсор на номер строки, представленный x

Маркеры

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

mc Установить на строку маркер c
`c К началу строки с маркером c
‘c К первому непробельному символу строки с маркером c

Копирование в буфер

Подобно командам удаления, большинство команд копирования в буфер состоят из символа y и команды перемещения. Например, y$ помещает в буфер конец строки.

yy или :y Копировать текущую строку
nyy или nY Копировать n строк
yMotion_cmd Копировать текст, захватываемый командой перемещения (например, yG копирует все от текущей позиции курсора до конца файла, а y4 — до конца текущего предложения)
«(a-z)nyy Копировать n строк в именованный буфер (от a до z)
«(a-z)yy Копировать текущую строку в именованный буфер (от a до z)

Удаление персонажей

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

Sr.No. Команда и описание

1 Икс

Удаляет символ под курсором

2 Икс

Удаляет символ перед положением курсора

3 с.в.

Удаляет от текущего местоположения курсора до следующего слова

4 d ^

Удаляет из текущей позиции курсора в начало строки

5 d $

Удаляет от текущей позиции курсора до конца строки

6 D

Удаляет от позиции курсора до конца текущей строки

7 дд

Удаляет строку, на которой находится курсор

Икс

Удаляет символ под курсором

Икс

Удаляет символ перед положением курсора

с.в.

Удаляет от текущего местоположения курсора до следующего слова

d ^

Удаляет из текущей позиции курсора в начало строки

d $

Удаляет от текущей позиции курсора до конца строки

D

Удаляет от позиции курсора до конца текущей строки

дд

Удаляет строку, на которой находится курсор

Как упомянуто выше, большинству команд в vi может предшествовать количество раз, когда вы хотите, чтобы действие произошло. Например, 2x удаляет два символа под курсором, а 2dd удаляет две строки, на которых находится курсор.

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

Команды построчного редактора

КомандаФункция

: Обозначает, что следующая за ней команда является командой построчного
редактора
:sh Временный возврат к shell для выполнения команд shell
^d Возврат из временного shell в текущее окно vi для продолжения редактирования
:n Переход к n-ой строке буфера
:x,yw data Записать строки от номера x до номера y в новый файл data
:$ Переход к последней строке буфера
:.,$d Удалить все строки в буфере, начиная с текущей и до послед- ней
строки
:r shell.file Вставить содержимое shell.file после текущей строки в буфере
:s/text/new_words/ Заменить первое появление символов text в текущей строке на new_words
:s/text/new_words/g Заменить каждое появление символов text в текущей строке на new_words
:g/text/s//new_words/g Заменить каждое появление символов text в файле на new_words

Команды завершения

КомандаФункция

ZZ Записать буфер в файл, если после последней записи в буфере были
сделаны изменения, и завершить работу с vi
:wq Записать буфер в файл и завершить работу с vi
:w filename Записать буфер в новый файл filename
:q и завершить работу с vi
:w! filename Перезаписать содержимое буфера в уже
:q существующий файл filename и завершить работу с vi
:q! Завершить работу с vi без записи буфера в файл, даже если содержимое
буфера изменялось
:q Завершить работу с vi без записи буфера в файл, если буфер не изменялся

Специальные опции vi

Опция — Функция

vi file1 file2 file3 Ввести три файла (file1 file2 и file3) в буфер vi для редактирования
:w Записать текущий файл и начать
:n редактирование следующего файла
vi -r file1 Восстановить изменения, сделанные в файле file1
view file Осуществить просмотр файла с помощью опции «только чтение» чтобы
предотвратить случайные изменения в файле file

Другие способы просмотра файлов

vi позволяет нам редактировать файлы. Кроме того, мы можем использовать его для просмотра файлов. Надо признать, есть две другие команды, которые немного более удобны для этой цели. Во-первых, cat, который на самом деле означает конкатенацию. Ее основная цель — объединить файлы, но в своей основной форме это полезно для просмотра файлов.

cat <файл>

Запустив команду cat с одним аргументом командной строки, можно увидеть содержимое файла на экране, а затем появится подсказка.

Если вы случайно запустили cat без указания аргумента командной строки, вы заметите, что курсор перемещается на следующую строку, а затем ничего не происходит. Если вы наберете что-то, нажмите , вы увидите cat зеркально отразит ваш ввод на экране. Чтобы выйти отсюда, следует нажать + c, который является универсальным сигналом для отмены в Linux.

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

cat <файл>. Другие способы просмотра файлов

Эта команда хороша, когда у нас есть маленький файл для просмотра.

А если файл большой? Основная часть контента будет летать по экрану, и мы увидим только последнюю страницу контента. Для больших файлов лучше подходит команда, less.

less <файл>

less позволяет перемещаться вверх и вниз по файлу с помощью клавиш со стрелками. Вы можете перейти вперед на целую страницу с помощью пробела или назад на страницу, нажав b. При завершении, следует нажать q для выхода.

 

Сохранение и выход

Есть несколько способов сделать данный маневр. Для начала убедитесь, что вы находитесь в режиме редактирования.

Если вы не уверены, находитесь ли вы в режиме редактирования можно посмотреть в нижнем левом углу. В качестве альтернативы вы можете просто нажать Esc, чтобы быть уверенным. Если вы уже находитесь в режиме редактирования, нажатие клавиши « Esc» ничего не делает, поэтому вы не причините вреда.

  • ZZ — Сохранить и выйти
  • :q! — отменить все изменения, начиная с последнего сохранения, и выйти
  • : w — сохранить файл, но не выходить
  • : wq — снова сохранить и выйти

Большинство команд в vi выполняются, как только вы нажимаете последовательность клавиш. Любая команда, начинающаяся с двоеточия (:), требует, чтобы вы нажали для завершения команды.

Когда не стоит учить вим

  • Если вас целиком устраивают обычные редакторы
  • При недостаточном владении слепой печатью
  • Вы не готовы возиться с конфигурацией, а хотите чтобы редактор просто работал
  • Вы емаксер (тогда учите spacemacs)

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

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

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

Для повышения своей эффективности необходимо постоянно наблюдать за своими действиями, отслеживать те, что занимают слишком времени, читать статьи и книги в поисках новых способов решения старых проблем. Такой подход, конечно же, важен не только при работе с вимом и даже не только в программировании, но именно в виме по-другому успеха достичь невозможно. Во время обучения нельзя себе давать слабину и действовать из принципа «сейчас сделаю хоть как-нибудь, а потом разберусь». Незаметно для вас сформируются неправильные привычки и дальнейший рост остановится. Если вы к этому не готовы, то изучение стоит отложить.

[spoiler title=»Источники»]
  • https://proglib.io/p/exploring-vim/
  • https://KtonaSoft.ru/vim/
  • http://zuxcel.com/vim/
  • https://guides.hexlet.io/vim/
  • https://habr.com/ru/post/30058/
  • https://xakep.ru/2017/10/03/vim/
  • https://losst.ru/kak-polzovatsya-tekstovym-redaktorom-vim
  • https://ITProffi.ru/redaktor-vim-kak-polzovatsya-instruktsiya-komand/
  • https://serverspace.by/support/help/shpargalka-po-vim/
  • https://tproger.ru/translations/vim-for-beginners/
  • https://coderlessons.com/tutorials/stsenarii/uchitsia-unix/unix-linux-rukovodstvo-po-redaktoru-vi
  • https://alexnettm.com/freebsd/osnovnye-komandy-redaktora-vi.html
  • https://appledu.ru/linux-os/spravka-po-redaktoru-vi
  • https://remoteshaman.com/unix/common/polnaya-reference-at-vi-redaktoru
  • https://linuxvsem.ru/commands/vi-cat-lass-commands
[/spoiler]