В какой-то момент каждому пользователю Linux приходится изменять файл, и какой редактор подойдет для этого лучше, чем vim? Его команды позволяют делать практически все, что угодно.
Что такое Vim в Linux?
Vim (что означает Vi iMproved) — это основной текстовый редактор, доступный в интерфейсе командной строки Linux (CLI) для создания и редактирования файлов. Он предоставляет два основных режима: командный режим и режим вставки.
Если вы новичок в vim, переключение между режимами может показаться вам не всегда простым, а если вы уже давно используете vim, всегда есть возможность изучить новые команды, чтобы ускорить редактирование.
В этой статье мы начнем с основных команд vim и постепенно перейдем к более сложным, которые я лично использовал на протяжении многих лет.
Давайте начнем!
Режим команд Vim и режим вставки
Прежде всего, мы начнем с создания пустого файла app.conf. Мы предположим, что этот файл содержит конфигурацию для приложения, работающего на Linux:
vim app.conf
С помощью этой команды мы открываем редактор vim и учитывая, что это новый файл, вы ничего в нем не увидите.
Итак, как нам начать добавлять строки в наш файл?
Если вы попытаетесь набрать буквы на клавиатуре, то заметите, что на экране ничего не появляется (если только вы не наберете какие-нибудь буквы, представляющие специальные команды Vim).
Причина, по которой вы ничего не видите в редакторе vim, заключается в том, что вы находитесь в командном режиме.
Командный режим Vim предназначен для быстрого перемещения по текстовому файлу и выполнения таких функций, как копирование слов, копирование и удаление одной или нескольких строк, поиск, замена и многое другое.
Чтобы начать добавлять текст в наш файл, нам нужно переключиться в режим вставки. Для этого просто нажмите букву i на клавиатуре и напишите все, что хотите:
This is a vim tutorial
~
~
~
-- INSERT --
Как вы видите, когда я вхожу в режим вставки в vim, в нижней части экрана я вижу — INSERT —.
И как мне сохранить файл?
Сначала мне нужно выйти из режима вставки и войти в командный режим с помощью ESC. После этого надпись — INSERT — внизу исчезает.
Основные команды Vim
На этом этапе у нас есть несколько вариантов сохранения содержимого файла. Находясь в командном режиме, просто введите следующее на клавиатуре. Они появятся в нижней части окна vim.
Нажмите ENTER, чтобы выполнить команду:
Команда | Описание |
---|---|
:w | Сохраните файл, не выходя из vim. |
:wq | Сохраните файл и выйдите из vim. |
:x | Сохраните файл и выйдите из vim. |
Что делать, если мы хотим выйти, не сохраняя содержимое файла?
Мы можем использовать :q
в командном режиме.
Давайте посмотрим, что произойдет, когда мы сделаем это и нажмем ENTER с нашим файлом…
This is a vim tutorial
~
~
~
E37: No write since last change (add! to override)
Внизу терминала мы видим ошибку, которая предупреждает нас о том, что файл был изменен, а мы не сохраняем изменения.
Чтобы подтвердить, что это именно то, что мы хотим сделать, нам нужно добавить восклицательный знак в конце нашей команды.
Итак, команда становится :q!
This is a vim tutorial
~
~
~
:q!
После нажатия клавиши ENTER вы вернетесь в оболочку Linux без сохранения файла.
Как вы увидите, vim предоставляет множество различных сочетаний клавиш для редактирования файлов. В следующем разделе мы увидим, как перемещаться по файлу.
Как использовать Vim для перемещения по файлу
Одним из главных преимуществ редактирования файла в vim является наличие сочетаний клавиш для быстрого перемещения по файлу.
Например, предположим, что я хочу перейти к строке в файле…
Чтобы перейти на строку в vim, используйте: (двоеточие), а затем номер строки.
Ниже вы можете увидеть, как я могу перейти к третьей строке моего файла, используя :3
.
First line
Second line
Third line
Fourth line
~
~
~
:3
После нажатия клавиши ENTER вы увидите курсор в начале третьей строки.
Это может быть очень полезно, если вы знаете, что в одном из ваших файлов конфигурации в определенной строке есть синтаксическая ошибка, и вы хотите перейти к этой строке, чтобы понять, где находится ошибка.
В следующей таблице приведены некоторые команды, которые будут вам полезны для перемещения по файлу:
Команда | Описание |
---|---|
:0 | Перейти к началу файла (нулевая строка) |
:$ | Перейти в конец файла |
:n | Перейти к строке n |
0 | Перейти к началу строки |
^ | Перейти к первому непустому символу в строке |
$ | Перейти в конец строки |
H | Перейти к верхней части экрана |
M | Переместить в середину экрана |
L | Перейти к нижней части экрана |
b | Перейти к предыдущему слову |
w | Перейти к следующему слову |
Думаю, я предоставил вам достаточно возможностей для быстрого перемещения по файлам в vim 🙂
Попробуйте каждый из них, прежде чем перейти к следующему разделу. Это поможет вам запомнить все команды к тому времени, как вы закончите читать эту статью.
Они могут быть очень полезны, когда вам нужно быстро редактировать файлы!
Вставка, копирование и удаление строк
Одной из основных операций, которую вам придется выполнять при редактировании файла, является добавление новых строк.
Быстрый способ вставить новую строку с помощью vim — нажать букву «o
» в командном режиме.
Это автоматически создаст пустую строку под текущей строкой, переместит курсор в начало новой пустой строки и переключит vim в режим вставки, что позволит вам написать текст.
Еще одна распространенная операция — копирование строк, часто потому, что нам нужно добавить строки, немного похожие на уже существующие, и просто изменить несколько слов.
Ниже вы можете увидеть пример, где мы копируем следующую строку и изменяем только ее часть:
auth.endpoint=/api/auth/v1
~
~
~
~
"vim_tutorial.txt" 1L, 27C
Сначала скопируйте строку и вставьте ее копию под ней. Для этого:
- Перейдите в любое место первой строки в командном режиме.
- Нажмите
yy
, чтобы скопировать строку (скопировать в буфер обмена). - Нажмите
p
, чтобы вставить строку ниже.
auth.endpoint=/api/auth/v1
auth.endpoint=/api/auth/v1
~
~
~
~
"vim_tutorial.txt" 2L, 54C written
Теперь переключитесь в режим вставки и примените следующие изменения ко второй строке:
auth.endpoint=/api/auth/v1
analytics.endpoint=/api/analytics/v1
~
~
~
~
"vim_tutorial.txt" 2L, 64C written
Затем, предположим, вы хотите удалить строку…
Просто переместите курсор куда-нибудь на эту строку и нажмите dd
. Строка исчезнет.
Как копировать, вставлять и удалять несколько строк
Иногда вам может потребоваться скопировать и вставить несколько строк в файл.
В предыдущем разделе мы увидели, как использовать yy
и p
, чтобы сделать это для одной строки.
Чтобы сделать это с двумя, тремя, четырьмя строками и т. д., вы можете:
- Переместите курсор на первую строку блока строк, который вы хотите скопировать.
- Введите
2yy
или3yy
или4yy
и т. д. в зависимости от количества строк, которые вы хотите скопировать. - Перейдите к последней строке блока и нажмите «
p
».
Это вставит все скопированные нами строки сразу после первого блока строк.
То же самое относится и к удалению нескольких строк…
Например, чтобы удалить две, три, четыре строки, используйте команды 2dd
, 3dd
и 4dd
и т. д.
Попробуйте, прежде чем продолжить.
Поиск текста в файле
Я не могу сосчитать, сколько раз мне приходилось искать текст в файле, редактируя его в Vim.
Как вы, возможно, знаете, команду grep можно использовать и для поиска текста в файле.
Так зачем же делать то же самое с vim?
Если вы хотите найти и изменить текст немедленно в редакторе, вы обычно ищете текст в файле с помощью vim.
Grep, с другой стороны, в основном используется для поиска файлов, содержащих определенный шаблон.
Предположим, например, что вы хотите изменить значение свойства где-то в длинном файле конфигурации.
Чтобы быстро перейти к тому месту в файле, где находится нужный мне текст, я могу использовать косую черту в командном режиме.
В качестве примера я открою файл конфигурации для демона SSH в Linux. Я хочу найти AuthorizedKeysFile в следующем файле:
vim /etc/ssh/sshd_config
После открытия файла в vim я буду в командном режиме, а курсор будет находиться в начале первой строки.
Для поиска определенного текста я могу просто ввести косую черту (/), а затем AuthorizedKeysFile.
# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
....
....
[ more lines in the file]
....
....
/AuthorizedKeysFile
При нажатии Enter курсор переместится к первому вхождению искомого текста.
Кроме того, в случае, если в файле встречается несколько раз один и тот же текст, вы можете использовать букву n
(все еще в командном режиме), чтобы перейти к следующему вхождению текста в файле.
Как копировать и удалять слова
Иногда вам может понадобиться скопировать и вставить длинную строку в разные места файла.
Для этого переместите курсор в начало слова, которое вы хотите скопировать, и убедитесь, что вы находитесь в командном режиме.
Затем введите yiw
, чтобы скопировать нужное вам слово, переместитесь туда, куда вы хотите вставить слово, и нажмите p
(все еще находясь в командном режиме).
Аналогичным образом вы можете использовать diw
для удаления слова, переместив курсор в начало слова, которое вы хотите удалить.
Еще несколько полезных трюков Vim
Давайте рассмотрим несколько приемов, которые могут оказаться очень полезными при работе с текстовыми файлами в vim.
- Добавьте номера строк в Vim: в командном режиме введите :set number и нажмите Enter. Чтобы скрыть номера строк, введите :set nonumber.
- Подсветка синтаксиса: чтобы включить подсветку синтаксиса, введите :syntax on, а затем нажмите Enter (в командном режиме). Чтобы скрыть цвета, выделяющие синтаксис, используйте :syntax off.
- Повторить или повторить последнюю команду: чтобы повторить команду, можно использовать точку (.) в командном режиме. Например, попробуйте скопировать и вставить строку, используя yy, а затем p, а затем нажмите точку, посмотрите, что произойдет.
- Отменить изменение: Это ОЧЕНЬ ПОЛЕЗНАЯ команда! Если вы внесли изменения в файл и поняли, что они неверны, вы можете просто отменить изменение, нажав букву «u» в командном режиме.
- Переместить строку вниз и вверх: поместите курсор на строку, которую вы хотите переместить. Чтобы переместить ее вниз, введите :m +1. Чтобы переместить ту же строку вверх, введите :m -2.
- Преобразовать строку в верхний регистр: используйте команду gUU.
- Преобразовать строку в нижний регистр: используйте команду guu.
- Подсчитать количество слов: чтобы подсчитать количество слов в текстовом файле с помощью vim, введите g, а затем Ctrl-g. Вы увидите вывод, аналогичный показанному ниже, в нижней части экрана vim:
Col 7 of 45; Line 3 of 3; Word 22 of 30; Byte 98 of 137
В этом конкретном файле у нас 30 слов, и курсор в данный момент находится на слове 22.
Найти и заменить
Мы уже видели, как найти текст в файле с помощью vim.
На протяжении многих лет я часто использую команду, которая позволяет искать определенный текст и заменять его другим текстом.
Когда это может потребоваться?
Например, если вы хотите заменить все вхождения строки в файле с помощью одной команды. Это очень распространено в файлах конфигурации.
Представьте, что у вас есть следующий файл:
This is a TO_BE_REPLACED tutorial. TO_BE_REPLACED is a Linux text editor.
In this tutorial you will learn TO_BE_REPLACED commands. TO_BE_REPLACED is a very powerful editor.
И вы хотите заменить текст TO_BE_REPLACED на слово «vim».
В качестве отправной точки можно использовать следующую команду:
:s/old_text/new_text/
Давайте посмотрим, что он делает, если применить его к нашему текстовому файлу, удерживая курсор на первой строке:
:s/TO_BE_REPLACED/vim/
После нажатия Enter содержимое файла станет следующим:
This is a vim tutorial. TO_BE_REPLACED is a Linux text editor.
In this tutorial you will learn TO_BE_REPLACED commands. TO_BE_REPLACED is a very powerful editor.
Как вы видите, единственный текст, который был заменен, — это первое вхождение TO_BE_REPLACED в первой строке.
Как нам заменить все вхождения в первой строке?
С помощью следующей команды…
:s/TO_BE_REPLACED/vim/g
Отличие от предыдущей команды заключается в букве g в конце, которая применяет команду замены ко всей строке, а не только к первому вхождению текста, который мы хотим заменить.
Но это не решает проблему в целом.
Я по-прежнему хочу иметь возможность заменить TO_BE_REPLACED в каждой строке моего файла.
Для этого я могу добавить 1,$ после двоеточия в команде. Это выражение применяет изменение ко всему файлу, поскольку 1 обозначает строку 1, а $ обозначает конец файла.
Используйте следующую команду и подтвердите изменения файла ожидаемым образом:
:1,$s/TO_BE_REPLACED/vim/g
Попробуйте! Работает?
За свою карьеру я, наверное, использовал эту команду тысячи раз!
Как открыть несколько файлов в Vim
Возможность открыть два файла в одном окне vim может помочь, когда вам нужно проверить информацию в одном файле, чтобы внести изменения в другой файл.
Давайте посмотрим, как это работает…
Сначала я редактирую файл vim_file1.txt с помощью следующей команды:
vim vim_file1.txt
Затем в командном режиме vim я могу использовать команду :vsplit, чтобы разделить экран по вертикали на две части, расположенные рядом.
На этом этапе в обоих разделах отображается исходный файл. Чтобы перейти к нужному разделу, используйте сочетание клавиш Ctrl+w, а затем стрелку вправо.
Затем, чтобы открыть другой файл в правой секции, используйте :e filename. Так, в нашем случае, e: vim_file2.txt.
Содержимое второго файла вы увидите в правом разделе:
Очень удобно!
Заключение
Редактор vim очень мощный!
Мы рассмотрели так много разных команд в этом уроке. Пройдитесь по каждой из них, чтобы убедиться, что вы их помните, когда они вам понадобятся.
Легко забыть то, чем мы не пользуемся.
Наконец, краткий обзор того, что мы узнали:
- Основные режимы vim: командный режим и режим вставки.
- Как изменить и сохранить изменения, примененные к файлу.
- Лучший способ быстро перемещаться по текстовому файлу.
- Способ вставки, копирования и удаления строк.
- Как быстро найти и заменить текст.
- Vim позволяет разделить экран и открывать несколько файлов одновременно.
- Еще много трюков с vim.
И теперь у вас есть знания, которые позволят вам стать гуру энергичности в своей команде! 😀