Основные команды текстового редактора VI / VIM

Основные режимы работы.

«Обычный режим» — перемещение по файлу, стирание текста и другие редактирующие функции. Это — основной режим, только из него можно сразу перейти в другие режимы. Для возврата в основной режим из любого другого режима:

<ESC>, иногда 2 раза;

<Ctrl-[>

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

i
<Insert>

«Командный режим» -Команды (операции с файлом, поиск и замена, настройка редактора…). Переход в него из обычного режима:

:
«Режим поиска» — ввод поискового запроса. Переход в него из обычного режима

/ , поиск от курсора до конца документа
? , поиск от курсора до начала документа

«Визуальный режим» — режим выделения текста:

«v» и влево или вправо стрелками; Shift+v вся строка целиком; Ctrl+v прямоугольник, часть текста.

 

Перемещение по тексту
hВлево
jВниз
kВверх
lВправо
«стрелки»Перемещение по тексту (в больших файлах работает медленно, в некоторых конфигурациях может работать некорректно).
wК следующему слову
WК следующему слову (по пробелам)
bК началу слова
BК началу слова (по пробелам)
^К первому непробельному символу строки
+ или <cr />К первому символу следующей строки
—К первому непробельному символу предыдущей строки
eК концу слова
EК концу слова (по пробелам)
(К началу предложения
)К концу предложения
{К началу абзаца
}К концу абзаца
Примечание: абзацы разделяются пустой строкой.
0 или |К началу строки
n|К позиции n текущей строки
$В конец строки
1GК первой строке файла
GК последней строке файла
nG или :nК n-ой строке файла
fcВперед к символу c
FcНазад к символу c
HК верхней строке экрана
nHК n-ой строке от начала экрана
MК средней строке экрана
LК нижней строке экрана
nLК n-ой строке от конца экрана
CTRL-dПрокрутка вниз на пол-экрана
CTRL-fПрокрутка вниз на экран
CTRL-uПрокрутка вверх на пол-экрана
CTRL-bПрокрутка вверх на экран
CTRL-eПрокрутка на строку вниз
CTRL-yПрокрутка на строку вверх
CTRL-lОбновить экран
z <cr />Сделать текущую строку верхней строкой экрана
nzСделать строку n верхней строкой экрана
z.Сделать текущую строку средней строкой экрана
nz.Сделать строку n средней строкой экрана
z-Сделать текущую строку нижней строкой экрана
nz-Сделать строку n нижней строкой экрана
%К парной скобке: ( ), { }, [ ]

Удаление текста

Большинство команд удаления образуются из символа d и команды перемещения. Например, dw удаляет слово. Другие команды удаления:
xУдалить текущий символ
nxУдалить n символов вправо, начиная с текущего
XУдалить символ слева от курсора
nXУдалить n символов влево от курсора
DУдалить до конца строки
d$Удалить от курсора до конца строки
dd или :dУдалить текущую строку
ndwУдалить следующие n слов, начиная с текущего
ndbУдалить предыдущие n слов, начиная с текущего
nddУдалить следующие n строк, начиная с текущей
:n,mdУдалить строки с n до m
dMotion_cmdУдалить все, что захватывает команда перемещения (например, dG удаляет текст от текущей позиции до конца файла, а d4 — до конца 4-го предложения).
«(a-z)nddВырезать n строк в именованный буфер (от a до z)
«(a-z)ddВырезать текущую строку в именованный буфер (от a до z)
«npОтменить n-е из последних удалений (последние 9 удалений хранятся в буфере)
«1pu.u.Просмотр буфера удалений, пока не будет возвращено нужное (повторить — u.)

Копирование в буфер

Подобно командам удаления, большинство команд копирования в буфер состоят из символа y и команды перемещения. Например, y$ помещает в буфер конец строки.
yy или :yКопировать текущую строку
nyy или nYКопировать n строк
yMotion_cmdКопировать текст, захватываемый командой перемещения (например, yG копирует все от текущей позиции курсора до конца файла, а y4 — до конца текущего предложения)
«(a-z)nyyКопировать n строк в именованный буфер (от a до z)
«(a-z)yyКопировать текущую строку в именованный буфер (от a до z)

Изменение текста

Команды изменения действуют как команды удаления с последующим переводом в режим ввода. Большинство из них состоит из символа c и команды перемещения. Например cw заменяет слово.
CЗаменить от курсора до конца строки
cc или SЗаменить всю текущую строку
xpОбменять символ над курсором и следующий
sЗаменить текущий символ
cwзаменить текущее слово
cMotion_cmdЗаменить текст, захватываемый командой перемещения
Сдвинуть строку влево/вправо на shift width (по умолчанию — 8 позиций)
nСдвинуть n строк влево/вправо на shift width (по умолчанию — 8 позиций)
Motion_cmdСдвинуть строки, захватываемые командой перемещения, влево/вправо

Вставка из буфера

pПоместить текст из буфера после курсора
PПоместить текст из буфера перед курсором
«(a-z)p или «(a-z)PПоместить текст из буфера (от a до z) после/перед текущей строкой

Поиск/замена подстрок

/strПоиск str вперед от курсора
?strПоиск str назад от курсора
nПовторить поиск в том же направлении
NПовторить поиск в обратном направлении
%Поиск парной скобки: ( ) [ ] или { }
fcПоиск символа c по текущей строке вперед
FcПоиск символа c по текущей строке назад
tcПоиск символа c по строке вперед, курсор устанавливается на предыдущий символ
TcПоиск символа c по строке назад, курсор устанавливается на предыдущий символ
:set icИгнорировать регистр при поиске
:set noicУчиитывать регистр при поиске
:n,ms/str1/str2/optИскать строку str1 со строки n до m (n и m могут быть опущены); заменить str1 на str2; с опциями opt. Возможные опции: g — глобальный, c — подтверждать замены (y — заменить, <cr /> — не заменять), p — печатать измененные строки
&Повторить последнюю команду :s
:g/str/cmdВыполнить команду cmd для каждой строки, содержащей str
:g/str1/s/str2/str3/Найти строку, содержащую str1, заменить str2 на str3
:v/str/cmdВыполнить команду cmd для каждой строки, не содержащей str
;Повторить поиск
,Повторить поиск в обратном направлении

Шпаргалка по Vim

Общее

  • :help keyword — открыть помощь по ключевому слову
  • 😮 file — открыть file
  • :sav file — сохранить весь текщий буфер как file
  • :close — закрыть текущую панель
  • K — открыть справочное руководство для слова под курсором

Перемещение курсора

  • h — передвинуть курсор влево
  • j — передвинуть курсор на одну фактическую строку вниз
  • k — передвинуть курсор на одну фактическую строку вверх
  • l — передвинуть курсор вправо
  • gj — передвинуть курсор на одну видимую строку вниз
  • gk — передвинуть курсор на одну видимую строку вверх
  • H — переместиться к началу экрана
  • M — переместиться к середине экрана
  • L — переместиться к концу экрана
  • w — переместиться вперед на начало слова
  • W — переместиться вперед на начало слова (слово может содержать пунктуацию)
  • e — переместиться вперед на конец слова
  • E — переместиться вперед на конец слова (слово может содержать пунктуацию)
  • b — переместиться назад на начало слова
  • B — переместиться назад на начало слова (слово может содержать пунктуацию)
  • % — переместиться к парному символу (по умолчанию поддерживаются: ‘()’, ‘{}’, ‘[]’ — подробнее по команде :h matchpairs в vim)
  • 0 — переместиться на начало строки
  • ^ — переместиться на первый непробельный символ строки
  • $ — переместиться на конец строки
  • g_ — переместиться к последнему непустому символу в строке
  • gg — переместиться на первую строку документа
  • G — переместиться на последнюю строку документа
  • 5G — переместить на пятую строку
  • fx — переместиться к следующему вхождению символа x в текущей строке
  • tx — установить курсор за следующим вхождением символа x в строке
  • Fx — переместиться на предыдущее вхождение символа x в текущей строке
  • Tx — установить курсор за предыдущим вхождением символа x в строке
  • ; — повторить предыдущее f, t, F или T перемещение
  • , — повторить предыдущее f, t, F или T перемещение, в обратном направлении
  • } — переместиться к следующему параграфу (или функции/блоку при редактировании кода)
  • { — переместиться к предыдущему параграфу (или функции/блоку при редактировании кода)
  • zz — сдвинуть весь буфер по вертикали вместе с курсором, так чтобы курсор оказался в центре
  • Ctrl + b — переместиться назад на целый экран
  • Ctrl + f — переместиться вперед на целый экран
  • Ctrl + d — переместиться вперед на половину экрана
  • Ctrl + u — переместиться назад на половину экрана
Совет: Добавьте число перед командой перемещения курсора для того, чтобы повторить её. Например, 4j перемещает курсор на 4 строки вниз.

Режим вставки — вставка/добавление текста

  • i — вставка перед курсором
  • I — вставка в начало строки
  • a — вставка (добавление) после курсора
  • A — вставка (добавление) в конец строки
  • o — добавление новой строки под текущей
  • O — добавление новой строки над текущей
  • ea — вставка (добавление) после конца слова
  • Esc — выход из режима вставки

Редактирование

  • r — заменить один символ
  • J — присоединить нижнюю строку к текущей
  • cc — заменить всю строку
  • cw — заменить всё текущее слово
  • c$ — заменить до конца строки
  • s — удалить символ и заменить текст
  • S — удалить строку и заменить текст (то же что cc)
  • xp — переставить две буквы (удалить и вставить)
  • u — отменить
  • Ctrl + r — применить последнее отменённое изменение
  • . — повторить последнюю команду

Выделение текста (визуальный режим)

  • v — включить режим выделения текста, выделить строки, затем выполнить команду (например, y-копирование)
  • V — включить построчный режим выделения
  • o — переместиться на другой конец выделенной области
  • Ctrl + v — включить режим выделения блоков
  • O — переместить на другой угол блока
  • aw — выделить слово
  • ab — блок в ()
  • aB — блок в {}
  • ib — внутренний блок в ()
  • iB — внутренний блок в {}
  • Esc — выйти из режима выделения текста

Визуальные команды

  • > — сместить текст вправо
  • < — сместить текст влево
  • y — скопировать выделенный текст
  • d — удалить выделенный текст
  • ~ — переключить регистр

Регистры

  • :reg — показать содержимое регистров
  • "xy — поместить содержимое в регистр x
  • "xp — вставить содержимое регистра x
Совет: Содержимое регистров сохраняется в ~/.viminfo, и будет восстановлено при следующем запуске vim.
Совет: В нулевом регистре всегда хранится содержимое последней команды копирования.

Метки

  • :marks — список меток
  • ma — установить метку A на текущей позиции
  • `a — переместиться к метке A
  • y`a — скопировать до метки A

Макросы

  • qa — записать макрос A
  • q — остановить запись макроса
  • @a — run macro a
  • @@ — выполнить последний макрос

Вырезать и вставить

  • yy — скопировать строку
  • 2yy — скопировать 2 строки
  • yw — скопировать слово
  • y$ — скопировать до конца строки
  • p — вставить буфер обмена после курсора
  • P — вставить буфер обмена перед курсором
  • dd — удалить (вырезать) строку
  • 2dd — удалить (вырезать) 2 строки
  • dw — удалить (вырезать) слово
  • D — удалить (вырезать) до конца строки
  • d$ — удалить (вырезать) до конца строки
  • x — удалить (вырезать) символ

Выход и сохранение

  • :w — сохранить файл, но не выходить
  • :w !sudo tee % — сохранить файл с sudo
  • :wq либо 😡 либо ZZ — сохранить файл и выйти
  • :q — выйти (терпит неудачу в случае несохраненных изменений)
  • :q! либо ZQ — выйти и потерять несохраненные изменения

Поиск и замена

  • /pattern — поиск шаблона
  • ?pattern — обратный поиск шаблона
  • \vpattern — ‘very magic’ режим: все не алфавитно-цифровые символы интерпретируются как специальные (экранирование не требуется)
  • n — повторить поиск в том же направлении
  • N — повторить поиск в обратном направлении
  • :%s/old/new/g — заменить все вхождения шаблона в файл на указанное значение
  • :%s/old/new/gc — заменить все вхождения шаблона в файл на указанное значение с подтверждением
  • :noh — отключить подсвечивание результатов поиска

Поиск в нескольких файлах

  • :vimgrep /pattern/ {file} — поиск по шаблону в нескольких файлах
Например: :vimgrep /foo/ **/*
  • :cn — переместиться к следующему совпадению
  • :cp — переместиться к предыдущему совпадению
  • :copen — открыть окно со списком результатов

Сворачивание

    • zf#j — создает свертку от текущей позиции до # строк вниз
    • zf/подстрока — создает свертку от текущей позиции и до первой найденной подстроки
    • v/V и zf — выделение блока и создание свертки

Команды для управления:

    • zc — свернуть блок
    • zo — развернуть блок
    • zM — закрыть все блоки
    • zR — открыть все блоки
    • za — инвертирование (если открыто – закрыть, если закрыто – открыть)
    • zj — переход к следующей свертке
    • zk — переход к предыдущей свертке
    • zd — удалить свертку под курсором
    • zD — удалить все свертки
    • [z — перейти к началу текущей свертки
    • ]z — перейти к концу текущей свертки

После закрытия Vim все свертки забываются, для сохранения сверток в открытом файле используется команда :mkview, для загрузки — :loadview (подробнее).

Работа с несколькими файлами

  • :e file — редактировать файл в новом буфере
  • :bnext либо :bn — перейти к следующему буферу
  • :bprev либо :bp — перейти к предыдущему буферу
  • :bd — удалить буфер (закрыть файл)
  • :ls — список всех открытых буферов
  • :sp file — открыть файл в новом буфере и разделить окно
  • :vsp file — открыть файл в новом буфере и вертикально разделить окно
  • Ctrl + ws — разделить окно
  • Ctrl + ww — переключение окон
  • Ctrl + wq — закрыть окно
  • Ctrl + wv — разделить окно вертикально
  • Ctrl + wh — переместить курсор в левое окно (вертикально разделение)
  • Ctrl + wl — переместить курсор в правое окно (вертикальное разделение)
  • Ctrl + wj — переместить курсор в окно ниже (горизонтальное разделение)
  • Ctrl + wk — переместить курсор в окно выше (горизонтальное разделение)

Вкладки

  • :tabnew либо :tabnew file — открыть файл в новой вкладке
  • Ctrl + wT — переместить текущее окно в собственную вкладку
  • gt либо :tabnext либо :tabn — переключиться на следующую вкладку
  • gT либо :tabprev либо :tabp — переключиться на предыдущую вкладку
  • #gt — переключить на вкладку номер #
  • :tabmove # — переместить текущую вкладку на # позицию (нумерация с 0)
  • :tabclose либо :tabc — закрыть текущую вкладку и все её окна
  • :tabonly либо :tabo — закрыть все вкладки кроме текущей
  • :tabdo command — выполнить command на всех вкладках (к примеру :tabdo q — закрывает все открытые вкладки)
Опубликовано в рубрике Linux