Vim как изменить текст

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

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

В операционной системе Linux есть несколько текстовых редакторов, которые работают в терминале. Чаще всего новички используют редактор nano, но если вы заметили на нашем сайте во всех статьях используется текстовый редактор vi. Nano неудобный, и недостаточно функционален. Я сознательно не пишу в своих статьях о nano. Есть намного лучший текстовый редактор, это редактор vi. Здесь поддерживается быстрое перемещение по тексту, удобное редактирование, команды для изменения настроек работы, выполнение команд терминала из редактора, а также плагины для расширения функциональности. Но он немного сложный для новичков и очень непривычный.

В этой статье мы рассмотрим как пользоваться vim, рассмотрим основы работы с этим редактором, а также его основные команды.

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

vim имя_файла

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

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

На данный момент существует две версии редактора — 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, то команда vi будет ссылаться на исполняемый файл vim. В таком случае между этими командами нет разницы. Простой запуск vim без указания имени файла приведет к созданию пустого файла. А теперь давайте рассмотрим основные опции запуска:

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

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

1. Перемещение курсора

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

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

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

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

Очень часто возникает необходимость перейти в начало строки или в её конец. Команды Vim могут с этим помочь. Используйте команду ^ для того чтобы перейти в начало строки или команду $ для перехода в конец строки. Обратите внимание, что для того чтобы набрать эти команды нужно зажать Shift и нажать 4 или 6.

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

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

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

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

3. Удаление символов и строк

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

  • d — удалить символ;
  • dd — удалить всю строку;
  • D — удалить символы начиная от курсора и до конца строки.

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

4. Замена символов

В командном режиме вы можете не только удалять символы, но и заменять их на другие. Для этого существуют две команды:

  • r — заменить текущий символ;
  • R — заменить несколько символов.

Первая команда позволяет заменить один символ и вернутся в командный режим. Вторая команда будет заменять все символы, пока вы не вернетесь в командный режим нажатием клавиши Esc:

5. Отмена и повтор действий

В обычных текстовых редакторах вы можете использовать Ctrl+Z для отмены последних действий. В редакторе Vim есть собственная история действий. Она доступна в командном режиме. Если вы хотите отменить последнее изменение, просто нажмите u. Обратите внимание, что каждое следующее нажатие этой кнопки будет отменять предыдущее изменение сделанное в командном режиме. Например, если вы удалили один символ командой d, то он будет восстановлен.

Однако, если вы переключитесь в режим редактирования и сделаете там много изменений, а потом вернетесь в командный режим, то все эти изменения будут рассматриваться как одно. Если вы случайно отменили что-то важное, то можете повторить действие, нажав Ctrl+r:

Вот некоторые команды для отмены и повтора действий:

  • u — отменить последнее действие;
  • U — отменить последнее действие в текущей строке;
  • . — повторить последнее действие;
  • Ctrl+r — отменить отмену последнего действия.

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

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

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

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

7. Выделение и буфер обмена

Текстовый редактор Vim поддерживает выделение текста без использования мышки. Поэтому вы можете копировать и вставлять текст даже в TTY окружениях, без графического интерфейса. Нажмите v когда вы находитесь в командном режиме для перехода в режим выделения. Затем вы можете использовать кнопки перемещения курсора h, j, k, l для выделения нужных символов или строк:

Теперь вы можете выполнять какие-либо действия с выделенным текстом. Например, можно его удалить, нажав кнопку d. Для того чтобы сбросить выделение нажмите кнопку Esc. Это ещё не всё. У Vim есть свой буфер обмена, который можно использовать для копирования и вставки текста. Этот буфер обмена состоит из нескольких регистров. Если не задать иное, то все команды работают с буфером обмена по умолчанию. Вот основные команды для копирования и вставки текста:

  • y — скопировать в буфер обмена;
  • yy or Y — скопировать строку в буфер обмена;
  • x — вырезать в буфер обмена;
  • p — вставить из буфера обмена.

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

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

vim --version | grep clip

Если эта возможность поддерживается вы увидите +clipboard или +xterm_clipboard. Давайте вернемся к регистрам. В Vim есть несколько регистров буфера обмена и один из них связан с системным буфером обмена. Это регистр «+. Вы можете вывести все регистры и их содержимое с помощью команды:

:reg

Регистр с именем «» это тот самый буфер обмена, который используется по умолчанию. Если вы хотите скопировать текст в системный регистр, необходимо набрать имя регистра перед командой копирования. Например, нажмите «+ а затем y. Обратите внимание, что нужно использовать клавишу Shift для получения нужного символа. Надо нажать Shift+’ и Shift+=.

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

:let @+=@"

После этого вы сможете вставить текст в любом месте операционной системы.

8. Поиск и замена в Vim

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

Для поиска по всему файлу используйте команду /. После нее нужно ввести слово, которое нужно найти. Для поиска следующего вхождения используйте n, для предыдущего — N.

Вот основные команды для поиска:

  • f — найти один символ;
  • / — искать несколько символов;
  • n — найти следующее вхождение;
  • N — найти предыдущее вхождение.

Для замены будет использоваться немного другая конструкция:

:%s/искать/заменить/g

Например, давайте заменим все вхождения слова Alice на Robert:

:%s/Alice/Robert/g

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

9. Редактирование нескольких файлов

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

vim /etc/default/grub /etc/default/cron

Редактор vim linux откроет первый файл, для переключения ко второму используйте команду :n, чтобы вернутся назад :N. С помощью команды :buffers вы можете посмотреть все открытые файлы, а командой :buffer 1 переключится на первый файл.

10. Кириллица в Vim

Кириллица в Vim работает превосходно. Но есть одно но, когда включена кириллица в системе, все команды vim не работают, им и не нужно работать, они же не приспособлены для кириллицы.

Но переключать каждый раз раскладку, когда работаете в командном режиме тоже не очень удобно, поэтому открываем файл ~/.vimrc и добавляем туда такие строки:

set keymap=russian-jcukenwin
set iminsert=0
set imsearch=0

Теперь раскладка клавиатуры в командном режиме переключается по Ctrl+^ и все команды работают.

Выводы

В этой статье мы рассмотрели как пользоваться текстовым редактором vim. Это еще далеко не все его возможности, но теперь вы можете уверенно обращаться с редактором и забыть о nano. Более подробно о настройке Vim читайте тут. А вы уже пользуетесь Vim? Или другим редактором? Напишите в комментариях!

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

В этой статье описывается, как найти и заменить текст в Vim / Vi.

Vim — самый популярный текстовый редактор командной строки. Он предустановлен в macOS и большинстве дистрибутивов Linux. Найти и заменить текст в Vim быстро и легко.

Базовый поиск и замена

В Vim вы можете найти и заменить текст с помощью команды :substitute ( :s ).

Чтобы запускать команды в Vim, вы должны находиться в обычном режиме, который используется по умолчанию при запуске редактора. Чтобы вернуться в обычный режим из любого другого режима, просто нажмите клавишу «Esc».

Общая форма команды замены следующая:

:[range]s/{pattern}/{string}/[flags] [count]

Команда ищет в каждой строке в [range] {pattern} и заменяет его {string} . [count] — положительное целое число, умножающее команду.

Если не [range] и [count] , заменяется только шаблон, найденный в текущей строке. Текущая строка — это строка, в которой находится курсор.

Например, чтобы найти первое вхождение строки ‘foo’ в текущей строке и заменить его на ‘bar’, вы должны использовать:

:s/foo/bar/

Чтобы заменить все вхождения шаблона поиска в текущей строке, добавьте флаг g

:s/foo/bar/g

Если вы хотите найти и заменить шаблон во всем файле, используйте процентный символ % в качестве диапазона. Этот символ указывает диапазон от первой до последней строки файла:

:%s/foo/bar/g

Если часть {string} опущена, она рассматривается как пустая строка, и соответствующий шаблон удаляется. Следующая команда удаляет все экземпляры строки ‘foo’ в текущей строке:

:s/foo//g

Вместо символа косой черты ( / ) можно использовать любой другой однобайтный символ, кроме буквенно-цифрового, кроме разделителя. Этот параметр полезен, если в шаблоне поиска или в строке замены есть символ «/».

:s|foo|bar|

Для подтверждения каждой замены используйте флаг c

:s/foo/bar/gc
replace with bar (y/n/a/q/l/^E/^Y)?

Нажмите y чтобы заменить совпадение, или l чтобы заменить совпадение и выйти. Нажмите n чтобы пропустить совпадение, и q или Esc чтобы выйти из замены. Параметр a заменяет совпадение и все оставшиеся вхождения совпадения. Для прокрутки экрана вниз используйте CTRL+Y , а для прокрутки вверх используйте CTRL+E

Вы также можете использовать регулярные выражения в качестве шаблона поиска. Приведенная ниже команда заменяет все строки, начинающиеся с ‘foo’ на ‘Vim is the best’:

:%s/^foo.*/Vim is the best/gc

Символ ^ (каретка) соответствует началу строки, а .* Соответствует любому количеству любых символов.

Чувствительность к регистру

По умолчанию операция поиска чувствительна к регистру; поиск «FOO» не будет соответствовать «Foo».

Чтобы игнорировать регистр для шаблона поиска, используйте флаг i

:s/Foo/bar/gi

Другой способ принудительно игнорировать регистр — добавить c после шаблона поиска. Например, /Linuxc выполняет поиск без учета регистра.

Если вы изменили настройку регистра по умолчанию и хотите выполнять поиск с учетом регистра, используйте флаг I

:s/foo/bar/gi

Верхний регистр C после шаблона также приводит к поиску совпадения по регистру.

Диапазон поиска

Если диапазон не указан, подстановочная команда работает только в текущей строке.

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

Например, чтобы заменить все вхождения ‘foo’ на ‘bar’ во всех строках, начиная со строки 3 по строку 10, вы должны использовать:

:3,10s/foo/bar/g

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

Точка . символ указывает на текущую строку и $ — доллар знак последней строки. Чтобы заменить ‘foo’ во всех строках, начиная с текущей и заканчивая последней:

:.,$s/foo/bar/

Спецификатор строки также может быть установлен с помощью символа «+» или «-», за которым следует число, которое добавляется или вычитается из номера предыдущей строки. Если число после символа опущено, по умолчанию используется 1.

Например, чтобы заменить каждое ‘foo’ на ‘bar’, начиная с текущей строки и четырех следующих строк, введите:

:.,+4s/foo/bar/g

Замена всего слова

Команда замены ищет образец как строку, а не целое слово. Если, например, вы искали «gnu», поиск совпадет с тем, что «gnu» встроено в слова большего размера, такие как «cygnus» или «magnum».

Для поиска всего слова введите < чтобы отметить начало слова, введите шаблон поиска, введите > чтобы отметить конец слова:

Например, для поиска слова «foo» вы должны использовать <foo> :

:s/<foo>/bar/

История замены

Vim отслеживает все команды, которые вы выполняете в текущем сеансе. Чтобы просмотреть историю предыдущих заменяющих команд, введите :s и используйте клавиши со стрелками вверх / вниз, чтобы найти предыдущую заменяющую операцию. Чтобы запустить команду, просто нажмите Enter . Вы также можете отредактировать команду перед выполнением операции.

Примеры

Строки комментариев (добавьте # перед строкой) от 5 до 20:

:5,20s/^/#/

Раскомментируйте строки с 5 по 20, отмените предыдущие изменения:

:5,20s/^#//

Замените все экземпляры «яблоко», «апельсин» и «манго» на «фрукты»:

:%s/apple|orange|mango/fruit/g

Удалите завершающие пробелы в конце каждой строки:

:%s/s+$//e

Вывод

Поиск и замена — это мощная функция Vim, которая позволяет быстро вносить изменения в текст.

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

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

Вы узнаете как:

  1. открывать файл в Vim, набирать текст, сохранять изменения и выходить из редактора,
  2. перемещаться по содержимому, выполнять поиск,
  3. отменять изменения,
  4. удалять, копировать и вставлять текст.

Дав команду vim в командной оболочке, вы увидите следующее (в зависимости от версии и установленного языка):

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

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

Чтобы все-таки начать ввод текста, следует нажать i на клавиатуре (обратите внимание, для срабатывания команд должна быть включена английская раскладка, если до этого не были выполнены соответствующие настройки Vim).

После этого вы окажитесь в режиме обычного редактирования текста, а конкретнее – в режиме вставки (insert), о чем редактор вам сообщит в строке состояния.

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

Завершив набор текста, нажмите Esc. Произойдет возврат в командный режим. Для большей уверенности можно нажать Esc два раза. После второго издается звук.

Сохранение файла и выход из Vim

Чтобы сохранить данные в файл, надо сначала переключиться в режим командной строки. Не путайте его с командным режимом (нормальным режимом)! Режим командной строки похож на работу в командной оболочке и унаследован Vim’ом от редактора ex.

Чтобы перейти в режим командной строки, надо в нормальном режиме дать команду :, то есть набрать двоеточие. Вы его сразу увидите в начале строки состояния. Далее для сохранения следует ввести букву w.

Вспомним, что мы запускали Vim без создания файла. Поэтому теперь после w через пробел надо указать имя файла (в случае необходимости – с адресом). Например, команда может выглядеть так: :w per001.py.

В режиме командной строки для выполнения команд надо нажимать Enter (в нормальном режиме во многих случаях в этом нет необходимости). В данном случае файл будет создан и записан.

Выход из Vim происходит по команде :q. Выход без сохранения изменений – :q!. После этого вы возвращаетесь туда, откуда запускали Vim (в соответствующий сеанс командной оболочки).

Чаще возникает необходимость в открытии, просмотре содержимого или правке существующего файла, или вы хотите сразу дать имя новому файлу. В этом случае в командной оболочке (например, Bash) дается команда вида vim адрес/имя_файла или просто vim имя_файла, если файл содержится в текущем каталоге.

При сохранении изменений в отредактированном файле в командной строке Vim дается просто команда :w. Если вы хотите сразу сохранить и выйти, то команда может выглядеть как :wq или :ZZ. (зажать Shift, потом два раза нажать z).

В случае необходимости сохранить изменения, оставив исходный файл без изменений (вариант "Сохранить как…"), в командной строке Vim дается команда :w новое_имя_файла.

Перемещение по файлу

В Vim для перемещения курсора по содержимому файла не обязательно, даже не нужно, переключаться в режим вставки (когда нажимается i). Следует оставаться в нормальном режиме.

Если вы владеете слепым методом печати на клавиатуре, то пальцы правой руки находятся на клавишах j, k, l и точке с запятой/двоеточии. Нажимая j, то есть наиболее удобным указательным пальцем, вы будете перемещать курсор вниз строка за строкой. Нажимая k, вверх. Клавиша l перемещает курсор вправо. Для перемещения влево необходимо сместить указательный палец на h и нажимать эту клавишу.

При выработке навыка перемещение с помощью h, j, k, l удобнее, но если вы планируете использовать Vim только в редких случаях, то перемещаться можно также с помощью стрелок клавиатуры.

В Vim часто используют числовые коэффициенты. Так, если в нормальном (командном) режиме набрать число 10 на клавиатуре, а затем нажать j, то курсор сместится сразу на 10 строчек вниз. При наборе числа вы будете видеть его в строке состояния редактора.

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

На предыдущем скрине, если после ввода числа 5 вместо команды j дать команду G, то курсор окажется в строке def func():, потому что она пятая по счету от начала файла.

В длинных текстовых файлах определить на глаз номер той или иной строки сложно. Чтобы в Vim включить нумерацию строк, следует в командной строке выполнить команду :set nu.

Отключение нумерации – :set nonu.

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

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

После нажатия n редактор Vim нашел в файле второе совпадение

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

Отмена изменений

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

Если надо отменить все изменения в текущей строке, дается команда U (Shift+u).

Команда :e! в командной строке Vim отменяет все изменения в файле. Если вы открыли файл и не сохраняли (:w) его в процессе редактирования, то его содержимое будет приведено к состоянию на момент открытия. Иначе, откат будет до момента сохранения. Другими словами, :e! — возврат к последней сохраненной версии файла.

Повтор изменений (откат вперед) – Ctrl+r.

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

Удаление, копирование и вставка

В Vim в нормальном (командном) режиме для удаления одного символа используется клавиша x. При этом удаляется символ, на котором стоит курсор.

Если нужно удалить несколько символов, то перед тем как нажимается x вводится числовой коэффициент.

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

Удаленный текст помещается в буфер обмена Vim и может быть потом вставлен в другое место файла. По-сути, удаление здесь – это вырезание.

Рассмотрим пример. Имеется файл с кодом:

print("hello")
a = 10
print(a)
    
def func():
    print('f')
    
func()

И мы хотим определение функции переместить в начало. Алгоритм действий может быть таким:

  1. С помощью j (или k) помещаем курсор в строку def func():.
  2. Выполняем команду 3dd. Удалятся три строки: сама функция и пустая строка после нее.
  3. Переходим в первую строку файла: 1G.
  4. Нажимаем P, чтобы вставить функцию выше текущей строки (p вставляет под строкой с курсором).

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

Копирование одной строки выполняется командой yy. Если надо скопировать несколько строк, сначала указывается число. Например, 5yy скопирует пять строк. Ту, в которой находится курсор, и четыре строки ниже.

Если нужно скопировать определенное количество слов, то

  1. курсор устанавливается на первый символ первого копируемого слова,
  2. вводится y,
  3. указывается количество копируемых слов,
  4. нажимается w (word – слово).

Комбинация yw копирует одно слово.

Скопировать один символ можно комбинацией yl, пять символов – y5l. Клавиша l здесь соответствует направлению движения. Вспомним, что сама по себе она перемещает курсор вправо.

Вышесказанное работает и для удаления нескольких слов или символов. В этом случае вместо y используется d.

Если вы попытаетесь скопированный таким образом в Vim текст вставить в другую программу, ничего не выйдет. В Vim работает свой буфер обмена, отдельный от системного.

Самым простым способом «обмена данными» будет выделение мышью блока текста, с последующим выбором через контекстное меню терминала пункта "Копировать". Аналогичным образом текст из внешнего источника можно вставить в Vim. Также в терминале Ubuntu работают горячие клавиши Ctrl+Shift+c, Ctrl+Shift+v.

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

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

Забегая вперед, скажу, что информацию пришлось собирать фактически по крупицам. Основное направление в использовании Vim в качестве редактора «для программистов» привело к тому, что вопросам обработки «простого» текста уделяется мало внимания. В конце-концов, с поставленной задачей, как мне кажется, удалось справиться.

Первоначальные сведения о работе редактора.

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

sudo apt-get install vim-full

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

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

:set wrap

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

:set tw=80

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

Форматирование текста

Следующим вопросом, на который необходимо было найти ответ — как осуществлять форматирование текста. Для этого пригодятся следующие команды:

:ce - выравнивает строку по центру
:ri - выравнивает строку по правому краю
:le - выравнивает строку по левому краю

Но как выровнять текст, что называется, «по параграфам»? Чтобы левый и правый край были ровными. Помощь Vim говорит, что для этого нужно использовать внешнюю программу. Но есть и другое решение. Подключаем макрос (идет в стандартной поставке):

:source $VIMRUNTIME/macros/justify.vim

После этого командой «_j» в режиме редактирования можно выровнять выделенный текст «по параграфам».
Несмотря на то, что мы задали фиксированную ширину, при редактировании текста может получиться ситуация, когда одна строка окажется длиннее, или, напротив, короче. Это вполне логично — поскольку строка заканчивается символом переноса строки, который может быть затерт или смещен влево. Привести абзац к фиксированной ширине можно выделив текстовый блок в визуальном режиме и воспользоваться командой «gq».

Проверка орфографии.

Неотъемлемой функцией текстового редактора для меня является проверка орфографии. В Vim этот вопрос решается так:
Качаем архивы со словарями. Разархивируем их в папку /tmp/dict (без подкаталогов внутри).
Создаем папку
mkdir -p ~/.vim/spell/
Далее формируем словарь в Vim-формате командой:
:mkspell! ~/.vim/spell/ru /tmp/dict/ru_RU — для русского языка
:mkspell! ~/.vim/spell/en /tmp/dict/en_US — для английского

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

:setlocal spell spelllang=ru_ru,en_us

Работа с несколькими документами.

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

:new — создает новый документ в новом окне

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

:Sex

Откроется подобие файлового менеджера, в котором можно выбрать требуемый для редактирования файл. Перемещение из окна в окно осуществляется следующим образом: Наживаем CTRL-w, а затем стрелкой курсора переходим к нужному окну. Вместо курсора можно воспользоваться навигационными клавишами — h,j,k,l
После того, как все требуемые документы открыты в одном окне, необходимо расставить их по местам, выбрав требуемый размер. Это делается так:
CTRL-w, а затем навигационная клавиша, только с зажатым шифтом -H,J,K,L соответственно.

Разложив окна, можно подогнать их размер под конкретные нужды можно так:
CTRL-W +
CTRL-W —
изменяют размер окна по вертикали;
CTRL-W <
CTRL-W >
изменяет размер окна по горизонтали.

В качестве резюме.

Если изложенное выше оказалось для вас полезным, а Vim оказался пригодным для написания и редактирования текстов, самое время перейти к составлению своего конфигурационного файла. Для этого Открываем в своем домашнем каталоге файл vimrc — и вписываем туда команды, которые сочли полезными для каждодневного использования. У меня это ширина текста, проверка орфографии и использование макросадля выравнивания текста «по параграфам».
Кроме того, в случае если используется юникод, настоятельно рекомендую ознакомиться с материалами на ru.wikibooks.org/wiki/Vim и прописать в конфигурационный файл переназначение символов. Потому как постоянное переключение русской-английской раскладки в командном режиме реально утомляет.

p.s. Сперва я хотел разместить этот топик в блоге, посвященному Vim. Нопотом решил, что его читатели уже знакомы с текстовым редактором и столь начальная информация будет не интересна. А вот для новичков в мире *nix, слышавших про «войны» текстовых редакторов, материал будет познавательным и позволит более быстро начать использовать редактор для повседневных нужд.

Основные команды текстового редактора VI / VIM

Текстовый редактор vim, созданный на основе более старого vi. Один из мощнейших текстовых редакторов с полной свободой настройки и автоматизации, возможными благодаря расширениям и надстройкам. По умолчанию входит в состав любого дистрибутива Linux.

Открываем файл с помощью vi / vim:

vim test.txt
vi test.txt

Основные режимы работы.

«Обычный режим» — перемещение по файлу, стирание текста и другие редактирующие функции. Это — основной режим, только из него можно сразу перейти в другие режимы. Для возврата в основной режим из любого другого режима:

<ESC>, иногда 2 раза;
<Ctrl-[>

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

    i
    <Insert>

    «Командный режим» — Команды (операции с файлом, поиск и замена, настройка редактора…). Переход в него из обычного режима:

    :

    «Режим поиска» — ввод поискового запроса. Переход в него из обычного режима

      / , поиск от курсора до конца документа
      ? , поиск от курсора до начала документа

      «Визуальный режим» — режим выделения текста:

      "v" и влево или вправо стрелками;
      Shift+v вся строка целиком;
      Ctrl+v прямоугольник, часть текста.

      Перемещение по файлу

        После загрузки Vim, на экране вы увидите часть загруженного вами текстового файла. Загрузившись, Vim находится в «командном режиме» — один из основных режимов. Это значит, что если вы нажмете клавишу <l> (строчная L), вместо появления «l» на месте курсора вы увидите, что курсор сдвинулся на один символ вправо. В командном режиме знаки, набираемые на клавиатуре, используются как команды для Vim, а не как помещаемые в текст символы. Команды перемещения — один из наиболее важных типов команд. Вот некоторые из них:

        Для перемещения курсора нажмите клавиши h,j,k,l так, как показано ниже:
                     ^
                     k          Советы: Клавиша h находится слева и перемещает влево.
               < h       l >            Клавиша l находится справа и перемещает вправо.
                     j                  Клавиша j похожа на стрелку "вниз".
                     v
        
        <Ctrl-f> - на страницу (экран) вниз;
        <Ctrl-b> - на страницу (экран) верх;
        <Ctrl-d> - на пол страницы (экрана) вниз;
        <Ctrl-u> - на пол страницы (экрана) верх;
        <Ctrl-y> - на строку вниз, без изменения положения курсора;
        <Ctrl-e> - на строку верх, без изменения положения курсора;
        0 («ноль») - в начало текущей строки;
        ^ - в начало текущей строки (к первому непробельному символу);
        $ - в конец текущей строки;
        w - на слово вправо;
        b - на слово влево;
        W - до пробела вправо;
        B - до пробела влево;
        } - абзац вниз;
        { - абзац вверх;
        gg - перейти в начало файла;
        G - перейти в конец файла;
        <number>G - перейти на конкретную строку <number>;
        /<text><CR> - перейти к <text>;
        ?<text><CR> - то же самое, но искать назад;
        n - повторить поиск;
        N - повторить поиск назад;
        [[ - в начало функции;
        '' - к месту выполнения команды [[

        Ввод текста

        Следующие команды переводят редактор в режим ввода:

        i — перейти в режим ввода с текущей позиции
        a — перейти в режим ввода после курсора
        I — переместиться в начало строки и перейти в режим ввода
        А — переместиться в конец строки и перейти в режим ввода
        o — перейти в режим ввода с новой строки под курсором
        O — перейти в режим ввода с новой строки над курсором
        s - заменяет указанное количество символов (удаляет указанное число символов и переходит в режим ввода). В отличии от команды с которая может удалить кусок текста размером не меньше слова (cw), командой s можно удалить любое число символов. Например 4s удалит четыре символа начиная с того который находится под курсором. Эта команда применяется для замены одного или нескольких символов другими символами.
        S - удаляет всю текущую строку и переходит в режим ввода. Число перед командой показывает сколько нужно удалить строк начиная с текущей. Например 4S удалит четыре строки включая текущую.
        R — перейти в режим ввода с заменой текста (аналог insert). Символы под курсором заменяются на вводимые. Команда применяется когда неизвестно сколько придётся изменить символов на другие (иначе можно было бы использовать команду s с указанием числа заменяемых символов, например, 7s). При удалении вводимых символов возвращаются те которые были до ввода команды. Такой режим сохраняется до конца строки. При вводе новой строки (по нажатию Enter), происходит не переход на другую строку с тем же режимом замены текста, а создание новой строки.
        r — заменить один символ. Заменяет символ находящийся под курсором на символ который следует за командой. При этом не происходит выхода из командного режима (не надо нажимать ESC после изменения текста). Например, команда ry - символ под курсором меняется на "y". Числовой показатель указывает сколько символов необходимо заменить на данный. Например, 3ry вставляет три символа "y".

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

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

        x — удалить символ под курсором (<число>x удаляет указанное число символов начиная с того который находится под курсором);
        X — удалить символ влево (удалить символ перед курсором);
        d — используется совместно с командами перемещения. Удаляет символы с текущего положения курсора до положения после ввода команды перемещения. Пример:
        dw - удаляет символы с текущего до конца слова. включая пробел после слова, чтобы удалить символы до конца слова, но оставить пробел используется команда de,
        dE - удаляет символы с текущего до конца слова, включая символы пунктуации, но оставляет пробел после слова,
        diw - удаляет слово под курсором,
        dd — удалить текущую строку (вырезать);
        d<число>d или <число>dd — стирание числа строк начиная с текущей;
        db - удаляет символы с текущего до начала слова (удаление в обратном направлении);
        d0 - удаление символов с начала строки до текущего положения курсора;
        d$ или D - удаление символов с текущего положения курсора до конца строки;
        с — команда аналогичная d, но после удаление переходит в режим ввода;
        сс - команда удаляет текущую строку и переходит в режим ввода;
        C - удаляет текст с текущего положения курсора до конца строки, аналогична команде с$ (где $ - символ конца строки);
        yy (также Y) — копирование текущей строки в буфер;
        y<число>y — копирование числа строк начиная с текущей в буфер;
        p — вставка содержимого буфера под курсором. Поскольку в vim девять ячеек буфера удаления. Можно вставить не только последнее удаление, но и удаления сделанные ранее. Например "4p" вставит под курсор содержимое четвертого удаления начиная с последнего. Также чтобы поменять местами два символа можно использовать комбинацию команд "удалить" -x (удаление в буфер) и "вставить" - p (вставить из буфера). Таким образом, поставив курсор на первую букву из двух которые необходимо поменять местами и нажав комбинацию клавиш xp мы совершим необходимые действия;
        P — вставка содержимого буфера перед курсором;
        J — слияние текущей строки со следующей. Числовой аргумент перед командой показывает сколько следующих линий необходимо объединить с текущей. Например 2J объединить две следующие строки с текущей, на которой расположен курсор.

        Отмена изменений

        u — отмена последней команды;
        U — отмена всех последних изменений в строке, если строка удалена, то применить эту команду к данной строке будет невозможно.

        Поиск

        Перейти на строку:

        /фраза - поиск фразы во всем документе.
        n - следующее найденное (вниз) N - предыдущее (вверх).

        Выход

        Есть еще пара команд, которые вам необходимо знать:

        :q! - выйти без сохранения;
        :wq - записать файл и выйти;
        ZZ - записать файл и выйти (Если файл не изменяли, то записываться он не будет)
        

          В этой статье описаны основные возможности, необходимые для работы. Практически во все дистрибутивы Linux входит учебник по работе с редактором, — просто введите в командной строке команду vimtutor.

          Справка

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

          man vim

          Итак, вам срочно понадобилось отредактировать какой-либо конфигурационный файл и под рукой нет знакомых консольных текстовых редакторов, только Vi (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 — если предпочтителен русский язык):

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

          Скриншот №4. Курс обучения

          191028
          Санкт-Петербург
          Литейный пр., д. 26, Лит. А

          +7 (812) 403-06-99

          700
          300

          ООО «ИТГЛОБАЛКОМ ЛАБС»

          191028
          Санкт-Петербург
          Литейный пр., д. 26, Лит. А

          +7 (812) 403-06-99

          700
          300

          ООО «ИТГЛОБАЛКОМ ЛАБС»

          Вы собираетесь создать файл crontab и внезапно оказываетесь в этом странном редакторе по умолчанию. В том, в котором всё никак не разберётесь.

          ESC? Ничего не произошло. CTRL + C? Нет. ESC ESC ESC? Неа. Вы в тупике.

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

          С вами бывало такое? Конечно, бывало. Что ж, потратив несколько минут на эту статью, вы познакомитесь с основами редактора Vim (и научитесь быстро выходить из него).

          Vim по умолчанию установлен во многих операционных системах (включая большинство дистрибутивов Linux и macOS), поэтому хотя бы поверхностные знания о нём лишними не будут. Откройте терминал и введите vim.

          В умелых руках Vim может стать мощнее многих IDE. И, разумеется, он не ест сотни мегабайт памяти лишь для отображения пустого файла (да, Eclipse, это о тебе).

          Основы

          Некоторые из нижеописанных команд начинаются с двоеточия: нажав его, появится подсказка, в которой будет указана полная команда. Команды без двоеточий — это скорее горячие клавиши, которые можно использовать в режиме по умолчанию (в нём запускается Vim). Команды, написанные ЗАГЛАВНЫМИ БУКВАМИ — это отдельные клавиши: например, ESC — это клавиша Esc на вашей клавиатуре.

          Все команды чувствительны к регистру и должны выполняться вне режима insert.

          Выход из Vim

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

          :q!

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

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

          :wq

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

          Навигация

          Для перемещения по открытому файлу используйте стрелки.

          Перемещение на строку 285:

          :285

          Поиск слова «import»:

          /import

          Изменение текста

          Вставка текста там, где стоит курсор:

          i

          Как запомнить: insert

          Вставка текста в конце текущей строки:

          A

          Как запомнить: Append

          Выход из режима редактирования (возврат в стандартный режим):

          ESC

          Выделение текста

          Переход в визуальный режим:

          v

          Как запомнить: visual

          Для выделения текста используйте стрелки.

          Выход из визуального режима:

          ESC

          Копирование, удаление, вставка

          Копирование выделенного текста в буфер:

          y

          Как запомнить: yank

          Удаление выделенного текста:

          d

          Как запомнить: delete

          Копирование текущей строки в буфер:

          yy

          Как запомнить: yank yank

          Копирование трёх строк, включая текущую, в буфер:

          3yy

          Удаление текущей строки и помещение её в буфер:

          dd

          Как запомнить: delete delete

          Удаление 5 строк, включая текущую:

          5dd

          Вставка из буфера перед текущей строкой:

          P

          Примечание: заглавная P

          Вставка из буфера после текущей строки:

          p

          Отмена и восстановление последнего изменения

          Отмена последнего изменения:

          u

          Как запомнить: uh-oh 🙂

          Восстановление последнего отменённого изменения:

          CTRL + R

          Вывод изменений:

          :undolist

          Отмена двух последних изменений:

          2u

          Многоуровневое дерево отката изменений Vim очень мощное, подробнее о нём можно почитать в документации.

          Работа с файлом

          Открытие файла index.html вместо текущего:

          :edit index.html

          Сохранение текущего файла:

          :w

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

          Сохранение файла с изменённым именем, например, changes.txt:

          :w changes.txt

          Поиск и замена

          Поиск и замена всех вхождений строки в файле:

          :%s/typo/corrected/g

          Поиск и замена с запросом подтверждения замены:

          :%s/typo/corrected/gc

          Как запомнить: confirm

          Подсветка синтаксиса и отступы

          Включение подсветки синтаксиса:

          :syntax on

          Включение автоматических отступов:

          :set autoindent

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

          >

          Вкладки

          Открытие server.py в новой вкладке:

          :tabe server.py

          Как запомнить: tab edit

          Переход на вкладку справа:

          :tabn

          Как запомнить: tab next

          Переход на предыдущую вкладку слева:

          :tabp

          Как запомнить: tab previous

          Для закрытия вкладки переключитесь на неё и используйте команду :q или :wq.

          Разделённый экран

          Открытие templates/base.html в режиме вертикального разделения экрана:

          :vs templates/base.html

          Как запомнить: vertical split

          Открытие shared.js в режиме горизонтального разделения экрана:

          :sp shared.js

          Как запомнить: the ’default’ horizontal split

          Перемещение между «частями» экрана:

          CTRL + W + ARROW KEYS

          Для закрытия экрана переключитесь на него и используйте команду :q или :wq.

          Настройка Vim: файл .vimrc

          Многие команды, используемые для изменения вида и поведения Vim, можно сделать включёнными по умолчанию, поместив их в .vimrc — файл конфигурации Vim, который расположен в домашнем каталоге.

          Например, добавление этих строк в ~/.vimrc сделает подсветку синтаксиса и автоматическую корректировку отступов включёнными по умолчанию:

          syntax on
          set autoindent

          Идеи для кастомизации Vim можно почерпнуть в этом GitHub-репозитории.

          Полезные ресурсы

          Вот ещё несколько полезных материалов для изучения Vim:

          • 12 продвинутых команд Vim;
          • Лучшие команды с официальной вики-страницы проекта;
          • Огромная подборка команд.

          А какая команда Vim — ваша любимая? Может, вы знаете удобные приёмчики? Делитесь ими в комментариях!

          Перевод статьи «How the hell do I exit: A beginner’s guide to Vim»

          Vim – это легендарный текстовый редактор, способный на многое, но недружелюбный к новичкам. VIM — текстовый редактор, который появился в 1991 году, но до сих пор пользуется огромной популярностью (наряду с Emacs). Как правило, на него переходят после других редакторов уже состоявшиеся разработчики. Нередко, переходят с полноценных IDE.

          Оглавление

          • 1 Минимальные основы VIM
          • 2 Синтаксис VIM
            • 2.1 Выход из Vim
            • 2.2 Навигация в Vim
            • 2.3 Изменение текста в Vim
            • 2.4 Выделение текста в Vim
            • 2.5 Копирование, удаление, вставка
            • 2.6 Отмена и восстановление последнего изменения в Vim
            • 2.7 Работа с файлом в Vim
            • 2.8 Поиск и замена в Vim
            • 2.9 Подсветка синтаксиса и отступы
            • 2.10 Вкладки в Vim
            • 2.11 Разделённый экран в VIM
            • 2.12 Настройка Vim: файл .vimrc
          • 3 Командный режим в VIM
          • 4 Командная строка VIM
          • 5 Редактирование файла в VIM
          • 6 Одновременное редактирование нескольких файлов
          • 7 Буфер обмена VIM
          • 8 Кирилица В VIM
            • 8.1 Когда не стоит учить вим
            • 8.2 Сколько понадобится времени
            • 8.3 Процесс обучения

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

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

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

          Синтаксис VIM

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

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

          Или:

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

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

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

          Выход из Vim

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

          :q!

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

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

          :wq

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

          Навигация в Vim

          Для перемещения по открытому файлу используйте стрелки.

          Перемещение на строку 285:

          :285

          Поиск слова «import»:

          /import

          Изменение текста в Vim

          Вставка текста там, где стоит курсор:

          i

          Как запомнить: insert

          Вставка текста в конце текущей строки:

          A

          Как запомнить: Append

          Выход из режима редактирования (возврат в стандартный режим):

          ESC

          Выделение текста в Vim

          Переход в визуальный режим:

          v

          Как запомнить: visual

          Для выделения текста используйте стрелки.

          Выход из визуального режима:

          ESC

          Копирование, удаление, вставка

          Копирование выделенного текста в буфер:

          y

          Как запомнить: yank

          Удаление выделенного текста:

          d

          Как запомнить: delete

          Копирование текущей строки в буфер:

          yy

          Как запомнить: yank yank

          Копирование трёх строк, включая текущую, в буфер:

          3yy

          Удаление текущей строки и помещение её в буфер:

          dd

          Как запомнить: delete delete

          Удаление 5 строк, включая текущую:

          5dd

          Вставка из буфера перед текущей строкой:

          P

          Примечание: заглавная P

          Вставка из буфера после текущей строки:

          p

          Отмена и восстановление последнего изменения в Vim

          Отмена последнего изменения:

          u

          Как запомнить: uh-oh 🙂

          Восстановление последнего отменённого изменения:

          CTRL + R

          Вывод изменений:

          :undolist

          Отмена двух последних изменений:

          2u

          Многоуровневое дерево отката изменений Vim очень мощное, подробнее о нём можно почитать в документации.

          Работа с файлом в Vim

          Открытие файла index.html вместо текущего:

          :edit index.html

          Сохранение текущего файла:

          :w

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

          Сохранение файла с изменённым именем, например, changes.txt:

          :w changes.txt

          Поиск и замена в Vim

          Поиск и замена всех вхождений строки в файле:

          :%s/typo/corrected/g

          Поиск и замена с запросом подтверждения замены:

          :%s/typo/corrected/gc

          Как запомнить: confirm

          Подсветка синтаксиса и отступы

          Включение подсветки синтаксиса:

          :syntax on

          Включение автоматических отступов:

          :set autoindent

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

          >

          Вкладки в Vim

          Открытие server.py в новой вкладке:

          :tabe server.py

          Как запомнить: tab edit

          Переход на вкладку справа:

          :tabn

          Как запомнить: tab next

          Переход на предыдущую вкладку слева:

          :tabp

          Как запомнить: tab previous

          Для закрытия вкладки переключитесь на неё и используйте команду :q или :wq.

          Разделённый экран в VIM

          Открытие templates/base.html в режиме вертикального разделения экрана:

          :vs templates/base.html

          Как запомнить: vertical split

          Открытие shared.js в режиме горизонтального разделения экрана:

          :sp shared.js

          Как запомнить: the ’default’ horizontal split

          Перемещение между «частями» экрана:

          CTRL + W + ARROW KEYS

          Для закрытия экрана переключитесь на него и используйте команду :q или :wq.

          Настройка Vim: файл .vimrc

          Многие команды, используемые для изменения вида и поведения Vim, можно сделать включёнными по умолчанию, поместив их в .vimrc — файл конфигурации Vim, который расположен в домашнем каталоге.

          Например, добавление этих строк в ~/.vimrc сделает подсветку синтаксиса и автоматическую корректировку отступов включёнными по умолчанию:

          syntax on
          set autoindent

          Командный режим в 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

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

           vim имя_файла

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

          Одновременное редактирование нескольких файлов

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

           vim файл1 файл2 файл3

          Редактор vim linux откроет первый файл, для переключения ко второму используйте команду :n, чтобы вернутся назад :N.

          С помощью команды :buffers вы можете посмотреть все открытые файлы, а командой :buffer 3 переключится на третий файл.

          Буфер обмена VIM

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

          • Нажмите Esc, чтобы перейти в командный режим;
          • Наберите 4yy чтобы скопировать четыре строки;
          • Переместите курсор в место где нужно вставить эти строки;
          • Нажмите p для вставки.

          Также можно использовать выделение vim, чтобы скопировать строки. Выделите текст с помощью v, а затем нажмите y, чтобы скопировать.

          Кирилица В VIM

          Кириллица в Vim работает превосходно. Но есть одно но, когда включена кириллица в системе, все команды vim не работают, им и не нужно работать, они же не приспособлены для кириллицы.

          Но переключать каждый раз раскладку, когда работаете в командном режиме тоже не очень удобно, поэтому открываем файл ~/.vimrc и добавляем туда такие строки:

          set keymap=russian-jcukenwin
          set iminsert=0
          set imsearch=0

          Теперь раскладка клавиатуры в командном режиме переключается по Ctrl+^ и все команды работают.

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

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

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

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

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

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

          Сколько понадобится времени

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

          Процесс обучения

          • Поставьте nvim и vim (с поддержкой python3).
          • Не все шаги, описанные ниже, нужно выполнять последовательно. То что можно делать параллельно, стоит делать параллельно. В любом случае перед тем, как решиться распробовать вим, стоит пройти официальный vimtutor который идет в поставке с самим вимом. Он проведет вас через все базовые команды и даст представление о том, как все работает. Откройте терминал и наберите vimtutor, при необходимости установив vim. После него можно браться за интерактивные учебники, описанные в полезных ссылках ниже. Делать это стоит одновременно с практикой работы с настоящим вимом.
          • Распечатайте и изучите vim cheatsheets: https://bit.ly/2urvrMA
          • Научитесь использовать возможности вашего терминала — сплиты/табы используя горячие клавиши.
          • Измените маппинги клавиш как описано выше.
          • Дальше есть два пути. Либо брать и с нуля настраивать свой собственный .vimrc (конфиг), что невероятно сложно и затратно на первых порах, либо, что лучше, взять готовую сборку и сосредоточиться на владении самим вимом. А затем, постепенно разбираться с тем как все устроено внутри и по необходимости делать собственную сборку. Я рекомендую использовать свою сборку. Она вобрала в себя лучше практики и практически не содержит самописного кода. К тому же, внутри неё используются самые современные плагины. Внимательно изучите Makefile и выполните все необходимые команды. В процессе работы постоянно смотрите в файл vimrc и изучайте его содержимое вместе с установленными плагинами. Все плагины хостятся на гитхабе вместе с их документацией.
          • Научитесь работать с пакетным менеджером plug. С него начинается вход в vim.
          • Изучение самого вима включает два аспекта. Первый, работа внутри буфера. К нему, как раз, относится та самая навигация и владение базовыми командами по модификации и перемещению. Второе, навигация по проекту и управление файловой структурой. Управление файловой структурой (создание, переименование и удаление) производятся плагином NERDTree, а для навигации существует три основных и несколько дополнительных способов. Основные: нечеткий поиск (fzf), переключение между буферами (bufexplorer) и перемещение по файловому дереву (NERDTree). Все они важны и используются постоянно. Несмотря на то, что вим поддерживает табы, вимеры редко ими пользуются, но даже если и пользуются, то не для тех целей, для которых табы используются в обычных редакторах. К дополнительным способам навигации относятся прыжки по последним модификациям (вим их запоминает и позволяет ходить вперед назад), а так же комбинация gf, означающая “go to file”.
          • Изучите набор плагинов подходящих под ваш стек и установите его. В интернете много статей для настройки практически любого стека разработки. Единственная рекомендация, смотрите плагины основанные на lsp.

          Общее

          • :help keyword — открыть помощь по ключевому слову
          • :o file — открыть file
          • :sav file — сохранить весь текщий буфер как file
          • :close — закрыть текущую панель
          • K — открыть справочное руководство для слова под курсором

          Перемещение курсора

          • h — передвинуть курсор влево
          • j — передвинуть курсор на одну фактическую строку вниз
          • k — передвинуть курсор на одну фактическую строку вверх
          • l — передвинуть курсор вправо
          • gj — передвинуть курсор на одну видимую строку вниз
          • gk — передвинуть курсор на одну видимую строку вверх
          • H — переместиться к началу экрана
          • M — переместиться к середине экрана
          • L — переместиться к концу экрана
          • w — переместиться вперед на начало слова
          • W — переместиться вперед на начало слова (слово может содержать пунктуацию)
          • e — переместиться вперед на конец слова
          • E — переместиться вперед на конец слова (слово может содержать пунктуацию)
          • b — переместиться назад на начало слова
          • B — переместиться назад на начало слова (слово может содержать пунктуацию)
          • % — переместиться к парному символу (по умолчанию поддерживаются: ‘()’, ‘{}’, ‘[]’ — подробнее по команде :h matchpairs в vim)
          • 0 — переместиться на начало строки
          • ^ — переместиться на первый непробельный символ строки
          • $ — переместиться на конец строки
          • g_ — переместиться к последнему непустому символу в строке
          • gg — переместиться на первую строку документа
          • G — переместиться на последнюю строку документа
          • 5G — переместить на пятую строку
          • fx — переместиться к следующему вхождению символа x в текущей строке
          • tx — установить курсор за следующим вхождением символа x в строке
          • Fx — переместиться на предыдущее вхождение символа x в текущей строке
          • Tx — установить курсор за предыдущим вхождением символа x в строке
          • ; — повторить предыдущее f, t, F или T перемещение
          • , — повторить предыдущее f, t, F или T перемещение, в обратном направлении
          • } — переместиться к следующему параграфу (или функции/блоку при редактировании кода)
          • { — переместиться к предыдущему параграфу (или функции/блоку при редактировании кода)
          • zz — сдвинуть весь буфер по вертикали вместе с курсором, так чтобы курсор оказался в центре
          • Ctrl + b — переместиться назад на целый экран
          • Ctrl + f — переместиться вперед на целый экран
          • Ctrl + d — переместиться вперед на половину экрана
          • Ctrl + u — переместиться назад на половину экрана

          Совет: Добавьте число перед командой перемещения курсора для того, чтобы повторить её. Например, 4j перемещает курсор на 4 строки вниз.

          Режим вставки — вставка/добавление текста

          • i — вставка перед курсором
          • I — вставка в начало строки
          • a — вставка (добавление) после курсора
          • A — вставка (добавление) в конец строки
          • o — добавление новой строки под текущей
          • O — добавление новой строки над текущей
          • ea — вставка (добавление) после конца слова
          • Esc — выход из режима вставки

          Редактирование

          • r — заменить один символ
          • J — присоединить нижнюю строку к текущей
          • cc — заменить всю строку
          • cw — заменить всё текущее слово
          • c$ — заменить до конца строки
          • s — удалить символ и заменить текст
          • S — удалить строку и заменить текст (то же что cc)
          • xp — переставить две буквы (удалить и вставить)
          • u — отменить
          • Ctrl + r — применить последнее отменённое изменение
          • . — повторить последнюю команду

          Выделение текста (визуальный режим)

          • v — включить режим выделения текста, выделить строки, затем выполнить команду (например, y-копирование)
          • V — включить построчный режим выделения
          • o — переместиться на другой конец выделенной области
          • Ctrl + v — включить режим выделения блоков
          • O — переместить на другой угол блока
          • aw — выделить слово
          • ab — блок в ()
          • aB — блок в {}
          • ib — внутренний блок в ()
          • iB — внутренний блок в {}
          • Esc — выйти из режима выделения текста

          Визуальные команды

          • > — сместить текст вправо
          • < — сместить текст влево
          • y — скопировать выделенный текст
          • d — удалить выделенный текст
          • ~ — переключить регистр

          Регистры

          • :reg — показать содержимое регистров
          • "xy — поместить содержимое в регистр x
          • "xp — вставить содержимое регистра x

          Совет: Содержимое регистров сохраняется в ~/.viminfo, и будет восстановлено при следующем запуске vim.

          Совет: В нулевом регистре всегда хранится содержимое последней команды копирования.

          Метки

          • :marks — список меток
          • ma — установить метку A на текущей позиции
          • `a — переместиться к метке A
          • y`a — скопировать до метки A

          Макросы

          • qa — записать макрос A
          • q — остановить запись макроса
          • @a — run macro a
          • @@ — выполнить последний макрос

          Вырезать и вставить

          • yy — скопировать строку
          • 2yy — скопировать 2 строки
          • yw — скопировать слово
          • y$ — скопировать до конца строки
          • p — вставить буфер обмена после курсора
          • P — вставить буфер обмена перед курсором
          • dd — удалить (вырезать) строку
          • 2dd — удалить (вырезать) 2 строки
          • dw — удалить (вырезать) слово
          • D — удалить (вырезать) до конца строки
          • d$ — удалить (вырезать) до конца строки
          • x — удалить (вырезать) символ

          Выход и сохранение

          • :w — сохранить файл, но не выходить
          • :w !sudo tee % — сохранить файл с sudo
          • :wq либо :x либо ZZ — сохранить файл и выйти
          • :q — выйти (терпит неудачу в случае несохраненных изменений)
          • :q! либо ZQ — выйти и потерять несохраненные изменения

          Поиск и замена

          • /pattern — поиск шаблона
          • ?pattern — обратный поиск шаблона
          • vpattern — ‘very magic’ режим: все не алфавитно-цифровые символы интерпретируются как специальные (экранирование не требуется)
          • n — повторить поиск в том же направлении
          • N — повторить поиск в обратном направлении
          • :%s/old/new/g — заменить все вхождения шаблона в файл на указанное значение
          • :%s/old/new/gc — заменить все вхождения шаблона в файл на указанное значение с подтверждением
          • :noh — отключить подсвечивание результатов поиска

          Поиск в нескольких файлах

          • :vimgrep /pattern/ {file} — поиск по шаблону в нескольких файлах

          Например:
          :vimgrep /foo/ **/*

          • :cn — переместиться к следующему совпадению
          • :cp — переместиться к предыдущему совпадению
          • :copen — открыть окно со списком результатов

          Сворачивание

          • zf#j — создает свертку от текущей позиции до # строк
            вниз
          • zf/подстрока — создает свертку от текущей позиции и
            до первой найденной подстроки
          • v/V и zf — выделение блока и создание свертки
          • Команды для управления:

          • zc — свернуть блок
          • zo — развернуть блок
          • zM — закрыть все блоки
          • zR — открыть все блоки
          • za — инвертирование (если открыто – закрыть, если
            закрыто – открыть)
          • zj — переход к следующей свертке
          • zk — переход к предыдущей свертке
          • zd — удалить свертку под курсором
          • zD — удалить все свертки
          • [z — перейти к началу текущей свертки
          • ]z — перейти к концу текущей свертки
          • После закрытия Vim все свертки забываются, для
            сохранения сверток в открытом файле используется команда
            :mkview, для загрузки — :loadview (подробнее).

          Понравилась статья? Поделить с друзьями:
        • Visual studio code как изменить тему
        • Vim как изменить размер табуляции
        • Visual studio code как изменить размер шрифта
        • Vim exit with error
        • Visual studio code как изменить кодировку файла