Vim шпаргалка
Режимы:
Vi имеет два режима: режим вставки и режим команд. Редактор начинает работать в командном режиме, когда происходит перемещение курсора и удаление и копирование текста. Режим вставки начинается после ввода команд вставки и изменения. [ESC] возвращает редактор в режим команд (где вы можете выйти из редактора, например, напечатав :q!). Большинство команд выполняется как только вы их напечатаете, кроме команд с двоеточием, которые выполняются, когда вы нажмете клавишу Enter.
Выход:
:wq |
Выход с сохранением изменений |
:q |
Выход, если не было изменений |
ZZ |
Выход с сохранением изменений, если они были |
:q! |
Выход с игнорированием изменений |
Вставка текста:
i |
Вставка перед курсором |
I |
Вставка перед первым непробельным символом строки |
a |
Добавление после курсора |
A |
Добавление в конце строки |
o |
Открытие новой строки после текущей строки |
O |
Открытие новой строки перед текущей строкой |
r |
Замена одного символа |
R |
Замена нескольких символов |
Перемещение:
h |
Перемещение влево |
j |
Перемещение вниз |
k |
Перемещение вверх |
l |
Перемещение вправо |
w |
Перемещение к следующему слову |
W |
Перемещение к следующему пробелу - ограничителю слова |
b |
Перемещение к началу слова |
B |
Перемещение к начальному пробелу - ограничителю слова |
e |
Перемещение к концу слова |
E |
Перемещение к конечному пробелу - ограничителю слова |
( |
Перемещение на предложение назад |
) |
Перемещение на предложение вперед |
{ |
Перемещение на параграф назад |
} |
Перемещение на параграф вперед |
0 |
Перемещение На начало строки |
$ |
Перемещение на конец строки |
1G |
Перемещение на первую строку файла |
G |
Перемещение на последнюю строку файла |
nG |
Перемещение на n-ю строку файла |
:n |
Перемещение на n-ю строку файла |
fc |
Перемещение вперёд на c |
Fc |
Перемещение назад на c |
H |
Перемещение в начало экрана |
M |
Перемещение в середину экрана |
L |
Перемещение в нижнюю строку экрана |
% |
Перемещение к парной скобке: ( ), { }, [ ] |
Удаление текста:
Почти все команды удаления выполняются печатаньем d, а затем - команды перемещения. Например, dw удаляет слово. Несколько других команд удаления:
x |
Удаление символа под курсором |
X |
Удаление символа слева от курсора |
D |
Удаление текста до конца строки |
dd |
Удаление текущей строки |
:d |
Удаление текущей строки |
Сохранение текста в буфере:
Как и команды удаления, большинство команд буферизации выполняются печатаньем y, а затем - команды перемещения. Например, y$ сохраняет в буфере текст до конца строки. Две другие команды сохранения в буфере:
yy |
Сохраняет в буфере текущую строку |
:y |
Сохраняет в буфере текущую строку |
Изменение текста:
Команды изменения являются командами удаления, которые переводят редактор в режим вставки. Они выполняются печатаньем c, а затем - команды перемещения. Например, cw изменяет слово. Несколько других команд изменения:
C |
Изменение до конца строки |
cc |
Изменение всей строки |
Вставка текста из буфера:
p |
Вставка после позиции или после строки |
P |
Вставка перед позицией или перед строкой |
Буферы:
Перед любой командой удаления, изменения, сохранения в буфере или вставки из буфера могут быть созданы именованные буферы. Общий префикс имеет форму "c, где c - любой символ нижнего регистра. Например, "adw удаляет слово в буфер a. Его можно впоследствии вернуть в текст соответствующей командой "ap.
Метки:
В файле можно устанавливать именованные метки. Малые латинские буквы обозначают локальные метки. Метки также могут задавать границы диапазона.
mc |
Установка для строки маркер c. |
`c |
Переход к точной позиции метки c. |
'c |
Переход на первый непробельный символ строки с маркером c. |
Поиск строк:
/строка |
Поиск вперед строки строка |
?строка |
Поиск назад строки строка |
n |
Поиск следующего вхождения строки строка |
N |
Поиск предыдущего вхождения строки строка |
Замена:
Функции поиска и замены выполняются командой :s. Она обычно комбинируется с областью действия или с командой :g (см.ниже).
:s/шаблон/строка/флаги |
Замена шаблон на строка в соответствии с флаги. |
g |
Флаг - замена всех вхождений шаблона. |
c |
Флаг - подтверждение замен. |
& |
Повторение последней команды :s. |
Регулярные выражения:
. (точка) |
Один любой символ, кроме символа конца строки. |
* |
Ноль или более повторений предыдущего элемента. |
[...] |
Один любой символ, определенный в наборе. |
[^...] |
Один любой символ, не определенный в наборе. |
^ |
Начало строки. |
$ |
Конец строки. |
< |
Начало слова. |
> |
Конец слова. |
(…) |
Группировка - обычно используется для группирования условий. |
n |
Содержимое n-й группировки. |
[...] - примеры наборов:
[A-Z] |
От заглавной буквы A до заглавной буквы Z. |
[a-z] |
От строчной буквы a до строчной буквы z. |
[0-9] |
От 0 до 9 (все цифры) |
[./=+] |
Набор, содержащий . (точка), / (слеш), =, и +. |
[-A-F] |
Набор от заглавной буквы A до заглавной буквы F и тире (тире д.б. указано первым). |
[0-9 A-Z] |
Набор, содержащий все заглавные буквы и цифры и пробел |
[A-Z][a-zA-Z] |
Первая позиция содержит заглавную букву от A до Z. Вторая позиция содержит любую букву. |
Примеры регулярных выражений:
/Hello/ |
Соответствует строке, содержащей значение Hello. |
/^TEST$/ |
Соответствует строке, содержащей только текст TEST. |
/^[a-zA-Z]/ |
Соответствует строке, начинающейся с любой буквы. |
/^[a-z].*/ |
Соответствует строке, начинающейся с a-z, после которой может быть ноль или более символов. |
/2134$/ |
Соответствует строке, заканчивающейся 2134. |
/\(21\|35\)/ |
Соответствует строке, содержащей 21 или 35. Обратите внимание на использование ( ) с вертикальной чертой, задающей условие «или». |
/[0-9]*/ |
Соответствует строке, содержащей ноль или более цифр. |
/^[^#]/ |
Соответствует строке, в которой первый символ - не #. |
Примечания:
1. Регулярные выражения чувствительны к регистру.
2. Регулярные выражения используются, когда задается pattern.
Счетчики:
Каждой команде может предшествовать число, которое задает, сколько раз она должна быть выполнена. Например, 5dw удалит 5 слов, а 3fe переместит курсор вперед на 3-е вхождение буквы e. даже вставка может повторяться в соответствии с этим методом, например, вставить одну и ту же строку 100 раз.
Области действия:
Области действия могут предшествовать большинству команд с двоеточием и приводят к тому, что команда будет выполняться для строки или строк. Например, :3,7d удалит строки 3-7. Области действия обычно комбинируются с командой :s для выполнения замены на нескольких строках и с :.,$s/шаблон/строка/g для выполнения замены от текущей строки до конца файла.
:n,m |
Область действия - Строки n-m |
:. |
Область действия - Текущая строка. |
:$ |
Область действия - Последняя строка. |
:'c |
Область действия - Маркер c |
:% |
Область действия - Все строки файла. |
:g/шаблон/ |
Область действия - Все строки, содержащие шаблон. |
Файлы
:w файл |
Запись в файл. |
:r файл |
Чтение из файл. |
:n |
Переход к следующему файлу. |
:prev |
Переход к предыдущему файлу. |
:e файл |
Редактирование файла файл |
!!программа |
Замена строки выводом программы программа. |
Другое
~ |
Переключение регистра. |
J |
Соединение строк. |
. |
Повторение последней команды изменения текста. |
u |
Отмена последнего изменения. |
U |
Отмена всех изменений в строке. |
Введение:
Выше мы впервые познакомились с режимами. Теперь, давайте изучим концепцию режимов детальнее и узнаем, что мы можем сделать в каждом режиме.
Типы режимов:
Есть три основных режима в Vim - нормальный, вставки и визуальный.
• Нормальный режим - это тот, в котором вы можете выполнять команды. Это основной режим, в который переходит Vim после запуска.
• Режим вставки - это режим, в котором вы можете набирать нужный текст.
• Визуальный режим - это где вы визуально выбираете часть текста, которую нужно обработать командой/операцией.
Нормальный режим:
Изначально, вы попадете в нормальный режим. Давайте посмотрим что вы можете делать в этом режиме. Наберите :echo "hello world" и нажмите enter. Вы увидите знаменитые слова hello world. То, что вы только что сделали, это запустили командуVim, называемую :echo, и вы добавили текст к ней, который и был успешно выведен. Наберите /hello и нажмите клавишу enter. Vim будет искать эту фразу и перейдет к первому её вхождению.
Это было только два простых примера команд, доступных в нормальном режиме. Мы рассмотрим много других команд в последующих главах. Как использовать помощь. Почти так же важно, как знать о нормальном режиме, это уметь пользоваться командой :help. Здесь вы можете больше узнать о командах, доступных в Vim. Запомните, вам не нужно знать все команды, доступные в Vim, достаточно просто знать, где найти их, когда они вам понадобятся. Например, смотрим :help usr_toc дает нам оглавление справочного руководства. Вы можете посмотреть :help index для поиска определенной темы, интересной вам, для примера, запустите /insert mode для просмотра информации относительно режима вставки. Если вы не можете запомнить эти две темы, нажмите F1 или просто запустите :help.
Когда Vim запускается, он открывается в нормальном режиме, вы можете использовать i для перехода в режим вставки.
Есть и другие способы переключения из нормального режима в режим вставки, такие как:
• Запустите :e dapping.txt
• Нажмите i
• Введите следующий абзац (включая все опечатки и ошибки, мы исправим их позже): means being determined about being determined and being passionate about being passionate
• Нажмите клавишу Esc для переключения назад в нормальный режим.
• Запустите :w
Упс, мы, кажется, упустили слово в начале строки, а наш курсор находится в конце строки, что нам теперь делать?
Наиболее эффективным способом было бы перейти в начало строки и вставить пропущенное слово? Должны ли мы использовать мышь, чтобы переместить курсор в начало строки? Должны ли мы использовать клавиши со стрелками для перемещения к началу строки? Должны ли мы нажать клавишу home и затем нажать i для переключения снова в режим вставки?
Оказывается, что наиболее эффективным способом будет нажатие I (верхний регистр I):
• Нажмите I
• Напишите Dappin
• Нажмите клавишу Esc для переключения назад в нормальный режим.
Обратите внимание, что мы использовали другой ключ для переключения в режим вставки, его особенностью является то, что он перемещает курсор в начало строки, а затем переключает в режим вставки.
Также обратите внимание, это важно, что нужно вернуться в нормальный режим, как только вы закончите вводить текст. Эта привычка будет полезна, потому что большинство ваших работ (после начальной фазы написания статьи) будет проводиться в нормальном режиме - где происходят все важные действия: перезапись, редактирование, полировка.
Теперь, давайте возьмем другой вариант команды i. Обратите внимание, что нажатие i вставит текст перед символом под курсором и включит режим вставки. Чтобы разместить курсор после текущей позиции, нажмите a ('a'fter).
• Нажмите a
• Наберите g и пробел (для завершения слова "Dapping")
• Нажмите Esc для переключения в нормальный режим
Как и в отношениях между i и I ключами, существует связь между ключами a и A - если вы хотите добавить текст в конце строки, нажмите клавишу A.
• Нажмите A
• Наберите . (поставьте точку для завершения предложения)
• Нажмите Esc для переключения в нормальный режим
Подведем итог, что мы узнали о четырех клавишах:
| Команда | Действие |
| i | вставить текст до курсора |
| I | вставить текст с начала строки |
| a | добавить текст после курсора |
| A | добавить текст с конца строки |
Обратите внимание, как команды в верхнем регистре "больше" версий команд в нижнем регистре.
Теперь, когда мы умеем быстро двигаться в текущей строке, давайте посмотрим, как перейти на новые строки. Если вы хотите создать ('o'pen) новую строку и начать ввод данных, нажмите клавишу о.
• Нажмите o
• Наберите I'm a rapper.
• Нажмите Esc для переключения в нормальный режим.
Хм, было бы более интересно, если бы новое предложение мы написали в новом абзаце.
• Нажмите O (верхний регистр 'O')
• Нажмите Esc для переключения в нормальный режим
Подводя итог двум новым ключам мы запоминаем:
|
Команда |
Действие |
|
o |
открыть |
|
O |
открыть |
Обратите внимание, как верхний и нижний режим команды 'o' противоположны по направлению, в котором они открывают строку.
Было ли что-то не так в тексте, который мы только что написали? А да, это должно быть "Dapper", а не rapper! Один символ мы должны изменить, как эффективно это сделать?
Мы можем нажать i для переключения в режим вставки, нажать клавишу Del для удаления r, набрать d и затем нажать Esc для переключения и выхода из режима вставки. Но это четыре шага для такого простого изменения! Есть ли что то лучше? Вы можете использовать клавишу s - s для замены ('s'ubstitute).
• Перемещаем курсор к символу r (или просто нажимаем b для перехода назад ['b'ack] к началу слова)
• Нажимаем s
• Набираем d
• Нажмите Esc для переключения в нормальный режим
Ну, ладно, возможно в данном случае это не сильно нас спасло, но представьте себе что этот процесс повторяется снова и снова в течение всего дня! Создание таких элементарных, максимально быстрых операций, это выгодно, потому что они помогают нам сконцентрировать наши усилия на более творческих и интересных аспектах работы. Как говорит Линус Торвальдс, "это означает не только то, что можно сделать что-то быстро, но поскольку это быстро, метод, которым вы делаете вашу работу, кардинально меняется".
Опять же, есть S, большая версия клавиши s, которая заменяет всю строку, а не текущий символ.
• Нажмите S
• Наберите Be a sinner.
• Нажмите Esc для переключения в нормальный режим
|
Команда |
Действие |
|
s |
замена |
|
S |
замена |
Давайте вернемся к нашему последнему действию... Не могли бы мы сделать его более эффективно, раз мы хотим заменить ('r'eplace) только один символ? Да, мы можем использовать клавишу r.
• Двигаем курсор к первому символу слова sinner.
• Нажимаем r
• Набираем d
Обратите внимание, что мы еще в нормальном режиме и нам не нужно нажимать Esc.
Большая версия r называется R, она заменяет последовательно расположенные символы.
• Установите курсор на 'i' в dinner.
• Нажмите R
• Наберите app (слово теперь становится 'dapper')
• Нажмите Esc для переключения в нормальный режим.
|
Команда |
Действие |
|
r |
Заменить |
|
R |
Текст должен выглядеть так:
Dapping means being determined about being determined and being passionate about being passionate.
Be a dapper.
Уф. Мы рассмотрели много в этой главе, но я гарантирую, что это самый трудный шаг. Как только вы усвоите все это, вы поймете сердцем и душой как работает Vim, и все другие функции в Vim - это просто глазурь на торте.
Повторюсь, понимание того, как работают режимы и как переключаться между режимами, является ключом к пониманию Vim, так что если вы еще не понимаете, пересмотрите вышеизложенные примеры еще раз, пожалуйста, не стесняйтесь читать их снова. Делайте это когда вам понадобится.
Если вы хотите прочитать больше об этих командах, смотри :help inserting и :help replacing.
Режим визуализации
Предположим, что вы хотите выделить несколько слов и заменить их полностью каким-то новым текстом, который вы хотите написать. Что вы будете делать?
Один из способов заключается в использовании мыши, щелкните в начале текста, который вас интересует, удерживая левую кнопку мыши, перетащите мышь до конца соответствующего текста, а затем отпустите левую кнопку мыши. Но зачем так много работать?
Мы могли бы использовать клавиши Del или Backspace, чтобы удалить все символы, но кажется это еще хуже по эффективности.
Наиболее эффективным способом было бы поместить курсор в начало текста, нажать v, чтобы начать визуальный режим, используя клавиши со стрелками или какие-либо текстовые команды перейти в конец соответствующего текста (например, нажмите 5e, для перехода к концу пятого слова от текущей позиции курсора), а затем нажмите c, чтобы изменить ("c'hange) текст. Обратите внимание на возросшую эффективность.
В этой конкретной операции (команда с), вы будете переведены в режим вставки, поэтому после его окончания нажмите Esc, чтобы вернуться в нормальный режим.
Команда v работает с символами. Если вы хотите работать со строками, используйте верхний регистр V.
Итоги
Это схема отношений между различными режимами:
Normal -- i,I,a,A,o,O,s,S,R --> Insert
Normal <------ Escape ------- Insert
| ^
v,V | Escape
v |
Visual
(r replaces one character without leaving Normal mode.)
(Это нарисовано с использованием Vim и плагина Dr.Chip's DrawIt)
Смотри :help vim-modes-intro и :help mode-switching для подробного описания различных режимов и переключения между ними, соответственно.
Если вы все еще не уверены в том, что концепция режимов является основной силой, обеспечивающей мощь и простоту Vim, читайте статьи «Почему Vi» и о модели ввода vi, которые показывают, что это лучший способ редактирования.
Внешние ссылки
http://vim.sourceforge.net/scripts/script.php?script_id=40
http://www.viemu.com/a-why-vi-vim.html
http://blog.ngedit.com/2005/06/03/the-vi-input-model/
Дополнительная шпаргалка
~/.vimrc |
Файл настройки Vim |
:e scp://user@host/path/to/the/file.txt |
Редактировать удалённый файл; netrw также поддерживает ftp и ftps |
:Ex или :e ./ |
Открыть файловый менеджер |
hjkl |
Перемещение в четырёх направлениях |
i |
Режим вставки |
I |
Вставка перед первым непробельным символом строки |
a |
Добавление после курсора |
A |
Добавление в конце строки |
o |
Открыть строку ниже текущей |
O |
Открыть строку выше текущей |
R |
Заменять существующий текст |
u, :undo |
Отмена |
Ctrl-R, :redo |
Повтор отменённого действия |
dd |
Вырезать строку |
cc |
Удалить строку и начать ввод |
yy |
Копировать строку |
p |
Вставить из регистра |
ndd |
Удалить n строк |
nyy |
Скопировать n строк |
Escape |
Вернуться в нормальный режим |
Delete |
Удалить символ под курсором |
:n |
Перейти на строку n |
% |
Перейти к парной скобке |
:e fname |
Редактировать файл |
:w [fname] |
Сохранить изменения |
:wa |
Сохранить все изменённые файлы |
:q |
Выйти из редактора |
:q! |
Выйти без сохранения |
:colorscheme name |
Выбрать цветовую схему; для Vim 7.2 схемы могли лежать в /usr/local/share/vim/vim72/colors/*.vim |
:pwd |
Показать текущий каталог |
:cd path |
Сменить каталог |
:!cmd |
Выполнить внешнюю команду |
Ctrl-P, Ctrl-N |
Дополнение текста в режиме вставки |
Ctrl-R, =, expr, Enter |
Вставить результат выражения в режиме вставки, например 5*2-3 |
Подсветка синтаксиса
:syntax on |
Включить подсветку |
:syntax off |
Выключить подсветку |
Перенос строк
:set wrap |
Разрешить перенос при отображении |
:set nowrap |
Запретить перенос при отображении |
Печать
:hardcopy |
Распечатать документ |
:set printoptions=duplex:off |
Отключить двустороннюю печать |
Сворачивание
zc |
Закрыть складку |
zo |
Открыть складку |
zM |
Закрыть все складки |
zR |
Открыть все складки |
za |
Переключить состояние складки |
zf |
Создать складку при ручном методе |
:set foldenable |
Включить сворачивание |
:set foldmethod=syntax |
Сворачивание по синтаксису |
:set foldmethod=indent |
Сворачивание по отступам |
:set foldmethod=manual |
Выделить участок через v и выполнить zf |
:set foldmethod=marker |
Сворачивание по меткам в тексте |
:set foldmarker=begin,end |
Задать метки начала и конца |
Метки
ma |
Установить локальную метку a |
mB |
Установить глобальную метку B |
`c |
Перейти к точной позиции метки c |
`0 |
Вернуться к позиции при последнем выходе из Vim |
:marks |
Показать метки |
Регистры
"ayy |
Копировать строку в регистр a |
"bdd |
Вырезать строку в регистр b |
"C3dd |
Вырезать три строки и дописать в регистр c |
:reg [names] |
Показать содержимое регистров |
Выделение
v, hjkl |
Выделить текст |
V |
Выделить строки |
Ctrl-V |
Выделить прямоугольный блок |
p |
Вставить |
y |
Копировать |
d |
Удалить |
gu |
Перевести текст в нижний регистр |
gU |
Перевести текст в верхний регистр |
Отступы
[count]> |
Сдвинуть выделение вправо |
[count]< |
Сдвинуть выделение влево |
[count]>> |
Сдвинуть строки вправо |
[count]<< |
Сдвинуть строки влево |
:set tabstop=n |
Ширина табуляции в пробелах |
:set shiftwidth=n |
Ширина шага отступа |
:set expandtab / :set noexpandtab |
Заменять ли табуляцию пробелами |
Поиск и замена
/pattern |
Найти выражение |
n |
Следующее совпадение |
N |
Предыдущее совпадение |
:%s/foo/bar/gi |
Заменить все foo на bar без учёта регистра; подробности: http://eax.me/regular-expr/ |
Нумерация строк
:set number |
Включить номера строк |
:set nonumber |
Выключить номера строк |
Вкладки
:tabnew [fname] |
Открыть новую вкладку |
:tabs |
Показать вкладки |
:tabn |
Следующая вкладка |
:tabp |
Предыдущая вкладка |
ngt |
Перейти к вкладке n |
gt |
Следующая вкладка |
gT |
Предыдущая вкладка |
Окна
:split |
Разделить окно по горизонтали |
:vsplit |
Разделить окно по вертикали |
Ctrl-W, c |
Закрыть окно |
Ctrl-W, = |
Уравнять размеры окон |
Ctrl-W, h/j/k/l |
Перейти в соседнее окно; также работают стрелки |
Проверка орфографии
:setlocal spell spelllang=ru,en |
Включить русскую и английскую проверку |
|
|
:set spell! |
Переключить проверку |
]s |
Следующее слово с ошибкой |
[s |
Предыдущее слово с ошибкой |
zg |
Добавить слово в словарь |
zw |
Пометить слово как ошибочное |
zG |
Принять слово на время сеанса |
Кодировки
:e ++enc=encoding |
Открыть файл в указанной кодировке |
:w ++enc=encoding |
Сохранить файл в новой кодировке |
:set fileencodings=utf-8,koi8-r |
Кодировки для определения по убыванию приоритета |
Другое
:set wildmenu / :set nowildmenu |
Показывать варианты дополнения командной строки |
:set list |
Показывать табуляцию и конец строки |
q: |
Открыть историю команд |
. |
Повторить последнюю правку |
На этом пока всё. Думаю, я буду время от времени редактировать эту шпаргалку, так что следите за PS в конце следующих постов.