Урок 13. Редактирование текстовых файлов. Редактор vim

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

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

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

 

Немного теории

Vim имеет 4 режима работы:

    • Обычный режим
    • Командный режим или режим “последней строки”
    • Режим вставки или редактирования
    • Режим выделения текста (визуальный)

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

Отображение обычного режима редактора Vim

 

Чтобы из обычного режима попасть в командный режим необходимо набрать знак : (двоеточие). В этом режиме можно вводить более “продвинутые” команды, которые позволяют открывать другие файлы и выполнять команды из shell, bash. Чтобы вернуться в обычный режим нажмите 2 раза на ESC. Вот как выглядит командный режим:

Отображение командного режима редактора Vim

 

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

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

 

Для входа в визуальный режим наберите команду v (сокр. от visual - визуальный, видимый) или V, находясь в обычном режиме. Для возврата в обычный режим нажмите 2 раза на ESC. Вот как выглядит режим выделения:

Визуальный режим редактора Vim

 

А в чем разница между v и V?

С помощью v можно выделять каждый символ по отдельности, а с V - сразу целую строку.

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

 

Теперь попробуем выполнить те же операции, что и в предыдущем уроке.

У нас имеется файл Configuration.txt. Необходимо сделать следующее:

    1. Создать новый текстовый файл Example.txt
    2. В файле Configuration.txt найти 28-ю строчку
    3. Начиная с 28-й строки выделить и скопировать в буфер 10 строк текста
    4. Вставить текст из буфера в файл Example.txt
    5. Закрыть файл Configuration.txt
    6. В файле Example.txt найти и удалить строки, которые содержат слово “configuration”
    7. Затем в конец файла добавить произвольный текст
    8. Сохранить изменения в файле и закрыть


1. Создадим файл Example.txt:

vim Example.txt

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

В дальнейшем все команды командного режима будут сопровождаться  двоеточием, например так :w. Для закрытия файла используем команду :q (сокр. от quit - выходить).

 

А можно одной командой сохранить и закрыть файл?

Да, в vim можно комбинировать несколько команд. Например, :wq означает сохранить и закрыть. В дальнейшем мы изучим больше команд и поймем как их можно между собой комбинировать.

 

2. Теперь откроем файл Configuration.txt и найдем 28-ю строчку:

vim Configuration.txt

Находясь в обычном режиме наберем номер строки и комбинацию Shift +G и курсор остановится на нужной строке. Чтобы было удобнее отслеживать номера строк введем команду  :set number

Отслеживание номера строки в редакторе Vim

 

Чтобы удалить номера строк введем :set nonumber. Кстати, при наборе команд в обычном режиме в терминале ничто не отображается. 

Существует и второй способ. 

Для этого наберем символ : (двоеточие), то есть перейдем в командный режим и просто введем номер строки. Затем нажимаем Enter.

 

3. Теперь выделим и скопируем текст: 

Для этого выполним v или V и с помощью стрелок выделим часть текста:

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

 

Теперь скопируем текст в буфер обмена с помощью команды y. Редактор автоматически перейдет в обычный режим.

 

4. Для вставки текста в файл Example.txt не нужно держать файл Configuration.txt открытым. Однако попробуем открыть файл Example.txt, не закрывая Configuration.txt. 

Для этого выполним команду :sp Example.txt. В этом же терминале откроется второе окно и можно сразу видеть и редактировать оба файла:

При копировании текста в редакторе Vim открываются 2 файла

 

В открывшемся файле вставим скопированный текст командой p (сокр. от put - ставить, помещать). Для того, чтобы переключаться между открытыми файлами воспользуемся комбинацией Ctrl + W (иногда требуется выполнить данную комбинацию 2 раза).

 

5. Закроем Configuration.txt с помощью :q.

Кстати, если файл редактировали и не сохранили, то при выполнении команды :q редактор выдаст ошибку:

Отображение ошибки при несохраненных изменениях

 

Если не нужно сохранять изменения, то просто выполним команду :q!.

 

6. Теперь найдем и удалим строки, содержащие слово “configuration”. 

Существуют 2 варианта поиска слов:

    • /искомое_слово - поиск от текущей позиции и до конца файла
    • ?искомое_слово - поиск от текущей позиции и до начала файла

 

Для продолжения поиска нажимаем на n, для перехода к предыдущему найденному слову нажмем на N. Найденные слова могут быть подсвечены, но это зависит от настроек редактора. Все настройки хранятся в файле /etc/vim/vimrc

Когда строки найдены, то удалить их можно также 2-мя способами:

    • посимвольно с помощью клавиши Delete или x
    • сразу целую строку командой dd

 

Кстати, все удаленные символы и строки сохраняются в буфере обмена и их можно вставить в любом месте с помощью команды p.

 

А что делать, если случайно удалено не то, что хотелось?

Для отката действий используем u (сокр. от undo - отмена) или U.

 

А в чем между ними разница?

u используется для отмены последнего действия, а U - для всех действий. То есть, чтобы отменить последние 5 действий нужно 5 раз нажать на клавишу u либо можно все это сделать одним нажатием на U. Для отмены самого отката, то есть для возврата в состояние до выполнения команды u используем комбинацию Ctrl + R.

 

7. И наконец последнее - добавление произвольного текста.

Здесь все просто - перейдем в режим редактирования командой i и набираем произвольный текст. Команды в данном режиме не работают. Затем перейдем в обычный режим.

 

8. Сохраняем и закрываем файл с помощью :wq.

 

Итак, подытожим:

:q - закрыть файл

:wq - сохранить и закрыть файл

:!q -  закрыть файл без сохранения изменений

:w - сохранить изменения

стрелки - перемещения по файлу

i - переход в режим редактирования

v, V - переход в визуальный режим

u, U - откат действий

Ctrl + R - отмена отката действий

y - копирование в буфер обмена

p - вставка из буфера обмена

x, Delete - посимвольное удаление

dd - построчное удаление

/искомое_слово - поиск слова вперед от текущей позиции

скомое_слово - поиск слов назад от текущей позиции

n - продолжение поиска

N - возврат к предыдущему найденному слову

номер_строки + Ctrl + G - переход на указанную строку

:номер строки - переход на указанную строку

:sp файл - открывает новый файл в текущем терминале, текущий файл при этом остается открытым.

Ctrl + W - переключение между открытыми файлами одного терминала.

 

Для начала этих команд будет достаточно. Приведу еще парочку полезных команд:

vimtutor - выполняется из bash. Представляет собой встроенный краткий курс по vim.

w - переход на одно слово вперед

2w - переход на слова вперед. Цифра указывает на сколько слов необходимо перейти.

b - переход на одно слово назад

2b - переход на 2 слова назад

gg - переход в начало файла

G - переход в конец файла

0 - переход в начало строки

$ - переход в конец строки

:help - справка

d$ - удаление строки, начиная от текущей позиции и до конца строки

dd - удаление всей строки

d2w - удаление 2-х первых слов, то есть удаление вперед от текущей позиции

d2b - удаление 2-х последних слов, то есть удаление назад от текущей позиции

 

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

Графический редактор Vim

 

Для работы в графическом редакторе понадобится меньше команд. Для изучения графического редактора воспользуемся встроенным руководством gvimtutor

Руководства пользователя для графического редактора Vim

 

Редактор поддерживает множество настроек, которые хранятся в /etc/vim/vimrc. Изменяя данные настройки можно максимально адаптировать редактор для своего удобства. 

На этом все.