dimabagow

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 Включить русскую и английскую проверку
mkdir -p ~/.vim/spell
cd ~/.vim/spell
wget https://ftp.vim.org/vim/runtime/spell/ru.koi8-r.sug
wget https://ftp.vim.org/vim/runtime/spell/ru.koi8-r.spl
wget https://ftp.vim.org/vim/runtime/spell/en.ascii.sug
wget https://ftp.vim.org/vim/runtime/spell/en.ascii.spl
: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 в конце следующих постов.

Vim