Более 30 команд Vim
В какой-то момент каждому пользователю Linux приходится изменить файл, и какой лучший редактор для этого может сделать, чем vim, его команды позволяют вам делать практически все, что вы хотите.
Что такое Vim в Linux?
Vim (что означает Vi iMproved) — это основной текстовый редактор, доступный в интерфейсе командной строки (CLI) Linux для создания и редактирования файлов. Он обеспечивает два основных режима: командный режим и режим вставки.
В этой статье мы начнем с основных команд 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 , чтобы выполнить команду:
Что делать, если мы хотим выйти без сохранения содержимого нашего файла?
Мы можем использовать :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 вы увидите курсор в начале третьей строки.
Это может быть очень полезно, если вы знаете, что в одном из ваших файлов конфигурации есть синтаксическая ошибка в определенной строке, и вы хотите перейти к этой строке, чтобы понять, где находится ошибка.
В следующей таблице показаны некоторые команды, которые могут оказаться полезными для перемещения по файлу:
Думаем, у вас вам достаточно возможностей для быстрого перемещения по файлам в vim 🙂
Попробуйте каждый из них, прежде чем перейти к следующему разделу. Это поможет вам запомнить все команды к тому моменту, когда вы закончите читать эту статью. Они могут быть очень полезны, когда вам нужно быстро редактировать файлы!
Вставка, копирование и удаление строк
Одна из основных вещей, которые вам придется делать при редактировании файла, — это добавление новых строк.
Быстрый способ вставить новую строку с помощью vim — нажать букву «о» в командном режиме.
Это автоматически создаст пустую строку под текущей строкой, переместит курсор в начало новой пустой строки и переключит 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 имя_файла . В нашем случае это e: vim_file2.txt.
Вы увидите, что содержимое второго файла появится в правом разделе:
Очень кстати!
Заключение
Редактор vim очень мощный! В этом уроке мы рассмотрели очень много разных команд. Просмотрите каждый из них, чтобы запомнить их, когда они вам понадобятся.