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 шпаргалка