Работа с VIM

Команды обычного редактора:

  • открыть файл «httpd.conf» одним из указанных способов;
  • Ctrl + F — открыть диалог поиска;
  • ввести «SSLVerif»;
  • ↵ Enter — фокус в диалоге поиска обычно стоит на поиске следующего вхождения искомого слова;
  • Esc — закрыть окно поиска;
  • Ctrl +  — снять фокус с найденного слова и перейти к следующему (в некоторых редакторах курсор проскакивает слово и переходит через слово — тогда нажимаем  не отпуская Ctrl; в других одиночное нажатие приводит лишь к снятию фокуса и нужно повторно нажать );
  • Del ― удалить «0», остаётся напечатать «1»;
  • Ctrl + S — сохранить изменения;
  • Alt + F4 — закрыть файл и выйти.

Команды VIM:

  • / — перейти в режим поиска;
  • ↵ Enter — искать;
  • n — перейти к следующему вхождению искомой строки;
  • w — переместить курсор к следующему слову;
  • r — заменить знак под курсором;
  • ZZ — сохранить изменения и выйти;
  • ZQ — выйти без сохранения изменений.

С одной стороны, у Vim более лаконичные команды, с другой же — клавиши для «обычного» редактора работают в практически неизменном виде во многих приложениях, и их нужно выучить лишь раз.

Введение[править]

Здесь я делюсь опытом работы в Vim’е. Предполагается, читатель имеет установленные Vi и Vim, а также знаком с основами работы с UNIX-подобной системой.

Помнится, когда товарищ установил FreeBSD на мою домашнюю ЭВМ, некоторые файлы открывались непонятным мне образом. Избавляясь от этого несчастья, я понял, что происходит: в системе по умолчанию, в переменной окружения EDITOR, установлен редактор Vi, и тут же сменил его на ‘ee’ (easy editor). Это действительно простой редактор, затруднений с ним возникнуть не может, однако и свободы в нем не испытать. Но вскоре его стало не хватать.

Описание работы с редактором привожу в хронологическом порядке — от простого к сложному. Так как Vim на 99 % совместим с Vi, сначала дам краткое описание работы с Vi.

Легенда сокращений и специальных символов:

Строки, начинающиеся с символа «#», - командная строка
<ESC> - нажатие клавишу Escape (или Ctrl-[)
<CR> - ... Enter
<SHIFT> - ... Shift
^x - ... Ctrl-x

Vi[править]

Отличие Vi в том, что он имеет несколько режимов работы. При этом привычный нам режим ввода текста — не основной. Основным режимом в Vi считается режим, в котором клавиатура используется для управления редактором. В этом режиме можно быстро перемещаться по тексту, переключаться в другие режимы и выполнять другие операции.

Насколько Vi быстрее других редакторов? Давайте сравним. Вот, что нужно сделать «продвинутому» пользователю, чтобы поменять местами две буквы в обычном редакторе и в Vi:

Обычный редактор:

<Shift-Стрелка вправо>
<Ctrl-x>
<Стрелка влево>
<Ctrl-v>

Vi:

xp

Переключение режимов[править]

  • «Обычный режим» — перемещение по файлу, стирание текста и другие редактирующие функции. Это — основной режим, только из него можно сразу перейти в другие режимы. Для возврата в основной режим из любого другого режима:
<ESC>, иногда 2 раза
<Ctrl-[>
  • «Режим ввода» — ввод текста. Как только завершается ввод текста, принято возвращаться в обычный режим. Заметьте, что стирание и ввод текста происходит в двух разных режимах. Перейти в него из обычного режима можно разными способами, к примеру:
i — начать ввод перед курсором
o — начать ввод с новой строки
S — очистить текущую строку и начать ввод
  • «Командный режим» — команды (операции с файлом, поиск и замена, настройка редактора и т. д.). Переход в него из обычного режима:
:
  • «Режим поиска» — ввод поискового запроса. Из обычного режима:
/ — поиск от курсора до конца документа
? — поиск от курсора до начала документа
  • «Визуальный режим» — режим выделения текста. Из обычного режима:
v

Открыть/создать файл[править]

Опишем операции, которые можно производить с файлом.

# vi mamapapa.txt           - открыть один файл
# vi mamapapa.txt +11       - открыть файл и перейти к строке 11
# vi mamapapa.txt ++11      - если файл был отрыт на строке 1, открыть его на строке 12
# vi mama.txt papa.txt      - открыть файл mama.txt, после выхода из него открыть файл papa.txt
# vi -о mama.txt papa.txt   - открыть сразу все файлы

Файл открывается в обычном режиме с помощью команды vi. Строка статуса будет отображать название файла. Мы можем просмотреть файл, переместиться по содержимому, стереть текст, но ввести текст в этом режиме нельзя.

Создание файла происходит при помощи той же команды. Собственно создание файла происходит в момент сохранения.

Для открытия или создания нового файла в обычном режиме набираем

:e filename

или

:new filename

Перед этим нужно сохранить предыдущий файл:

:w            - сохранить файл с существующим именем
:w filename   - сохранить файл с новым именем

Перемещение по файлу[править]

Самые часто используемые в Vi клавиши — клавиши перемещения. Это знаменитые h, j, k, l, соответствующие стрелкам влево, вниз, вверх и вправо. Стрелочки тоже работают (при правильном указании терминала). Также можно использовать быстрые клавиши:

  • <Ctrl-f> — на страницу (экран) вниз;
  • <Ctrl-b> — на страницу (экран) вверх;
  • <Ctrl-d> — на полстраницы (экрана) вниз;
  • <Ctrl-u> — на полстраницы (экрана) вверх;
  • <Ctrl-y> — на строку вверх, без изменения положения курсора;
  • <Ctrl-e> — на строку вниз, без изменения положения курсора;
  • 0 («ноль») — в начало текущей строки;
  • ^ — в начало текущей строки (к первому непробельному символу);
  • $ — в конец текущей строки;
  • w — на слово вправо;
  • b — на слово влево;
  • W — до пробела вправо;
  • B — до пробела влево;
  • } — абзац вниз;
  • { — абзац вверх;
  • gg — в начало файла;
  • G — в конец файла;
  • <number>G — перейти на конкретную строку <number>;
  • /<text><CR> — перейти к <text>;
  • ?<text><CR> — то же, но искать назад;
  • n — повторить поиск;
  • N — повторить поиск назад;
  • [[ — в начало функции;
  • » — к месту выполнения команды [[.

Перемещение по экрану[править]

Изменение положения экрана без изменения положения курсора. Сдвинуть страницу так, чтобы строка с курсором оказалась:

  • z- — внизу;
  • z[Enter] — вверху;
  • z. или zz — посредине.

Перемещение в пределах экрана:

  • H — на верхнюю строку (5H на пять строк ниже верхней строки);
  • M — на среднюю строку;
  • L — на последнюю строку (5L на пять строк выше нижней строки).

Редактирование файла[править]

В файле записан следующий текст:

— Винни, тебе что намазать на хлеб, мёду или сгущённого молока?

— И того, и другого, и можно без хлеба!
— Ну, если вы больше ничего не хотите…

— А что, что-то есть ещё?

Диалог симпатичный, но несколько несвязный. Давайте изменим его: для этого переходим в режим ввода. Самый простой способ — нажатие «i» из обычного режима, после чего можно смело приступать к вводу текста. <ESC> вернёт нас к обычному режиму.

Вводное замечание. Поскольку заглавные и строчные буквы команд соответствуют разным командам, следует быть внимательным к регистру ввода, учитывать, например, нажата ли клавиша <CAPS LOCK>. Используйте команду U, чтобы отменить ошибочные действия.

Другие важные команды:

Ввод текста[править]

Эти команды переводят редактор в режим ввода. Они экономят время на движение курсора или на перевод его на новую строку. В командах ввода возможны числовые аргументы (за исключением O и o). Например, команда 20iПривет<ESC> вставляет 20 слов «Привет». Перейти в режим ввода:

  • i — с текущей позиции;
  • a — после курсора;
  • I — в начало строки;
  • А — в конце строки;
  • o — с новой строки под курсором;
  • O — с новой строки над курсором;
  • s — заменить указанное количество символов, т. е. удалить это число символов и перейти в режим ввода. В отличие от команды с, которая может удалить кусок текста размером не меньше слова (cw), командой s можно удалить любое число символов. Например, 4s удалит четыре символа, начиная с того, который находится под курсором. Эта команда применяется для замены одного или нескольких символов другими символами;
  • S — удалить всю текущую строку и перейти в режим ввода. Число перед командой показывает, сколько нужно удалить строк, начиная с текущей. Например, 4S удалит четыре строки, включая текущую;
  • R — перейти в режим ввода с заменой текста. Аналог insert. Символы под курсором заменяются на вводимые. Команда применяется, когда неизвестно, сколько придётся изменить символов на другие (иначе можно было бы использовать команду s с указанием числа заменяемых символов, например, 7s). При удалении вводимых символов возвращаются те, которые были до ввода команды. Такой режим сохраняется до конца строки. При вводе новой строки, по нажатию Enter, происходит не переход на другую строку с тем же режимом замены текста, а создание новой строки;
  • r — заменить один символ. Заменяет символ, находящийся под курсором на символ который, следует за командой. При этом не происходит выхода из командного режима, т. е. не надо нажимать ESC после изменения текста. Например, команда ry изменит символ под курсором на «y». Числовой показатель указывает, сколько символов необходимо заменить на данный. Например, 3ry вставляет три символа «y».

Удаление[править]

  • x — удалить символ под курсором (<число>x — удалить указанное число символов начиная с того, который находится под курсором);
  • X — удалить символ влево (удалить символ перед курсором);
  • d — используется совместно с командами перемещения. Удаляет символы с текущего положения курсора до положения после ввода команды перемещения.

Удалить символы:

  • dw — с текущего до конца слова, включая пробел после слова;
  • de — до конца слова, но оставить пробел;
  • dE — с текущего до конца слова, включая символы пунктуации, но оставить пробел после слова;
  • d<число>d или <число>dd — число строк начиная с текущей;
  • db — с текущего до начала слова (в обратном направлении);
  • d0 — с начала строки до текущего положения курсора;
  • d$ или D — с текущего положения курсора до конца строки.

Удалить:

  • diw — слово под курсором;
  • dd — текущую строку;
  • d<число>d или <число>dd — число строк начиная с текущей.
  • с — команда, аналогичная d, но после удаления переходит в режим ввода (замена текста). Удобная альтернатива команде R. Удалить:
  • сс — текущую строку и перейти в режим ввода;
  • C — текст с текущего положения курсора до конца строки, аналогична команде с$ (где $ — символ конца строки).
  • yy (также Y) — копирование текущей строки в неименованный буфер;
  • y<число>y — копирование числа строк начиная с текущей в неименованный буфер;
  • p — вставка содержимого неименнованного буфера под курсором. В Vim девять ячеек буфера удаления, так что можно вставить не только последнее удаление, но сделанные ранее. Например, 4p вставит под курсор содержимое четвертого удаления начиная с последнего. Также чтобы поменять местами два символа, можно использовать комбинацию команд «удалить» — x (удаление в буфер) и «вставить» — p (вставить из буфера). Таким образом, поставив курсор на первую букву из двух, которые необходимо поменять местами, и нажав комбинацию клавиш xp, мы совершим необходимые действия;
  • P — вставка содержимого неименованного буфера перед курсором;
  • J — слияние текущей строки со следующей. Числовой аргумент перед командой показывает, сколько следующих линий необходимо объединить с текущей. Например, 2J объединит две следующие строки с текущей, на которой расположен курсор.

Отмена изменений[править]

  • u — отменить последнюю команду;
  • U — отменить все последние изменения в строке; если строка удалена, то применить эту команду к ней будет невозможно.

Команды u и U могут отменять друг друга.

  • <Ctrl-r> или :redo — перейти вперёд по изменениям;
  • . — повторить последнюю команду, включая ввод текста;
  • ~ (тильда) — изменить символы под курсором на противоположный регистр (заглавные на строчные и строчные на заглавные), может применяться числовой показатель. Например, команда 5~ поменяет пять символов, начиная с текущего под курсором, на противоположный регистр.

Конечно, запомнить все команды сразу трудно, даже не нужно, к тому же здесь перечислены не все. Уверяю, через некоторое время эти команды будут пользоваться спросом. Некоторые особенности использования редактора в режиме редактирования:

  • Любой удаляемый текст сохраняется временно в буфере. Из этого буфера его можно вставить в текст (см. команду p). Буфер изменяется также после применения команды y — копировать.
  • Любая команда редактирования хранится в буфере, пока не будет вызвана другая команда.

Наконец мы дошли к самому главному — командному режиму. Помним, как в него перейти? «:». Шифт-ж, если по-русски.

Запись/выход[править]

В режиме ввода предварительно нажмите <ESC>, чтобы перейти в обычный режим.

ZQ - выйти без сохранения

или

:q! - выйти без сохранения
ZZ - записать файл и выйти (если файл не изменяли, то записываться он не будет)

или

:wq - записать файл и выйти

или

:x - записать файл и выйти
:w<CR> - записать файл
:sav filename<CR> - "сохранить как"

или

:w filename<CR> - "сохранить как"
:w!<CR> - записать файл

Эта команда может помочь, если файл открыт в режиме «read-only», т. е. с опцией -R, если файл заблокирован другим пользователем, либо отсутствуют такие привилегии, либо ещё какая беда. При попытке записи без «!» будет выдано соответствующее предупреждение.

:w new_file<CR>

Создать новый файл «new_file» и записать в него текущее содержимое. Если файл существует, будет показано предупреждение. Дальше вы продолжаете работать со старым файлом — mamapapa.txt.

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

:sh<CR> - переход в командную оболочку

Чтобы из командной оболочки вернуться в редактор, нажмите CTRL-D или введите exit.

:q<CR> - выйти из редактора.

Ничего не получится, если файл был изменен. В таких случаях после команды добавляют «!»:

:q!<CR> - выйти из файла, не сохраняя изменения
:qa!<CR> - выйти из всех файлов, не сохраняя изменения

Чтобы отменить сделанные в текущей сессии изменения и вернуться к первоначальному варианту файла, применяют команду:

:e!<CR> - отменить изменения в текущей сессии

Взято тут https://ru.wikibooks.org/wiki/Vim