Как редактировать несколько файлов с помощью редактора Vim
Иногда вы попадаете в ситуацию, когда хотите внести изменения в несколько файлов. Или вы можете скопировать содержимое одного файла в другой. Если вы находитесь в режиме графического интерфейса, вы можете просто открыть файлы в любом графическом текстовом редакторе, например gedit, и использовать CTRL+C и CTRL+V для копирования/вставки содержимого. В режиме CLI вы не можете использовать такие редакторы. Не беспокойся! Там, где есть редактор vim, есть и способ! В этом уроке мы научимся редактировать несколько файлов одновременно с помощью редактора Vim. Поверьте мне, это очень интересная функция Vim!
Установите Vim в Linux
Редактор Vim доступен в официальных репозиториях большинства дистрибутивов Linux. Таким образом, вы можете установить его, используя менеджер пакетов по умолчанию.
Например, в Arch Linux и его вариантах вы можете установить его с помощью команды:
sudo pacman -S vim
В Debian, Ubuntu:
sudo apt-get install vim
В RHEL, CentOS:
sudo yum install vim
В Fedora:
sudo dnf install vim
В openSUSE:
sudo zypper install vim
Редактируйте несколько файлов одновременно с помощью редактора Vim в Linux.
Может быть много способов редактировать кратные файлы с помощью редактора Vim. Я знаю два метода.
Способ 1
У меня есть два файла, а именно file1.txt и file2.txt, с кучей случайных слов. Давайте посмотрим на них.
$ cat file1.txt
ostechnix
open source
technology
linux
unix
$ cat file2.txt
line1
line2
line3
line4
line5
Теперь давайте отредактируем эти два файла одновременно с помощью редактора Vim. Для этого запустите:
vim file1.txt file2.txt
Vim будет отображать содержимое файлов по порядку. Сначала будет показано содержимое первого файла, затем второго файла и так далее.
Редактирование нескольких файлов с помощью редактора Vim
Переключение между файлами
Чтобы перейти к следующему файлу, введите:
:n
Переключение между файлами в редакторе Vim
Чтобы вернуться к предыдущему файлу, введите:
:N
Здесь N — капитал (введите SHIFT+n).
Начните редактировать файлы так же, как вы это делаете в редакторе Vim. Нажмите «i», чтобы переключиться в интерактивный режим и изменить содержимое по своему вкусу. После этого нажмите ESC, чтобы вернуться в обычный режим.
Vim не позволит вам перейти к следующему файлу, если есть несохраненные изменения. Чтобы сохранить изменения в текущем файле, введите:
ZZ
Обратите внимание, что это двойные заглавные буквы ZZ (SHIFT+zz).
Чтобы отказаться от изменений и перейти к предыдущему файлу, введите:
:N!
Чтобы просмотреть файлы, которые в данный момент редактируются, введите:
:buffers
Просмотр файлов в буфере в VIm
Внизу вы увидите список загруженных файлов.
Список файлов в буфере в Vim
Чтобы переключиться на следующий файл, введите :buffer, а затем номер буфера. Например, чтобы переключиться на первый файл, введите:
:buffer 1
Или просто сделайте:
:b 1
Переключиться на следующий файл в Vim
Просто запомните эти команды, чтобы легко переключаться между буферами:
:bf # Go to first file.
:bl # Go to last file
:bn # Go to next file.
:bp # Go to previous file.
:b number # Go to n'th file (E.g :b 2)
:bw # Close current file.
Открытие дополнительных файлов для редактирования
В настоящее время мы редактируем два файла, а именно file1.txt, file2.txt. Возможно, вы захотите открыть для редактирования другой файл с именем file3.txt. Что вы будете делать? Это просто! Просто введите :e, а затем имя файла, как показано ниже.
:e file3.txt
Откройте дополнительные файлы для редактирования в Vim.
Теперь вы можете редактировать файл file3.txt.
Чтобы просмотреть, сколько файлов редактируется в данный момент, введите:
:buffers
Просмотр всех файлов в буферах в Vim
Обратите внимание, что вы не можете переключаться между открытыми файлами с помощью :e, используя либо :n, либо :N. Чтобы переключиться на другой файл, введите :buffer, а затем номер файлового буфера.
Копирование содержимого одного файла в другой
Вы знаете, как открывать и редактировать несколько файлов одновременно. Иногда вам может понадобиться скопировать содержимое одного файла в другой. Это тоже возможно. Переключитесь на файл по вашему выбору. Например, предположим, что вы хотите скопировать содержимое файла file1.txt в файл file2.txt.
Для этого сначала переключитесь на файл file1.txt:
:buffer 1
Поместите курсор перемещения перед строкой, которую необходимо скопировать, и введите yy, чтобы скопировать (скопировать) строку. Затем перейдите к файлу file2.txt:
:buffer 2
Поместите курсор мыши туда, куда вы хотите вставить скопированные строки из файла file1.txt, и введите p. Например, вы хотите вставить скопированную строку между строкой 2 и строкой 3. Для этого поместите курсор мыши перед строкой и введите p.
Пример вывода:
line1
line2
ostechnix
line3
line4
line5
Копирование содержимого одного файла в другой с помощью Vim
Чтобы сохранить изменения, внесенные в текущий файл, введите:
ZZ
Еще раз обратите внимание, что это двойная заглавная буква ZZ (SHIFT+z).
Сохранить изменения во всех файлах и выйти из редактора vim. тип:
:wq
Аналогично вы можете скопировать любую строку из любого файла в другие файлы.
Копирование всего содержимого файла в другой
Мы знаем, как скопировать одну строку. А как насчет всего содержимого файла? Это тоже возможно. Допустим, вы хотите скопировать все содержимое файла file1.txt в файл file2.txt.
Для этого сначала откройте файл file2.txt:
vim file2.txt
Если файлы уже загружены, вы можете переключиться на file2.txt, набрав:
:buffer 2
Переместите курсор в то место, куда вы хотели скопировать содержимое файла file1.txt. Я хочу скопировать содержимое файла file1.txt после строки 5 в файл file2.txt, поэтому я переместил курсор на строку 5. Затем введите следующую команду и нажмите клавишу ENTER:
:r file1.txt
Копирование всего содержимого файла в другой файл
Здесь r означает читать.
Теперь вы увидите, что содержимое файла file1.txt вставлено после строки 5 в файл file2.txt.
line1
line2
line3
line4
line5
ostechnix
open source
technology
linux
unix
Копирование всего содержимого файла в другой файл с помощью Vim
Чтобы сохранить изменения в текущем файле, введите:
ZZ
Чтобы сохранить все изменения во всех загруженных файлах и выйти из редактора vim, введите:
:wq
Способ 2
Другой способ открыть несколько файлов одновременно — использовать флаги -o или -O.
Чтобы открыть несколько файлов в горизонтальных окнах, запустите:
vim -o file1.txt file2.txt
Откройте несколько файлов одновременно в Vim
Для переключения между окнами нажмите CTRL-w (т. е. нажмите CTRL+w и снова нажмите w). Или используйте следующие сочетания клавиш для перемещения между окнами.
- CTRL-w k — верхнее окно
- CTRL-w j — нижнее окно
Чтобы открыть несколько файлов в вертикальных окнах, запустите:
vim -O file1.txt file2.txt file3.txt
Откройте несколько файлов в вертикальных окнах в Vim
Для переключения между окнами нажмите CTRL-w (т. е. нажмите CTRL+w и снова нажмите w). Или используйте следующие сочетания клавиш для перемещения между окнами.
- CTRL-w l — левое окно
- CTRL-w h – правое окно
Все остальное аналогично описанному в способе 1.
Например, чтобы просмотреть список загруженных в данный момент файлов, выполните:
:buffers
Для переключения между файлами:
:buffer 1
Чтобы открыть дополнительный файл, введите:
:e file3.txt
Чтобы скопировать все содержимое файла в другой:
:r file1.txt
Единственное отличие метода 2 заключается в том, что после сохранения изменений в текущем файле с помощью ZZ файл автоматически закроется. Кроме того, вам необходимо закрыть файлы один за другим, набрав :wq. Но если бы вы следовали методу 1, то при вводе :wq все изменения будут сохранены во всех файлах, и все файлы будут закрыты сразу.
Более подробную информацию можно найти на страницах руководства.
man vim
Рекомендуем прочитать:
- Как закомментировать несколько строк одновременно в редакторе Vim
- Как управлять плагинами Vim с помощью Vundle в Linux
- Как использовать функцию проверки орфографии в текстовом редакторе Vim
Теперь вы знаете, как редактировать несколько файлов с помощью редактора vim в Linux. Как видите, редактировать несколько файлов не так уж и сложно. Редактор Vim имеет более мощные функции.
В ближайшие дни мы напишем больше советов по Vim. Следите за обновлениями!