Как пользоваться текстовым редактором vim

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

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

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

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

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

vim /path/to/the/file

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

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

Если вы хотите выйти без сохранения изменений используйте :q! вместо :wq.

Версии редактора

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

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

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

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

Второй режим - режим вставки. Это обычное редактирование текста, он работает так же как и редактирование текста в nano. Для переключения в режим вставки используется клавиша i. Для переключения обратно в командный режим - клавиша Esc.

Ещё есть визуальный режим в котором выполняется выделение текста, режим замены, который активируется когда вы используете команды замены символов, а также режим командной строки, где можно вводить разные команды vi, который активируется вводом двоеточия ":" в командном режиме.

Как использовать редактор 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. Командная строка Vim

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

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

4. Выход из Vim

Таким образом, для того чтобы выйти из Vim нужно перейти в командный режим нажатием Esc, активировать командную строку с помощью двоеточия и выполнить команду q:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8. Переменные в Vim

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

:set number

Команда устанавливает значение переменной number в true. Для того чтобы отключить отображение номеров строки надо установить его в false. Для этого можно инвертировать значение флага:

:set number!

Кроме того, вы можете сбросить значение переменной до заводских настроек с помощью &:

set number&

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

Текстовый редактор 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 @+=@"

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

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

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

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

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

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

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

:%s/string_to_search/string_to_paste/g

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

:%s/Alice/Robert/g

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

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

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

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

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

Встроенное обучение

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

vimtutor

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

Выводы

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *