Vim шпаргалка

Режимы:

Vi имеет два режима: режим вставки и режим команд. Редактор начинает работать в командном режиме, когда происходит перемещение курсора и удаление и копирование текста. Режим вставки начинается после ввода команд вставки и изменения. [ESC] возвращает редактор в режим команд (где вы можете выйти из редактора, например, напечатав :q!). Большинство команд выполняется как только вы их напечатаете, кроме команд с двоеточием, которые выполняются, когда вы нажмете клавишу Enter.

Выход:

Выход с сохранением изменений
: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Перемещение to botton of screen
%Перемещение to associated ( ), { }, [ ]

Удаление текста:
Почти все команды удаления выполняются печатаньем d, а затем – команды перемещения. Например, dw удаляет слово. Несколько других команд удаления:

xУдаление символа справа от курсора
XУдаление символа слева от курсора
DУдаление текста до конца строки
ddУдаление текущей строки
:dУдаление текущей строки

Сохранение текста в буфере:
Как и команды удаления, большинство команд буферизации выполняются печатаньем y, а затем – команды перемещения. Например, y$ сохраняет в буфере текст до конца строки. Две другие команды сохранения в буфере:

yyСохраняет в буфере текущую строку
:yСохраняет в буфере текущую строку

Изменение текста:
Команды изменения являются командами удаления, которые переводят редактор в режим вставки. Они выполняются печатаньем c, а затем – команды перемещения. Например, cw изменяет слово. Несколько других команд изменения:

CИзменение до конца строки
ccИзменение всей строки

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

pВставка после позиции или после строки
PВставка перед позицией или перед строкой

Буферы:
Перед любой командой удаления, изменения, сохранения в буфере или вставки из буфера могут быть созданы именованные буферы. Общий префикс имеет форму «c, где c – любой символ нижнего регистра. Например, «adw удаляет слово в буфер a. Его можно впоследствие вернуть в текс соответствующей командой «ap.

Markers:
На любую строку в файле могут быть установлены именованные маркеры. Именем маркера может быть любой символ нижнего регистра. Markers may also be used as limits for ranges.

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Область действия – Строки nm
:.Область действия – Текущая строка.
:$Область действия – Последняя строка.
:’cОбласть действия – Маркер c
:%Область действия – Все строки файла.
:g/шаблон/Область действия – Все строки, содержащие шаблон.

Файлы

:w файлЗапись в файл.
:r файлЧтение из файл.
:nПереход к следующему файлу.
:pПереход к предыдущему файлу.
: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
• Нажмите клавишу для переключения назад в нормальный режим.
• Запустите :w

Упс, мы, кажется, упустили слово в начале строки, а наш курсор находится в конце строки, что нам теперь делать?

Наиболее эффективным способом было бы перейти в начало строки и вставить пропущенное слово? Должны ли мы использовать мышь, чтобы переместить курсор в начало строки? Должны ли мы использовать клавиши со стрелками для перемещения к началу строки? Должны ли мы нажать клавишу home и затем нажать i для переключения снова в режим вставки?

Оказывается, что наиболее эффективным способом будет нажатие I (верхний регистр I):

• Нажмите I
• Напишите Dappin
• Нажмите клавишу для переключения назад в нормальный режим.

Обратите внимание, что мы использовали другой ключ для переключения в режим вставки, его особенностью является то, что он перемещает курсор в начало строки, а затем переключает в режим вставки.

Также обратите внимание, это важно, что нужно вернуться в нормальный режим, как только вы закончите вводить текст. Эта привычка будет полезна, потому что большинство ваших работ (после начальной фазы написания статьи) будет проводиться в нормальном режиме — где происходят все важные действия: перезапись, редактирование, полировка.

Теперь, давайте возьмем другой вариант команды i. Обратите внимание, что нажатие i поместит курсор на предыдущую позицию и включит режим вставки. Чтобы разместить курсора после текущей позиции, нажмите a (‘a’fter).

• Нажмите a
• Наберите g (для завершения слова «Dapping»)
• Нажмите для переключения в нормальный режим

Как и в отношениях между i и I ключами, существует связь между ключами a и A — если вы хотите добавить текст в конце строки, нажмите клавишу A.

• Нажмите A
• Наберите . (поставьте точку для завершения предложения)
• Нажмите для переключения в нормальный режим

Подведем итог, что мы узнали о четырех клавишах:

КомандаДействие
iвставить текст до курсора
Iвставить текст с начала строки
aдобавить текст после курсора
Aдобавить текст с конца строки

Обратите внимание, как команды в верхнем регистре «больше» версий команд в нижнем регистре.

Теперь, когда мы умеем быстро двигаться в текущей строке, давайте посмотрим, как перейти на новые строки. Если вы хотите создать (‘o’pen) новую строку и начать ввод данных, нажмите клавишу о.

• Нажмите o
• Наберите I’m a rapper.
• Нажмите для переключения в нормальный режим.

Хм, было бы более интересно, если бы новое предложение мы написали в новом абзаце.

• Нажмите O (верхний регистр ‘O’)
• Нажмите для переключения в нормальный режим

Подводя итог двум новым ключам мы запоминаем:

Команда

Действие

o

открыть
новую строку ниже

O

открыть
новую строку выше

Обратите внимание, как верхний и нижний режим команды ‘o’ противоположны по направлению, в котором они открывают строку.

Было ли что-то не так в тексте, который мы только что написали? А да, это должно быть «Dapper», а не rapper! Один символ мы должны изменить, как эффективно это сделать?

Мы можем нажать i для переключения в режим вставки, нажать клавишу для удаления r, набрать d и затем нажать для переключения и выхода из режима вставки. Но это четыре шага для такого простого изменения! Есть ли что то лучше? Вы можете использовать клавишу s — s для замены (‘s’ubstitute).

• Перемещаем курсор к символу r (или просто нажимаем b для перехода назад [‘b’ack] к началу слова)
• Нажимаем s
• Набираем d
• Нажмите для переключения в нормальный режим

Ну, ладно, возможно в данном случае это не сильно нас спасло, но представьте себе что этот процесс повторяется снова и снова в течение всего дня! Создание таких элементарных, максимально быстрых операций, это выгодно, потому что они помогают нам сконцентрировать наши усилия на более творческих и интересных аспектах работы. Как говорит Линус Торвальдс, «это означает не только то, что можно сделать что-то быстро, но поскольку это быстро, метод, которым вы делаете вашу работу, кардинально меняется».

Опять же, есть S, большая версия клавиши s, которая заменяет всю строку, а не текущий символ.

• Нажмите S
• Наберите Be a sinner.
• Нажмите для переключения в нормальный режим

Команда

Действие

s

замена
текущего символа

S

замена
текущей строки

Давайте вернемся к нашему последнему действию… Не могли бы мы сделать его более эффективно, раз мы хотим заменить (‘r’eplace) только один символ? Да, мы можем использовать клавишу r.

• Двигаем курсор к первому символу слова sinner.
• Нажимаем r
• Набираем d

Обратите внимание, что мы еще в нормальном режиме и нам не нужно нажимать .

Большая версия r называется R, она заменяет последовательно расположенные символы.

• Установите курсор на ‘i’ в sinner.
• Нажмите R
• Наберите app (слово теперь становится ‘dapper’)
• Нажмите для переключения в нормальный режим.

Команда

Действие

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.

Режим визуализации
Предположим, что вы хотите выделить несколько слов и заменить их полностью каким-то новым текстом, который вы хотите написать. Что вы будете делаете?

Один из способов заключается в использовании мыши, щелкните в начале текста, который вас интересует, удерживая левую кнопку мыши, перетащите мышь до конца соответствующего текста, а затем отпустите левую кнопку мыши. Но зачем там много работать?

Мы могли бы использовать клавиши или , чтобы удалить все символы, но кажется это еще хуже по эффективности.

Наиболее эффективным способом было бы поместить курсор в начало текста, нажать v, чтобы начать визуальный режим, используя клавиши со стрелками или какие-либо текстовые команды перейти в конец соответствующего текста (например, нажмите 5e, для перехода к концу пятого слова от текущей позиции курсора), а затем нажмите c, чтобы изменить («c’hange) текст. Обратите внимание на возросшую эффективность.

В этой конкретной операции (команда с), вы будете переведены в режим вставки, поэтому после его окончания нажмите , чтобы вернуться в нормальный режим.

Команда v работает с символами. Если вы хотите работать со строками, используйте верхний регистр V.

Итоги
Это схема отношений между различными режимами:

+———+ i,I,a,A,o,O,r,R,s,S +———-+
| Normal +———->————+ Insert |
| mode | | mode |
| +———-<------------+ | +-+---+---+ +———-+
| |
| |
| |
| |
| |
v,V V ^
| |
| |
| |
| |
+—+—+—-+
| Visual |
| 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/

Если вы все еще не уверены в том, что концепция режимов является основной силой, обеспечивающей мощь и простоту Vim, читайте статьи «Почему Vi»и о модели ввода vi, которые показывают, что это лучший способ редактирования.
Итак, вот она:
Файл настройки: ~/.vimrc
Можно редактировать файлы через сеть, например
:e ://user@host/path/to/the/file.txt
:Ex или :e ./ — файловый менеджерhjkl перемещение в разные стороны
i режим вставки
I добавление в начало строки
a режим добавления
A добавление в конец строки
o добавить строку сразу за текущей
O добавить строку перед текущей
R писать поверх имеющегося текста
u, :u[ndo] отмена предыдущего действия (undo)
CTR-R, :red[o] отмена отмены предыдущего действия (redo)
dd вырезать (удалить) строку
cc удалить и начать редактирование
yy копировать строку
p вставить из буфера обмена
d удалить n+1 строку
y скопировать n+1 строку
ESC перейти в режим просмотра
DEL удалить следующий символ
: перейти на строку #n
% перейти к парной скобке
:e редактировать файл
:w [fname] записать изменения
:wa сохранить изменения во всех файлах
:q выйти из редактора
:q! выйти из редактора, не сохраняя изменения
:color выбор цветовой схемы. цветвые схемы:
/usr/local/share/vim/vim72/colors/*.vim
:pwd текущий каталог
:cd [path] перейти в другой каталог
:! выполнить команду
CTR+p или CTR+n автоматическое дополнение текста
(в режиме редактирования)
CTR+r,=, вставить выражение, например 5*2 — 3
(в режиме редактирования)== Подсветка синтаксиса ==
:syntax on включить подсветку
:syntax off выключить подсветку (по умолчанию)
== Перенос строк ==
:set wrap разрешить word wrap (по умолчанию)
:set nowrap запретить word wrap
== Печать ==
:ha[rdcopy] распечатать документ
:set printoptions=duplex:off отключить двустороннюю печать
== Сворачивание ==
zc свернуть блок
zo развернуть блок
zM закрыть все блоки
zR открыть все блоки
za инвертирование
zf см :set foldmethod=manual
:set foldenable включить свoрачивание
:set foldmethod=syntax сворачивание на основе синтаксиса
:set foldmethod=indent сворачивание на основе отступов
:set foldmethod=manual выделяем участок с помощью v и говорим zf
:set foldmethod=marker сворачивание на основе маркеров в тексте
:set foldmarker=bigin,end задаем маркеры начала и конца блока
== Маркеры ==
ma установить локальный маркер a
mB установить глобальный маркер B
`c перейти к локальному маркеру c
`0 вернуться на позицию, на которой закончили
работу при закрытии vim
:marks просмотр маркеров
== Регистры ==
«ayy скопировать строку в регистр a
«bdd вырезать строку и поместить в регистр b
«С2d вырезать три строки и дописать в конец
регистра C
:reg [name1][name2][…] просмотреть содержимое регистров
== Выделение ==
v + hjkl выделение текста
SHIFT + v выделить строку
CTR + v выделение прямоугольника
p вставить
y копировать
d удалить
gu к нижнему регистру
gU к верхнему регистру
== Отступы ==
[#]> сдвинуть выделенное вправо
[#]< сдвинуть выделенное влево [#]>> сдвинуть строку вправо
[#]<< сдвинуть строку влево set tabstop=# для табуляции используется # пробелов set shiftwidth=# в командах отступа используется # пробелов set [no]expandtab заменять ли табуляцию на соответствующее число пробелов == Поиск и замена в файле == /<выражение> поиск выражения в файле
n следующее совпадение
N предыдущее совпадение
:%s/foo/bar/gi замена строк, см http://eax.me/regular-expr/
== Нумерация строк ==
:set number включить нумерацию строк
:set nonumber отключить нумерацию строк
== Работа с Tab’ами ==
:tabnew [fname] создать tab
:tabs вывести список табов
:tabn следующий таб
:tabp предыдущий таб
gt перейти на таб #n
gt следующий таб
gT предыдущий таб
== Работа с окнами ==
:split горизонтальное разбиение
:vsplit вертикальное разбиение
Ctr+W, затем
с закрыть окно
= установить равный размер окон
hjkl или стрелочки перемещение между окнами
== Проверка орфографии ==
mkdir -p ~/.vim/spell
cd ~/.vim/spell
wget http://ftp.vim.org/vim/runtime/spell/ru.koi8-r.sug
wget http://ftp.vim.org/vim/runtime/spell/ru.koi8-r.spl
wget http://ftp.vim.org/vim/runtime/spell/en.ascii.sug
wget http://ftp.vim.org/vim/runtime/spell/en.ascii.spl
setlocal spell spelllang=ru,en включить проверку орфографии
set spell! вкл/выкл проверку во время работы
]s следующее слово с ошибкой
[s предыдущее слово с ошибкой
zg good word
zw wrong word
zG ignore word
== Работа с кодировкой ==
e ++enc=<имя кодировки> Редактирование файла в ??? кодировке
w ++enc=<имя кодировки> Сохранить файл в новой кодировке
set fileencodings=utf-8,koi8-r Список автоматически определяемых
кодировок в порядке убывания
приоритета
== Другое ==
:set [no]wildmenu При авто-дополнении в командной строке над
ней выводятся возможные варианты
:set list Отображать табуляцию и переводы строк
q: История команд
. Повторение последней команды
На этом пока все. Думаю, я буду время от времени редактировать эту шпаргалку, так что следите за PS в конце следующих постов.

Vim шпаргалка