Минимум по vi или Vim (заметка-отрывок)

(Это ещё один отрывок из заметок для совсем начинающего пользователя. Возможно, кому-то пригодится как материал для инструкций по работе. Отрывок содержит самый минимум сведений на случай, если из редакторов - только vi или Vim. Я сам не знаток и редко пользуюсь.)


Редактор vi ("ви-ай" или "ви") считают необходимым компонентом почти любой системы UNIX или Linux. В современных системах обычно есть улучшенная версия - Vim ("вим", vi improved). Команда - vi или vim. Версия для графического интерфейса - GVim (команда - gvim). Далее любая из этих версий названа vi, если нет оговорок. Команда только для показа (чтения) файла: view или vi -R.


Сам vi (от visual editor) является визуальным режимом строкового редактора ex ("экс"). Когда ещё не было (больше 40 лет назад) дисплеев, компьютеры выводили строки на печатающие терминалы. Оператор давал редактору команды правки строк, компьютер печатал на бумаге только исправленные строки. "Визуальность" редактора vi здесь означает возможность показа экранной страницы и мгновенного (насколько возможно) отображения правок, то есть более наглядный способ работы.


Пустой файл вначале показан в vi как состоящий из тильд (в начале каждой линии, но даже пустых строк в файле нет). После правки и сохранения файла этих тильд в нём не будет. Vim дополнительно показывает небольшой справочный текст, исчезающий после начала правки. Нижняя линия показывает название режима, позицию курсора и другие сведения. Если не показывает, попробуйте сочетание ^g (то есть Ctrl G).


В описании команд vi важен регистр символов. Если написано w, то нужно просто нажимать клавишу W; если написано Q, то - Shift Q.


Работа в vi во многом состоит из переключения режимов. Есть старый редактор ex (одноимённая команда в оболочке). Перейти из ex в vi: vi или visual. И Enter. Вернуться из vi в ex - Q. Командный режим (command mode) - это клавиатурные внутренние команды vi, наподобие внутренних команд less. Режим вставки (insert mode) - это набор текста.


Командный режим устанавливается автоматически при запуске vi. Команда вставить (набирать) текст - i (от insert). То есть просто нажать клавишу I. И теперь vi перешёл в режим вставки, то есть следующее нажатие i уже вставит символ i в буфер, выведет на экран; уже не команда, а набор текста. Вернуться в командный режим - Escape. На всякий случай, можно нажать дважды; редактор может подтверждающе пискнуть динамиком системного блока. Удалить (в командном режиме) символ под курсором - x.


Примерно так и работают в vi: набирают текст в режиме вставки, переходят в командный режим и правят текст, возвращаются в режим вставки и снова (не обращая внимания на опечатки) набирают текст.


Перейти в режим вставки - i (под курсором) или a (справа от курсора); Enter или o (строчная буква "O", новая строка ниже); или O (заглавная буква "O", новая строка выше). Для обучения наберите любой текст в несколько строк или откройте готовый test.txt. Потом вернитесь в командный режим. Своевременно переключайтесь между латиницей и кириллицей; будьте осторожны с клавишей Caps Lock.


Переместить курсор на один символ или линию: h, j, k или l (строчная "L"). Или курсорные стрелки, соответственно: Влево, Вниз, Вверх или Вправо. В начало строки - 0 (ноль). В конец строки - $. Вправо на одно слово - w или W; влево - b или B. Для команды-строчной буквы - словами считаются также пробелы и знаки препинания; для заглавной - только обычные слова. Экранная страница вперёд - ^f (то есть Ctrl F), назад - ^b.


Перед многими командами возможно набрать число для быстрого автоматического повтора. Например: переместить курсор на семь позиций влево - 7h вместо hhhhhhh; удалить 4 строки - 4dd вместо dddddddd.


Пример числа не как повтора: переместить курсор в начало файла - 1G; на строку с нужным номером - набрать номер и G; в конец файла - G (без числа).


Многие команды сделаны по шаблону "число - действие - фрагмент" или равноценному "действие - число - фрагмент" (без пробелов и знаков препинания). Фрагменты: один символ - h (или l, или ничего); слово - w (или W, b, B); строка - то же, что и действие; от курсора до начала строки - 0 (ноль); от курсора до конца строки - $.


Копировать фрагмент текста в отдельный буфер - y (и указать фрагмент), например: копировать два слова, начиная с позиции курсора, - 2yw или y2w; копировать строку - yy. Вырезать - d (и указать фрагмент). Вставить вырезанный (удалённый) или скопированный фрагмент после позиции курсора - p.


Нетипичный фрагмент возможно обозначить выделением - v. Размер выделения изменяют любыми командами перемещения курсора. Потом можно нажать y или d. Просто убрать выделение - снова v.


Удалить фрагмент - d (то же, что и "вырезать"). Удалить строку - dd. Для удаления символов могут работать клавиши Delete и Backspace или, соответственно, x и X. Возможно подставлять числа, например: 2dd, 5x.


Перевод в режим вставки с заменой символов вместо добавления - R. В других редакторах для этого обычно применяют клавишу Insert.


Отменить недавнюю правку - u. Вернуть строку с курсором в исходное состояние, если курсор не перемещали на другую строку, - U.


Искать фрагмент текста по шаблону - / (вперёд, к концу файла) и ? (назад, к началу). Искать следующий такой же фрагмент - n (вперёд) и N (назад).


Вводить команды ex возможно прямо в vi из командного режима. Вводимые команды отображаются в нижней линии. Набор команд ex начинают с двоеточия и заканчивают Enter. То есть выражение вроде :wq в описании команд vi означает сочетание Shift ;, потом W, Q, Enter. Без запятых. Прервать ввод - Escape дважды.


В строке для ex можно вводить команды оболочки, не выходя из vi. Перед командой - восклицательный знак, например: :!cp ~/test.txt ~/testvi.txt.


Там же вводят команды настройки vi, начинающиеся с :set, например: показать номера строк - :set nu и убрать номера - :set nonu.


Заменить в текущем буфере "рфагмент" на "фрагмент" один раз - :s/рфагмент/фрагмент/. Заменить в текущем буфере каждый "рфагмент" на "фрагмент" - :1,$s/рфагмент/фрагмент/g.


Добавить содержимое другого файла к буферу - :r (и через пробел - имя файла).


Перечитать файл в буфер заново (отбросить несохранённые изменения) - :e!.


Отбросить несохранённые изменения и выйти из vi - :q!.


Записать изменённый буфер (сохранить файл) - :w (и через пробел - имя файла, если нужно).


Открыть ещё один файл (сначала - сохранить текущий файл) - :e (и через пробел - имя файла, возможно автодополнение по Tab).


Переключаться между открытыми файлами - :e #. В Vim возможно разделить экран на "окна" - :split. В каждом окне можно открыть файл. Переключаться между окнами - ^w w. Закрыть текущее окно - :close.


Выйти (и сохранить файл, если буфер изменён) - ZZ или :wq.


Документация: man-страница; англоязычный учебник - по ex-команде :help.


Редакторы vi и Vim воспринимают команды только на латинице, поэтому попеременно писать и редактировать русскоязычные тексты неудобно: приходится очень часто переключать раскладку. Есть обходное решение для Vim: надо добавить следующую строку в файл настроек ~/.vimrc (не путать с ~/.viminfo):


set keymap=russian-jcukenwin


Если такого файла ещё нет, создайте его. После запуска Vim возможно будет переключать раскладку для набора текста сочетанием Ctrl ^ (даже Ctrl 6). Переключение подействует только "внутри" Vim, команды будут работать даже при наборе русскоязычного текста.

GNU/Linux

1K постов15.5K подписчика

Добавить пост

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.