Текстовый редактор VI
В любой сборке (в настоящее время - в большинстве сборок) операционной системы UNIX (в том числе - Linux, xBSD, Solaris, QNX, ...) штатно присутствует текстовый редактор vi. Нередко этот текстовый редактор не только используется по умолчанию, но и является единственным предустановленным в системе редактором. Поэтому умение пользоваться хотя бы минимальным набором команд этого текстового редактора может оказаться необходимым даже для первичной настройки системы (например, для доступа в интернет, включения/отключения автозапуска демонов и т.д.).
1. Что здесь есть и чего здесь нет
В этой статье приведены команды канонического текстового редактора vi. Этот редактор породил множество клонов (Vim, nvi, elvis), практически все они поддерживают полный набор команд vi, но при этом имеют дополнительные команды, призванные (по мнению авторов) улучшить функционал. При всех своих полезностях у этих (дополнительных) команд есть главный недостаток - они не являются совместимыми с классическим vi и поэтому их знание (и применение) резко ограничивает Вас (Вы сможете эффективно работать только с операционными системами, в которых установлен Ваш клон vi).
Поэтому здесь есть:
- Список команд редактора VI.
- В случае каких-либо дополнительных широко известных команд / режимов, не совместимых с vi, команды будут приведены, но несовместимость будет сразу же оговорена.
- В случае отличия базового функционирования редактора от vi будет приведена инструкция как перейти в режим совместимости с vi.
Поэтому здесь нет (или почти нет):
- Команд, не поддерживаемых редактором vi (нужны команды Vim - берите учебник по Vim).
- Опций командной строки различных клонов vi - здесь приводятся только команды самого vi (и опции командной строки, как перейти в режим совместимости с vi).
Маленькое отступление или где взять живой vi
Редактор vi (согласно Википедии) был выпущен в 1976 году. Редактор Vim (согласно информации на сайте Vim и той же Википедии) был выпущен в 1991 году. Одна из последних версий популярных операционных систем, выпущенных до 1991 года - это 4.2 BSD. Нашелся проект 4BSD for the Digital VAX, еще ссылка, который позволил запустить эту версию системы на эмуляторе под Windows. Поэтому для ориентира используется VI, Version 3.7, 6/10/83.
Команды VI
Команды перемещения курсора (в командном режиме)
Команды, однозначно несовместимые с классическим VI, выделены полужирным. Команды, потенциально несовместимые с VI (не работающие у меня на VI 3.7), выделены курсивом.
Команда |
Подробнее |
Примеры |
Описание команды |
h
Ctrl+H
стрелка влево |
маленькая H
стрелка влево |
h
5h |
курсор влево, не меняет строку;
можно использовать множитель[1] |
Backspace |
клавиша Backspace |
<Backspace>
3<Backspace> |
курсор влево, меняет строку;
можно использовать множитель[1] |
l
стрелка вправо |
маленькая L
стрелка вправо |
l
3l
17l |
курсор вправо, не меняет строку;
можно использовать множитель[1] |
Spacebar |
пробел |
<Spacebar>
9<Spacebar> |
курсор вправо, меняет строку;
можно использовать множитель[1] |
k
Ctrl+P
стрелка вверх |
маленькая K
Ctrl+... - это комбинация клавиш[13]
стрелка вверх |
k
5k
8k |
курсор вверх, та же колонка;
можно использовать множитель[1] |
j
Ctrl+N
Ctrl+J
стрелка вниз |
маленькая J
Ctrl+... - это комбинация клавиш[13]
стрелка вниз |
j
3j
5j |
курсор вниз, та же колонка
можно использовать множитель[1] |
+
Ctrl+M
<Enter> |
плюс
Ctrl+... - это комбинация клавиш[13]
клавиша Enter |
+
8+
9<Enter> |
курсор вниз, первая колонка;
можно использовать множитель[1] |
- |
минус |
-
2-
|
курсор вверх, первая колонка
можно использовать множитель[1] |
0 |
ноль |
0 |
курсор в начало текущей строки (на первый символ) |
^ |
крышка |
^ |
курсор на первый непробельный символ текущей строки |
$ |
доллар |
$
5$ |
курсор в конец текущей строки;
можно использовать множитель[1] |
G |
|
1G
5G
G |
курсор к строке, заданной множителем[1]. Если множитель не задан, перемещает курсор в конец файла.
1G - к первой строке (в начало файла)
G - к последней строке (в конец файла) |
| |
вертикальная черта |
1|
10|
| |
курсор к колонке в текущей строке, заданной множителем[1];
Если множитель не задан, то курсор перемещается в начало текущей строки. |
w |
маленькая W |
w
5w
10w |
курсор вперед на слово[2];
можно использовать множитель[1] |
W |
|
W
7W
25W |
курсор вперед на непробельное слово[3];
можно использовать множитель[1] |
b |
маленькая B |
b
2b
15b |
курсор назад на слово[2]
можно использовать множитель[1];
если курсор уже находится внутри слова, то он перемещается назад, на начало этого слова. |
B |
|
B
4B
25B |
курсор назад на непробельное слово[3];
можно использовать множитель[1];
если курсор уже находится внутри слова, то он перемещается назад, на начало этого слова. |
e |
маленькая E |
e
5e
|
курсор в конец слова[2];
можно использовать множитель[1];
если курсор уже находится внутри слова, то он перемещается на конец этого слова. |
E |
|
E
15E |
курсор в конец непробельного слова[3];
можно использовать множитель[1];
если курсор уже находится внутри слова, то он перемещается на конец этого слова. |
( |
левая круглая скобка |
(
5( |
курсор в начало предложения[4]
можно использовать множитель[1] |
) |
правая круглая скобка |
)
7) |
курсор в конец предложения[4]
можно использовать множитель[1] |
{ |
левая фигурная скобка |
{
20{ |
курсор в начало параграфа[5];
можно использовать множитель[1] |
} |
правая фигурная скобка |
}
5} |
курсор в конец параграфа[5];
можно использовать множитель[1] |
[[ |
это последовательность клавиш[14]: две левые квадратные скобки |
|
курсор в начало раздела[6];
можно использовать множитель[1] |
]] |
это последовательность клавиш[14]: две правые квадратные скобки |
|
курсор в начало раздела[6];
можно использовать множитель[1] |
% |
процент |
% |
курсор на парную скобку
нельзя использовать множитель[1] |
% |
процент |
1%
5%
40%
50%
87%
100% |
В VIM:
курсор на позицию в файле, задаваемую в процентах;
обязательно использовать множитель[1];
100% - в конец файла,
50% - в середину файла, и т.д.
0% - не сработает, поскольку "0" - это не множитель, а команда "%" без множителя переместит на парную скобку;
1% = 1% от начала позиции файла.
если файл больше 100 строк, этой командой не попасть на 1-ю строку. |
H |
|
H
2H
15H |
курсор на верхнюю (1-ю) строку экрана, 1-ю колонку;
можно использовать множитель[1];
при использовании множителя перемещает курсор на n-ю строку сверху (где n - множитель) |
M |
|
M |
курсор на среднюю строку экрана, 1-ю колонку; |
L |
|
L
7L
10L |
курсор на нижнюю (1-ю снизу) строку экрана, 1-ю колонку;
можно использовать множитель[1];
при использовании множителя перемещает курсор на n-ю строку снизу (где n - множитель) |
' |
одинарная кавычка |
''
'a
'A
'z |
курсор в строку, заданную командой m (на первый непробельный символ в строке);
в VI работает только с буквами a-z; A-Z (большие буквы) не поддерживаются, цифры не поддерживаются;
если одинарная кавычка удвоена (''), курсор перемещается в предыдущий контекст[8] (на первый непробельный символ в строке).
В VIM:
метки 'A ... 'Z
(большие буквы) можно использовать для перехода на метки в других файлах;
метки '0 ... '9
работают, если используется файл .viminfo. '0 - точка последнего выхода из Vim; '1 - точка предпоследнего выхода, и т.д.;
метки '[ , '] - перемещают к началу и концу последнего изменённого
или скопированного текста;
метки '< , '>
- перемещают к началу и концу последнего выделенного текста в визуальном режиме. |
` |
обратная кавычка (апостроф) |
``
`b
`C
`p |
курсор в строку, заданную командой m (точно на запомненную позицию);
в VI работает только с буквами a-z; A-Z (большие буквы) не поддерживаются, цифры не поддерживаются;
если апостроф удвоен (``), курсор перемещается в предыдущий контекст[8] (точно на запомненную позицию).
В VIM:
метки `A ... `Z
(большие буквы) можно использовать для для перехода на метки в других файлах;
метки `0 ... `9
работают, если используется файл .viminfo. `0 - точка последнего выхода из Vim; `1 - точка предпоследнего выхода, и т.д.
метки `[ , `] - перемещают к началу и концу последнего изменённого
или скопированного текста;
метки `< , `>
- перемещают к началу и концу последнего выделенного текста в визуальном режиме. |
m |
маленькая M |
ma
mt
mZ |
запоминает позицию курсора в буквенной метке, указанной после m (только маленькие буквы);
не перемещает курсор;
можно задать команду m' или m` (с одинарной кавычкой или апострофом), чтобы вручную указать предыдущий контекст[8].
В Vim:
метки mA ... mZ (большие буквы) можно использовать для расстановки меток на точки в других файлах. |
|
|
|
|
Команды поиска (в командном режиме)
Команда |
Подробнее |
Примеры |
Описание команды |
/ |
слэш |
/123
/search string
/findme/+2
/searchme/-5 |
поиск подстроки вперёд[9] по файлу;
в подстроке могут присутствовать регулярные выражения[11] и/или метасимволы[12];
число, задаваемое после второго слэша - это на сколько строк вперёд[9] (если число положительное) или назад[10] (если число отрицательное) сместиться по файлу после нахождения результата. |
? |
вопросительный знак |
?4595
?find this
?find it?+3
?searchit?-1
|
поиск указанной подстроки или регулярного выражения[11] назад[10] по файлу;
число, задаваемое после второго вопросительного знака - это на сколько строк назад[10] (если число положительное) или вперёд[9] (если число отрицательное) сместиться по файлу после нахождения результата. |
n |
маленькая N |
n
|
повторяет поиск в том же направлении, что и последняя команда поиска (команду не обязательно набирать сразу после поиска: после выполнения поиска можно выполнять удаление/перемещение/вставку текста, и только потом нажать "n");
нельзя использовать множитель[1]; |
N |
|
N |
повторяет поиск в направлении, противоположном последней команде поиска (команду не обязательно набирать сразу после поиска: после выполнения поиска можно выполнять удаление/перемещение/вставку текста, и только потом нажать "N");
нельзя использовать множитель[1]; |
Команды работы с экраном (в командном режиме)
Команда |
Подробнее |
Примеры |
Описание команды |
Ctrl+D |
это комбинация клавиш[13] |
Ctrl+D
3
Ctrl+D
7 Ctrl+D
18 Ctrl+D |
прокрутка на половину экрана вперёд[9];
если указан множитель[1], то прокручивается вперёд на число строк заданное множителем, это число строк запоминается при следующих прокрутках. |
Ctrl+U |
это комбинация клавиш[13] |
Ctrl+U
5 Ctrl+U
2 Ctrl+U
25 Ctrl+U |
прокрутка на половину экрана назад[10];
если указан множитель[1], то прокручивается назад на число строк заданное множителем, это число строк запоминается при следующих прокрутках. |
Ctrl+F |
это комбинация клавиш[13] |
Ctrl+F
10 Ctrl+F |
постранично прокручивает экран вперёд[9];
если возможно, то между страницами сохраняются две неразрывные строки;
можно указывать множитель[1] |
Ctrl+B |
это комбинация клавиш[13] |
Ctrl+B
25 Ctrl+B |
постранично прокручивает экран назад[10];
если возможно, то между страницами сохраняются две неразрывные строки;
можно указывать множитель[1] |
Ctrl+E |
это комбинация клавиш[13] |
Ctrl+E
5 Ctrl+E |
прокрутка экрана на одну строку вперёд[9];
курсор (если это возможно) остаётся на той же строке;
можно использовать множитель[1] |
Ctrl+Y |
это комбинация клавиш[13] |
Ctrl+Y
8 Ctrl+Y |
прокрутка экрана на одну строку назад[10];
курсор (если это возможно) остаётся на той же строке;
можно использовать множитель[1] |
z<Enter> |
это последовательность клавиш[14]: "z" и <Enter> |
z<Enter>
5z<Enter>
z40<Enter>
18z25<Enter> |
перерисовать экран с текущей строкой вверху экрана;
если указать число перед "z" - верхней строкой экрана будет строка с указанным номером;
если задать число после "z" - количество отображаемых строк на экране станет равным заданному числу. |
z. |
это последовательность клавиш[14]: "z" и точка. |
z.
8z.
z15.
50z25. |
перерисовать экран с текущей строкой в середине экрана;
если указать число перед "z" - средней строкой экрана будет строка с указанным номером;
если задать число после "z" - количество отображаемых строк на экране станет равным заданному числу. |
z- |
это последовательность клавиш[14]: "z" и минус |
z-
50z-
z35-
200z40- |
перерисовать экран с текущей строкой внизу экрана;
если указать число перед "z" - нижней строкой экрана будет строка с указанным номером;
если задать число после "z" - количество отображаемых строк на экране станет равным заданному числу. |
Ctrl+L |
это комбинация клавиш[13] |
Ctrl+L |
перерисовать весь экран (стереть служебные сообщения на экране) |
Ctrl+G |
это комбинация клавиш[13] |
Ctrl+G |
отобразить состояние редактора (в строке состояния появляется информация о редактируемом файле, положении в файле, индикация того, изменен ли файл,...) |
Команды модификации текста (в командном режиме)
Команда |
Подробнее |
Примеры |
Описание команды |
d |
Маленькая D |
dw
dd
4dl
d5j
10d}
7dw
"td`o |
Удаляет текст (точнее, вырезает текст в буфер обмена по умолчанию - или в указанный буфер обмена);
можно использовать множитель[1];
Текст удаляется от курсора до границы, заданной командой перемещения, указываемой после "d":
7dw = d7w = удаление текста на 7 слов[2] вперёд[9]
dd = удаление текущей строки текста
7dd = удаление 7 строк текста вперед (вниз), начиная с текущей
"td`o = вырезать текст в буфер обмена с именем "t" от курсора до позиции курсора, заданной буквенной меткой "o". |
D |
Большая d |
D
5D
|
Удаляет текст от курсора до конца текущей строки (точнее, вырезает текст в буфер обмена по умолчанию - или в указанный буфер обмена);
можно использовать множитель[1] |
i |
Маленькая буква I |
i
3i
|
Переводит vi в режим вставки текста[15] перед позицией курсора.
Можно использовать множитель[1]. При использовании множителя текст, введенный до первого нажатия Enter (или до выхода из режима вставки текста) повторяется количество раз, заданное множителем. |
I |
Большая буква i |
I
5I |
Переводит vi в режим вставки текста[15] с начала текущей строки.
Можно использовать множитель[1]. При использовании множителя текст, введенный до первого нажатия Enter (или до выхода из режима вставки текста) повторяется количество раз, заданное множителем. |
a |
Маленькая A |
a
2a |
Переводит vi в режим вставки текста[15] после позиции курсора.
Можно использовать множитель[1]. При использовании множителя текст, введенный до первого нажатия Enter (или до выхода из режима вставки текста) повторяется количество раз, заданное множителем. |
A |
|
A
7A |
Переводит vi в режим вставки текста[15] с конца текущей строки.
Можно использовать множитель[1]. При использовании множителя текст, введенный до первого нажатия Enter (или до выхода из режима вставки текста) повторяется количество раз, заданное множителем. |
o |
маленькая буква O |
o |
Вставляет новую пустую строку под текущей, ставит в нее курсор и переводит vi в режим вставки текста[15]. Теперь можно вводить текст. По окончании ввода нажмите Esc для возврата в командный режим.
Нельзя использовать множитель[1].
В VIM: Можно использовать множитель. При использовании множителя текст, введенный до выхода из режима вставки текста повторяется количество раз, заданное множителем. |
O |
буква O |
O |
Вставляет новую пустую строку над текущей, ставит в нее курсор и переводит vi в режим вставки текста[15]. Теперь можно вводить текст. По окончании ввода нажмите Esc для возврата в командный режим.
Нельзя использовать множитель[1].
В VIM: Можно использовать множитель. При использовании множителя текст, введенный до выхода из режима вставки текста повторяется количество раз, заданное множителем. |
x |
маленькая X |
x
5x
22x |
Удаляет символ под курсором.
Можно использовать множитель[1]. При использовании множителя удаляется указанное количество символов справа от курсора. Удаляются только символы в текущей строке. |
X |
|
X
3X
15X |
Удаляет символ слева от курсора.
Можно использовать множитель[1]. При использовании множителя удаляется указанное количество символов слева от курсора. Удаляются только символы в текущей строке. |
s |
маленькая S |
s
5s
18s |
Удаляет символ под курсором (а также справа от него, если указан множитель) и переводит vi в режим вставки текста[15]; можно использовать множитель[1]; |
S |
|
S
7S |
Удаляет (точнее, вырезает в буфер обмена по умолчанию - или в указанный буфер обмена) текущую строку (а также строки ниже, если указан множитель) и переводит vi в режим вставки текста[15]; можно использовать множитель[1]; |
c |
маленькая C |
cw
cc
4cl
c5j
10c}
7cw "tc`o |
Удаляет текст (точнее, вырезает текст в буфер обмена по умолчанию - или в указанный буфер обмена) и переводит vi в режим вставки текста[15] (т.е. фактически, производит замену старого текста на новый);
можно использовать множитель[1];
текст заменяется от курсора до границы, заданной командой перемещения, указываемой после "c":
7cw = c7w = замена текста на 7 слов[2] вперёд[9]
cc = замена текущей строки текста
"tc`o = вырезать текст в буфер обмена с именем "t" от курсора до позиции курсора, заданной буквенной меткой "o"
после удаления старого текста vi переходит в режим вставки текста[15]. |
C |
|
5C |
Удаляет текст от курсора до конца текущей строки (точнее, вырезает текст в буфер обмена по умолчанию) и переводит vi в режим вставки текста[15] (т.е. фактически, производит замену старого текста на новый);
можно использовать множитель[1]; |
r |
маленькая R |
rx
rT
5r5 |
Заменяет символ под курсором на символ, указанный после "r";
Можно использовать множитель[1]; При использовании множителя производится замена символов справа от курсора, количество замен задается множителем. Все символы заменяются на символ, указанный после "r" (символ, указанный после "r", повторяется число раз, заданное множителем). |
R |
|
R123
3Ryyy |
Переводит vi в режим вставки текста[15] и в этом режиме включает режим замены символов, (cимволы под курсором заменяются на вводимые, аналог insert). Команда применяется, когда неизвестно, сколько придется изменить символов на другие (иначе можно было бы использовать команду s с указанием числа заменяемых символов, например, 7s). При удалении вводимых символов возвращаются те которые были до ввода команды. Такой режим сохраняется до конца строки. При вводе новой строки (по нажатию Enter), происходит не переход на другую строку с тем же режимом замены текста, а замена строки (с удалением строки, которая была ниже и созданием пустой строки);
Можно использовать множитель[1]; При использовании множителя введенный текст повторяется количество раз, заданное множителем
В VIM:
при вводе новой строки происходит вставка новой строки, строка ниже текущей не удаляется. |
J |
большая джей (не I ) |
J
3J |
Объединяет текущую строку со следующей строкой.
Можно использовать множитель[1]; Множитель показывает, сколько следующих строк необходимо объеденить с текущей. Например 2J объеденяет две следующие строки с текущей, на которой расположен курсор. |
>> |
это последовательность клавиш[14]: две угловые скобки вправо |
>>
2>>
5>> |
увеличить отступ для текущей строки;
Можно использовать множитель[1]; Множитель показывает, у скольких строк нужно сделать отступ (начиная с текущей) |
<< |
это последовательность клавиш[14]: две угловые скобки влево |
<<
3<<
6<< |
уменьшить отступ для текущей строки;
Можно использовать множитель[1]; Множитель показывает, у скольких строк нужно сделать отступ (начиная с текущей) |
Команды управления курсором / модификации текста (в режиме вставки)
Команда |
Подробнее |
Примеры |
Описание команды |
стрелки |
Стрелки управления курсором (влево, вправо, вверх,вниз) |
|
Управляют курсором в режиме вставки |
Backspace |
клавиша Backspace на клавиатуре |
|
Удаляет предыдущий символ, введенный в текущем режиме вставки; нельзя использовать множитель[1]; |
Ctrl+h |
это комбинация клавиш[13] |
Ctrl+h |
Удаляет предыдущий символ, введенный в текущем режиме вставки; нельзя использовать множитель[1]; |
Ctrl+i |
это комбинация клавиш[13] |
Ctrl+i |
аналогично клавише Tab |
Ctrl+T |
это комбинация клавиш[13] |
Ctrl+T |
аналогично клавише Tab |
Ctrl+w |
это комбинация клавиш[13] |
Ctrl+w |
Удаляет предыдущее слово, введенное в текущем режиме вставки; нельзя использовать множитель[1]; |
Ctrl+u |
это комбинация клавиш[13] |
Ctrl+u |
Очищает текущую строку, введенную в текущем режиме вставки (остается пустая строка); нельзя использовать множитель[1]; |
Ctrl+v |
это комбинация клавиш[13] |
Ctrl+v Ctrl+u |
Вставляет следующую комбинацию клавиш (в том числе служебную) как спецсимвол в текущую строку. Используйте Ctrl-V для вставки управляющих символов. Символы "перевод строки" и Ctrl-J не могут быть вставлены в текст иначе, как символы "новая строка". Ctrl-Q и Ctrl-S захватываются операционной системой перед тем, как будут обработаны редактором vi, поэтому они тоже не могут быть вставлены как текст;
нельзя использовать множитель[1]; |
Ctrl-@ |
это комбинация клавиш[13] |
Ctrl-@ |
Введенный в качестве первого символа при вводе (в режиме вставки), он заменяется на последний вставленный текст, и ввод прекращается. Из последней вставки запоминается только 128 символов. Если было вставлено более 128 символов, то эта команда символы не вставляет. Символ Ctrl-@ не может находиться в файле, даже заключенный в кавычки. |
Буферы обмена / регисты в Vi
В текстовом редакторе vi есть три типа буферов (они же регистры): регистр стирания (0-9), неименованный регистр и именованные регистры (a-z). В регистры стирания автоматически заносятся стираемые элементы. В регистре 0 хранится последний стертый элемент, в регистре 1 - предпоследний и т. д. Именованные регистры сохраняют свое содержимое при переходе к редактированию другого файла. Чтобы указать, что вы хотите скопировать или удалить текст в определенный регистр, нужно указать его имя перед командой. Как отличить, что используется регистр, а не команда - перед именем регистра обязательно указывать двойные кавычки (").
Также, именованные регистры могут использоваться для того, чтобы «накапливать» удалённый или копируемый текст. Для этого используйте регистры "A - "Z. Это те же самые регистры от a до z, но при использовании заглавных букв происходит добавление текста в именованный регистр.
Например:
"pyy = в регистр "p" скопировать текущую строку
"yyy = в регистр "y" скопировать текущую строку
"adw = в регистр "a" удалить (т.е. вырезать) ближайшее слово[2] в текущей строке (на котором стоит курсор, начиная с позиции курсора вправо)
"tp = вставить содержимое из регистра "t"
"u5dd = в регистр "u" удалить (т.е. вырезать) 5 строк, начиная с текущей
"zy`o = в регистр "z" скопировать текст с текущей позиции курсора и до позиции курсора, заданной буквенной меткой "o"
Команды работы с буфером обмена (в командном режиме)
Команда |
Подробнее |
Примеры |
Описание команды |
y |
маленькая Y |
y5l
yy
3yy
y$ |
Копирует текст в буфер обмена по умолчанию - или в указанный буфер обмена;
можно использовать множитель[1];
Текст удаляется от курсора до границы, заданной командой перемещения, указываемой после "y":
7yw = y7w = копирование текста на 7 слов[2] вперёд[9]
yy = копирование текущей строки текста
7yy = копирование 7 строк текста вперед (вниз), начиная с текущей
"ty`o = скопировать текст в буфер обмена с именем "t" от курсора до позиции курсора, заданной буквенной меткой "o". |
p |
маленькая английская P |
p
"yp
"ap |
Вставляет текст из буфера обмена после текущей позиции курсора; нельзя использовать множитель[1];
В VIM:
можно использовать множитель [1]; в Vim используется 10 (цифры от 0 до 9) неименованных ячеек буфера удаления. Можно вставить не только последнее удаление, но и удаления сделанные ранее. Например команда "4p вставит под курсор содержимое четвертого удаления начиная с последнего. |
P |
|
P
"bP
"zP |
Вставляет текст из буфера обмена в текущую позицию курсора; нельзя использовать множитель[1];
В VIM:
можно использовать множитель [1]; в Vim используется 10 (цифры от 0 до 9) неименованных ячеек буфера удаления. Можно вставить не только последнее удаление, но и удаления сделанные ранее. Например команда "4p вставит под курсор содержимое четвертого удаления начиная с последнего. |
Команды отмены/повтора операций (в командном режиме)
Команда |
Подробнее |
Примеры |
Описание команды |
u |
маленькая U |
u |
Отмена последней команды; нельзя использовать множитель[1];
В VIM:
Можно использовать множитель[1]; |
U |
|
U |
Отмена всех последних изменений в строке. Если строка удалена, то применить эту команду к данной строке будет невозможно; нельзя использовать множитель[1]; |
Ctrl+r |
это комбинация клавиш[13] |
Ctrl+r |
В VIM:
повтор последнего изменения (отмена отмены, вперед по изменениям) |
. |
точка |
.
7. |
Повтор последней команды, включая ввод текста; Можно использовать множитель[1]; |
~ |
тильда |
~
5~ |
Замена символов под курсором на противоположный регистр (заглавные в прописные и прописные в заглавные); нельзя использовать множитель[1];
В VIM:
Можно использовать множитель[1];
Например, команда 5~ поменяет пять символов начиная с текущего под курсором на противоположный регистр. |
Команды установки режимов отображения (в командном режиме)
Команда |
Подробнее |
Примеры |
Описание команды |
:set nu |
|
|
|
:set nowrap |
|
|
Убрать в редакторе vim (не в VI !) перенос строк |
leftright |
|
|
Убрать в редакторе vi (не в VIM !) перенос строк |
:set all |
|
|
Показать все текущие настройки редактора |
Команды управления файлами (в командном режиме и режиме командной строки)
Режим командной строки включается в редакторе vi, для включения этого режима необходимо в командном режиме набрать двоеточие, команду, после чего нажать клавишу <Enter>.
Команда |
Подробнее |
Примеры |
Описание команды |
ZQ |
|
|
Завершить работу с vi, без сохранения изменений. |
ZZ |
|
|
Сохранить изменения в файл, если после последней записи были сделаны изменения, и завершить работу с vi |
:wq |
двоеточие и буквы wq |
:wq<Enter> |
Сохранить изменения в файл и завершить работу с vi |
:q! |
двоеточие, буква "q" и восклицательный знак |
:q!<Enter> |
Завершить работу с vi, без сохранения изменений. |
:w |
маленькая W |
:w filename <Enter> |
Сохранить изменения в текущем файле (если не указано имя файла), если имя указано - сохранить в файле с указанным именем |
:w! |
двоеточие, буква "w" и восклицательный знак |
:w!<Enter> |
Эта команда может помочь, если файл открыт в режиме "read-only" (с опцией -R), если файл заблокирован другим пользователем, либо отсутствуют такие привилегии, либо еще какая беда. При попытке записи без «!» будет выдано соответствующее предупреждение. |
:e! |
двоеточие, буква "e" и восклицательный знак |
:e!<Enter> |
Отменить изменения в текущей сессии |
|
|
|
|
Примечания:
[1] Множитель - это целое число, большее нуля (начиная с 1), которое указывается непосредственно перед самой командой. Число задает количество повторений этой команды (например, 20w - это то же самое, что 20 раз нажать "w"), либо количество объектов (с которыми работает эта команда - символ, слово, строка,...), которые необходимо обработать: 5yy - скопировать в буфер обмена 5 строк, начиная с текущей (а не 5 раз скопировать одну и ту же строку), 4tc - найти 4-ю букву "c" и остановиться перед ней (выполненная 4 раза команда "tc" сработает так же, как и одна команда "tc": курсор останется перед первой же найденной "с"). Если множитель не задается, обычно подразумевается число "1" (но не всегда - например, команда "G" переместит курсор в конец файла, а 1G - в начало).
В случае использования комбинаций клавиш (например, таких как Ctrl+F, Ctrl+E, ...) сначала набирается на клавиатуре число - множитель, а затем (без пробелов, табуляций и т.д.) нажимается комбинация клавиш.
Ноль ("0") - не множитель, это команда!
[2] Слово - строка буквенно-числовых символов, разделенных пунктуацией или пустым пространством (например, метка табуляции, символ новой строки или пробел).
[3] Непробельное слово - строка непустых символов, разделенных пунктуацией или пустым пространством (например, метка табуляции, символ новой строки или пробел). Включает в себя (в том числе) знаки пунктуации.
[4] Предложение - последовательность символов, заканчивающаяся точкой (.), знаком вопроса (?) или восклицательным знаком (!) и следующими за ними двумя пробелами или символом новой строки. Предложение начинается с первого непустого символа, за которым следует всё предложение. Предложение также ограничено параграфом или разделителями разделов.
[5] Параграф определен опцией paragraph. По умолчанию параграфы разделены макросами команды nroff - '.IP', '.LP', '.P', '.QP', '.bp'. Параграфы также начинаются после пустых строк.
[6] Раздел определен опцией section. По умолчанию разделы разделены макросами команды nroff - '.NH', '.SH'. Разделы также начинаются с символов "прогон страницы" (Ctrl-L) и со строк, начинающихся со знака ({).
[7] Контекст - используется только термин "Предыдущий контекст"[8].
[8] Предыдущий контекст - это место в файле последнего несвязанного (nonrelative) перемещения курсора, т.е. перемещения, выполненного с помощью одной из команд: Ctrl+A, Ctrl+T, Ctrl+], %, одинарная кавычка ('), апостроф (`), скобки левая или правая: ), (, /, ?, G, H, L, [[, ]], {, }.
[9] Прокрутка вперёд - курсор опускается вниз по тексту и/или текст прокручивается вверх, движение в направлении от начала документа к его концу.
[10] Прокрутка назад - курсор поднимается вверх по тексту и/или текст прокручивается вниз, движение в направлении от конца документа к его началу.
[11] Регулярное выражение - это формальное описание шаблона, который соответстует текстовой строке. Регулярные выражения используются для расширенного контекстного поиска и модификации текста. Они могут быть во многих профессиональных редакторах, в программах синтаксического анализа (parser programs) и в языках.
[12] Метасимволы - используются в регулярных выражениях внутри редактора vi, когда включен режим magic. Установка режима magic дает доступ к мощному набору метасимволов, используемых в регулярных выражениях. Недостатком magic является то, что пользователь должен помнить все символы magic и перед ними ставить знак (\), чтобы использовать их как "обычные" символы.
[13] Комбинация клавиш - это одновременное нажатие нескольких клавиш. Например, Ctrl+F означает "нажать Ctrl, нажать F, отпустить F, отпустить Ctrl".
[14] Последовательность клавиш - это последовательное нажатие клавиш. Например, последовательность ZQ означает "нажать Z, отпустить, нажать Q, отпустить".
[15] Режим вставки текста - см. раздел "Режимы vi".
Источниками для данной статьи послужили следующие материалы:
- Просто о Vim: PDF, HTML
- VIM: Википедия
- Linux по-русски: vi
- Семь привычек эффективного редактирования текстов
- Редактор VI. Список команд
- Очень кратко о редакторе "VI"
- 100 команд vim, которые должен знать каждый
- Vim - Викиучебник (копия)
- Vim и русская раскладка клавиатуры
- Vim Color Editor HOW-TO (Vi Улучшенный с цветной подсветкой синтаксиса)
- Vim magic - Регистры
- Vim: Небольшой справочник. Заметки разработчика.
- VIM - редактирование файлов, основы работы
- Вкладки, регистры, макросы, замена текста в VIM
- Использование Vim в повседневной работе
- Лучшие подсказки по Vim.
- Режим совместимости с vi в bash и zsh
- Advanced Vi Cheat Sheet
- Vim новая усовершенствованная версия редактора vi
- FreeBSD Man pages: vi
- Browsing programs with tags
- Моя шпаргалка по работе в Vim
- Asterisk подсветка синтаксиса в vim
- VIM Ctrl-V Conflict with Windows Paste
- Поваренная Книга Vim
- Graphical cheat sheet (Vim)
Статья отредактирована 05.08.2016, 29.10.2017, 17.07.2020, опубликована 17.07.2020
|