Распространённые операции: редактируем файлы с "vim"
✍ Написано: Giansante Gabriele, 2001 ↺ Обновлено: 06/10/2016 ⛿ Перевод Марины Пыльник
И для программирования и для конфигурации разных приложений нам всегда требуется умение
написания текста, программного кода и установки различных параметров конфигурации.
Уметь
редактировать просто необходимо.
Одним из популярных редакторов, которым снабжены все дистрибутивы Linux, является редактор
vim (VIM - Vi IMproved,
Manpage di VIM (1)
).
Входя в Linux RedHat, Linux Mandrake и другие дистрибутивы, он до сих пор представляет собой самый
широко используемый редактор в среде Linux, особенно в дистанционном использовании, благодаря своим большим возможностям
и малым занимаемым ресурсам. Вообще-то,"vim" - это интерфейс текстового редактора "
ed"
И, если уж говорить прямо,
он не сильно-то интуитивен и немного сложен в использовании. Однако, изучив его, привыкнув к использованию, просто
невозможно от него отказаться.
"vi" имеет два основных режима работы:
режим ввода команд (командный режим,который установлен по умолчанию) и
режим написания или изменения текста(содержимого), так называемый
текстовый режим.
Имеется, например, ещё и
визуальный режим, о котором, кстати, я немного(вкратце) расскажу ниже.
Командный режим используется для ввода специальных команд, таких как сохранение файла, отмена изменений текста,
либо, например, поиск строки, подстроки, перемещение на нужную строку, поиск совпадения для открытия(закрытия) скобки и т.д.
А текстовый режим нужен для создания или изменения содержимого в файле путём непосредственного написания.
Практически всё, что пишется в командном режиме интерпретируется как команда "vi",
в то время как то, что пишется в другом режиме воспринимается как текст.
Предположим, что мы открываем файл "test.conf" с vim: "
vim test.conf".
Как только входим в vim, мы сразу же оказываемся в режиме ввода команды с
первой строки открытого файла.
Изменение режима работы
В зависимости от режима, в котором мы находимся, возможно выполнять следующие действия
Клавиша |
Новый режим |
Результат |
Режим ввода команд |
i |
написание/ввод |
Возникнет надпись "INSERT" и появится возможность
ввести текст на указанную курсором позицию без замены уже существующего текста, если таковой уже введён |
INS |
написание/ввод |
Аналогично "i" |
INS INS или i INS |
написание/замена |
Появится надпись "REPLACE" и можно
будет ввести текст на указанную курсором позицию заменив в этом случае уже существующий текст |
o (буква) |
написание/ввод |
Добавится пустая строка под той, на которой находится курсор, в режиме
написание/ввода теста (смотри клавишу "i") |
O (буква) |
написание/ввод |
Как "o", но при этом появится строка над той, где находится курсор |
a |
написание/замена |
Входит в режим написание/ввод и можно начать ввод текста после символа,
на котором находится курсор |
A |
написание/ввод |
Входит в режим написание/ввод и можно начать писать в конце строки,
на которой находится курсор |
s |
написание/ввод |
Входит в режим написание/ввод и заменяет
символ, находящийся на позиции курсора, тем текстом, который будет набран |
S |
написание/ввод |
Входит в режим написание/ввод и заменяет строку, на которой находится
курсор, текстом который будет набран |
C |
написание/ввод |
Входит в режим написание/ввод и будет удалён текст начиная с места нахождения
курсора и до конца строки |
v |
визуальный режим |
Появится надпись "VISUAL" и можно будет выполнять такие действия как
выбор текста, копирование, вставка, удаление. Некоторые команды относящиеся к этому режиму будут описаны далее |
Текстовый режим |
ESC |
команды |
Переход в режим командного ввода. Здесь не будет более возможно вводить текст набирая его с
клавиатуры до последующего возвращения в текстовый режим |
Перемещения внутри текста
Для перемещения внутри текста, в
командном режиме нажать клавиши (или набрать вручную команды)
по следующей схеме:
Клавиша |
Команда |
Результат |
Режим введения команды |
СТРЕЛКА ВВЕРХ или k |
|
Смещает курсор вверх |
СТРЕЛКА ВНИЗ или j |
|
Смещает курсор вниз |
СТРЕЛКА ВПРАВО или l |
|
Смещает курсор вправо |
СТРЕЛКА ВЛЕВО или h |
|
Смещает курсор влево |
HOME или ^ |
|
Смещает курсор на начало строки |
END или $ |
|
Смещает курсор в конец строки |
PAGE UP |
|
Быстрое смещение курсора вверх (по целой странице) |
PAGE DOWN |
|
Быстрое смещение курсора вниз (по целой странице) |
w |
|
Смещает курсор на начало следующего слова |
b |
|
Смещает курсор на начало предыдущего слова |
e |
|
Смещает курсор на конец слова, на котором находится курсор |
( |
|
Смещает курсор на начало предыдущей фразы. Внимание: фраза всегда заканчивается
точкой и последующим пробелом |
) |
|
Смещает курсор на конец следующей фразы. Внимание: фраза всегда заканчивается
точкой и последующим пробелом |
G |
|
Смещает курсор в конец документа |
|
:<num> |
Размещает курсор на строке номер "<num>" (целое число). Нажать
"ENTER" после написания команды |
|
<num>G |
Как ":<num>" |
Текстовый режим |
СТРЕЛКА ВВЕРХ |
|
Смещает курсор вверх |
СТРЕЛКА ВНИЗ |
|
Смещает курсор вниз |
СТРЕЛКА ВПРАВО |
|
Смещает курсор вправо |
СТРЕЛКА ВЛЕВО |
|
Смещает курсор влево |
HOME |
|
Смещает курсор на начало строки |
END |
|
Смещает курсор на конец строки |
PAGE UP |
|
Быстрое смещение курсора вверх (сразу на целую страницу) |
PAGE DOWN |
|
Быстрое смещение курсора вниз (сразу на целую страницу) |
Функции редактирования
Удаление текста, копирование, вставка, и т.п., всё это классические функции редактирования.
Из
командного режима, нажать клавиши (или набрать вручную команды)
по следующей схеме:
Клавиша |
Команда |
Результат |
Режим ввода команды |
|
d<num>d |
Удаляет "<num>" (целое число) строк начиная с той, где находится
курсор |
|
dd |
Удаляет строку, на которой находится курсор |
DELETE или x |
|
Удаляет символ на месте нахождения курсора |
BACKSPACE |
|
Смещает курсор влево и удаляет новый символ на котором собственно и находится курсор ("BACKSPACE" это клавиша для удаления,обычно находится над "ENTER") |
u |
|
Отменяет изменения в обратном хронологическом порядке, т.е. начиная с последней выполненной операции |
CTRL+r |
|
Возвращает обратно то, что было отменено. Полезно, например, когда ошиблись отменить
изменения с "u" |
v |
|
Входит в визуальный режим. Можно будет выделять текст с места нахождения курсора
перемещаясь клавишами движения (стрелки, клавиши "Page", и т.д.) |
Визуальный режим |
ESC или v |
|
Прекращает работу визуального режима и выходит из него |
y |
|
Копирует в буфер выделенный текст |
x |
|
Вырезает выделенный текст и копирует его в буфер |
p |
|
Вставляет на позицию курсора текст, вырезанный клавишей "x" или скопированный клавишей "y" |
> |
|
Делает отступ выделенного текста один раз направо |
< |
|
Делает отступ выделенного текста один раз налево |
|
<num>> |
Делает отступ выделенного текста "<num>" (целое число) раз направо (например "3>" делает три отступа) |
|
<num>< |
Делает отступ выделенного текста "<num>" (целое число) раз налево (например. "3<" делает три отступа) |
Текстовый режим |
DELETE |
|
Удалить символ на месте нахождения курсора |
BACKSPACE |
|
Смещает курсор на один символ влево и удаляет символ, на котором собственно находится курсор ("BACKSPACE" это клавиша для удаления,обычно находится над "ENTER") |
Команды относящиеся к файловой системе
Частью таких команд являются команды, относящиеся к сохранению, загрузке, вставки из внешнего файла, и т.д.
Для управления несколькими файлами используется буфер (буферный лист) с системой навигации от одного файла к другому.
Из
Режима введения команд (командного режима), набрать одну из следующих комбинаций клавиш и нажать "ENTER" для получения указанного эффекта:
Команда |
Результат |
:w |
Сохраняет файл. Обратите внимание на эту команду, т.к. "w" записывает файл даже когда не были внесены изменения |
:w! |
Как "w", но делает "обязательным" сохранение(или хотя бы пытается), даже когда это не разрешено (например, файл только в режиме
чтения) |
:w <имяФайла> |
Сохраняет новый файл с именем "<имяФайла>" |
:r <имяФайла> |
Вносит на текущую позицию курсора содержимое файла "<имяФайла>" |
:r !<команда> |
Вносит результат системной команды "<команда>" на текущую позицию курсора.
Например: ":r !ps -aux" |
:badd <названиеФайла> |
Добавляет файл "<названиеФайла>" в буфер |
:bnext |
Переходит на следующий файл в буфере |
:bprevious |
Переходит на предыдущий файл в буфере |
:files |
Показывает какие файлы находятся в буфере, присваивая каждому свой номер |
:b<num> |
Переходит непосредственно на определённый файл из тех, которые находятся в буфере. Связь
номер-файл может быть найдена с помощью ":files". <num> является номером файла |
:bdelete <num> |
Удаляет файл под номером <num> из буфера. Связь
номер-файл может быть найдена с помощью ":files" |
:x |
Сохраняет файл и выходит из редактора |
:q |
Выходит из редактора |
:q! |
Выход из редактора. Обратите внимание на то,что несохранённые изменения могут быть утеряны. В
отличии от "q", не будет запроса сохранить изменения несохранённые ранее |
Другие функции и команды
Из
командного режима нажать клавиши по следующей схеме:
Клавиша |
Результат |
CTRL+g |
Показывает различную информацию о позиции курсора (номер строки, номер колонны, процентное отношение
местонахождения в тексте, название файла и т.д.) |
/ или ? |
С последующим регулярным выражением, осуществляет поиск подстроки по шаблону регулярного выражения, находя первое совпадение.
Например: "/192\.168\.0\.1" будет искать "192.168.0.1". Здесь мы не рассматриваем как пишутся регулярные выражения |
n |
Осуществляет поиск следующего вхождения(совпадения), после того, которое было уже найдено с "/" |
N |
Осуществляет поиск предыдущего вхождения(совпадения), после того, которое было уже найдено с "/" |
£ или * |
Осуществляет поиск следующего вхождения(совпадения) того слова, на котором находится курсор |
# |
Осуществляет поиск предыдущего вхождения(совпадения) того слова, на котором находится курсор |
% (процент) |
Осуществляет поиск скобки, т.е. находит местоположение либо открытия либо закрытия скобки,
на которой находится курсор. Работает с круглыми, квадратными и фигурными скобками |
Фильтровать текст посредством внешних команд
И напоследок, действительно мощное свойство, которое мне бы хотелось вам продемонстрировать, относится к возможности фильтровать часть текста с помощью внешних команд.
После изложения общего правила, последует конкретный и очень полезный пример.
- Выбрать с "v" текст который хотим фильтровать (смотри "Функции редактирования")
- Как только выбран текст, нажать "!"
- Ввести команду, на которую послать выбранный текст
Текст выбранный с "v" будет заменён результатом обработки указанной команды.
Например, предположим что у нас есть неупорядоченный список имён,
Григорий
Антон
Мария
Елена
Валерий
Александр
и мы хотим упорядочить его по алфавиту. Это мы можем сделать с помощью внешней команды "sort".
Следуя указанной процедуре, введя "
!sort" после того, как выбран список,(с визуального режима), получим следующий результат
Александр
Антон
Валерий
Григорий
Елена
Мария
Заключение
Команды, которые предоставляет "vim" очень многочисленны и не ограничиваются только теми, которые были продемонстрированы. Мне хотелось
показать самые основные, словом те, которые сразу же помогут пригодиться вам в вашей работе.
Для получения полной информации набрать "
:help" в режиме ввода команд и нажать [
ENTER].
Откроется окно с инструкцией по его закрытию и консультации различных аргументов.
Обратите внимание, что не все команды могут быть действующими или поддерживаемыми всеми версиями vim(или говоря проще "vi").
Если Вы нашли эту статью полезной для себя
поделитесь ею с друзьями в социальных сетях или поставьте "Мне нравится" (вверху справа) .
Большое спасибо!
Вы должны разрешить сохранение куки-файлов и согласиться на правила о конфиденциальности для использования "поделиться" и "мне нравится".
Вы всегда можете отказаться от сохранения куки-файлов и можете удалить куки "cookieconsent_status" из вашего браузера.