воскресенье, 9 сентября 2007 г.

Vim HOWTO

Как и обещал, выкладываю свой Vim HOWTO, который я составил для себя в качестве шпоргалки. Большей своей частью это нарезка Vim - кратко обо всем, а также официальной документации и других HOWTO.

Перемещение по тексту
G, ^+End - На последнюю строку.
w, Sh+Right - Перемещает курсор вперед к началу следующего "маленького" слова ("маленькое" слово - состоит из символов алфавита и цифр, не "разорванных" пробелом, или знаков пунктуации, но не их смеси).
W - Перемещает курсор вперед к началу следующего "большого слова" (смесь алфавитно-цифровых символов и пунктуации).
b - Назад к началу "маленького" слова.
B - Назад к началу "большого" слова.
e - Вперед к концу "маленького" слова.
E - Вперед к концу "большого" слова.
( - На предложение назад (до точки).
) - На предложение вперед (до точки).
{ - На абзац назад (до пустой строки).
} - На абзац вперед (до пустой строки).
[[ - Вперед на одну секцию или до { в начале строки.
][ - Вперед на одну секцию или до } в начале строки.
]] - Назад на одну секцию или до { в начале строки.
[] - Назад на одну секцию или до } в начале строки.
^G, :file - Информация о текущем положении курсора в тексте.
^] - Переход по ссылке или на определение функции.
^T - Возврат после перехода по ссылке.
^O - Назад по списку переходов.
^I, Tab - Вперёд по списку переходов.
:ju - Список переходов.
tC - Передвигает к (не "на") следующий символ "c" в текущей строке.
fC - Находит (перемещает "на") первый символ "c" в текущей строке.
TC - Передвигает к (но не "на") преведущий символ "c" в текущей строке.
FC - Находит (передвигает "на") преведущий "c" в текущей строке.
:N - переход на N-ую строку файла

Прокрутка экрана
zs - Помещает курсор на левый край.
ze - Помещает курсор на правый край.
zt - Помещает курсор вверх экрана.
zz - Помещает курсор в центр экрана.
zb - Помещает курсор вниз экрана.

Работа с файлами
:qa! - Выход из всех открытых файлов без сохранения.
:x - Выход из всех открытых файлов без сохранения.
:wqa - Выход из всех файлов с сохранением.
:r - Загрузить файл в позицию курсора.
:e [++opt] [+cmd] [<file>] - Открыть новый файл заместив старый (без имени файла - перечитывает текущий):
Доступные опции [++opt]:
enc - перекодировка (++enc=cp866);
ff - формат файла (++ff=unix).
Доступные команды [+cmd]:
+ - начать с конца файла;
+<num> - начать с указанной строки;
+/<pat> - начать с первой строки в которой встречается шаблон <pat>.
ZZ - аналогично :wq

Выделение
v - Выделение текста.
V - Выделение строк.
CTRL-V - Выделение прямоугольной области.
gv - Повторное выделение текста.
o - Переместить курсор при выделении на другую сторону по диагонали.
O - Переместить курсор при выделении на другую сторону по горизонтали.
is - Добавить к выделению предложение без завершающего пробела.
as - Добавить к выделению предложение с завершающим пробелом.

Редактирование
d - Удаление текста:
dw - Удаляет следующее "маленькое" слово
d3w - Удаляет три следующих "маленьких" слова
3dw - Три раза удаляет следующее "маленькое" слово
3d3w - Три раза удаляет три следующих "маленьких" слова (т.е. удаляет девять "маленьких" слов)
d+ - Удаляет текущую строку и следующую за ней
d/the - Удаляет текст начиная с текущего положения курсора вплоть до первого встреченного "the", не включая его .
d$ - Удаляет до конца строки
d0 - Удаляет до начала строки
d30G - Удаляет от текущей строки до 30 строки (включая её)
dG - Удаляет от текущей строки до последней (включая её)
d1G - Удаляет от текущей строки до строки номер 1 (включая её)
daw - Удаляет слово даже когда курсор находится в середине этого слова.
c - Идентична d, исключая то, что она переключает vim в режим вставки.
cis - Редактировать все предложение. "is" (Inner Sentence, предложение, не включающее пробел после него).
cas - Редактировать все предложение. "as" (A Sentence, предложение, включающее пробел после него).
С - Удалить от курсора и до конца строки с переходом в режим ввода.
D - Удалить от текущего символа до конца строки.
s - синоним cl (изменяет один символ)
S - синоним cc (изменяет всю строку)
J - Объединить строку с последующей.
o, O - Вставка новой строки до и после текущей, с переходом в режим вставки.
P, MidMouse - Вставка текста из регистра перед курсором.
gp - Тоже что и p, но курсор помещается в конец вставленного текста.
gP - Тоже что и P, но курсор в конец вставленного текста.
p - Вставка текста из регистра после курсора.
xp - Поменять местами два символа.
[reg]y[com] - Копирование в регистр [reg("a)] строк через которые перенесет команда [com].
[reg]yy, Y - Копирование в регистр [reg("a)] текущую строку.
~ - Измениние регистра букв.
g~[com] - Изменение регистра букв, через которые перенесет команда com.
gu[com] - Превращение букв в строчные на участке текста переноса команды [com].
guu - Превращение в строчные буквы в текущей строке.
gU - Превращение букв в прописные.
gUU - Превращение в прописные буквы в текущей строке.
= - Расстановка отступов для языка программирования С.
<[com] - Сдвиг влево на значение (shiftwidth) строк, через которые перенесла бы команда[com].
<< - Сдвиг влево текущей строки.
>[com] - Сдвиг вправо на значение (shiftwidth) строк, через которые перенесла бы команда[com].
>> - Сдвиг вправо текущей строки.
. - Повторение предыдущего изменения.

Коррекция во время ввода текста
CTRL-h - Удаляет последний символ.
CTRL-w - Удаляет последнее слово.

Поиск и замена
/{str}[/[off]] - Переход вперёд на смещение <off> искомой строки <str>.
?{str}[?[off]] - Переход назад на смещение <off> искомой строки <str>.
/ - Повторить последний поиск в прямом направлении.
? - Повторить последний поиск в обратном направлении.
n - Повторить последний поиск.
N - Повторить последний поиск в обратном направлении.
* - Поиск в прямом направлении слова под курсором.
# - Поиск в обратном направлении слова под курсором.
gd - Перейти к локальному определению переменной под курсором.
gD - Перейти к глобальному определению переменной под курсором.
/\<три\> - Этот поиск не будет включать слова "триста" или "сотри". "\>" является специальной пометкой, соответствующей только концу слова. Аналогично, "\<" соответствует только началу слова.
:nohlsearch - Эта команда не изменяет значения опции, а просто временно отключает подсветку. Как только вы снова будете что-нибудь искать, подсветка вновь появится на экране. Это же самое касается и команд "n" и "N".
:[address]s/[search]/[repl]/[gci] - Поиск [search] и замена на [repl] (в режиме VISUAL - без адреса и в выделенной области):
[gci]:
< > - первого вхождения;
<g> - всё;
<c> - с запросом подтверждения;
<i> - игнорируя регистр.
[address]:
<%> - весь текст;
<1> - первая строка;
<.> - текущая строка;
<$> - последняя строка;
<1,3> - между строками 1-3;
<.,$> - от текущей до последней.

:s/text/new_text/ Заменяет первый встреченный образец text на текущей строке на new_text
:s/text/new_text/g Заменяет все образцы text на текущей строке на new_text
:g/text/s//new_text/g Заменяет все встреченный в буфере образцы text на new_text.
:%s/^\(.*\)$/"\1"/g - Преобразование
aaaaaaaaa    "aaaaaaaaa"
bbbbbbbbbb в "bbbbbbbbbb"
:1,$s/the/THE/g - Начиная с первой строки до последней (строки $), заместить все встреченные the на THE (g - означает глобальную замену)
:'a,.s/.*/ha ha/ - От строки помеченной как a до текущей (строки .), заменить любой текст на строку "ha ha".

Фильтрование текста
:%!sort - Сортировка всего текста.
:'<,'>!sort - Выделенного фрагмента.
!/the < CR > sort < CR > - Сортирует текст от текущей строки до следующей строки содержащей the (< CR > означает - нажмите Enter).
!1Ggrep the < CR > - Уничтожает все строки от текущей до 1й (включая её), если они не содержат the.
!Gawk '{print $1}' < CR > - Оставляет от всех строк (начиная с текущей и до конца файла) только первое слово.

Метки
% - Переход на противоположную скобку: ()[]...
[( - Переход к предыдущей незакрытой ( .
[{ - Переход к предыдущей незакрытой { .
[) - Переход к следующей неоткрытой ( .
[} - Переход к следующей неоткрытой } .
[# - Переход на предыдущий незакрытый #if или #else.
]# - Переход на следующий неоткрытый #else или #endif.
[*, [/ - Переход на предыдущее начало С-комментария /*.
]*, ]/ - Переход на следующий конец С-комментария */.

Регистры
"" - Безымянный регистр (используется по умолчанию).
"0 - Содержит текст прочитанный последней командой 'y'.
"1-"9 - Сдвиговые регистры удалённого и изменённого текста.
"- - Заполняется при удаление текста, занимающего менее одной строки.
"a-"z - Именованные регистры, заполняются только при указании их специально.
". - Последний вставленный текст.
"% - Содержит имя редактируемого файла.
"# - Содержит имя альтернативного файла.
": - Последняя команда в режиме ':'.
"= - Ввод выражений.
"* - Хранит в себе выбранный мышью текст (X-Window).
"/ - Регистр последнего поиска.
:reg [reg] - Печать содержимого регистров.
q[reg] - Начать запись команд в регистр [reg]. Завершение записи - q.
@[reg] - Выполнения команд в регистре [reg].

Команды интеграции
:! com - Запускает в оболочке команду <com>.
:!! - Повторяет предыдущую команду :! .
:r! com - Вставить в позицию курсора вывод команды <com>.
:r file - Вставляет в текст содержимое файла <file>.

Автоподстановка имен файлов
Пишем часть пути, потом Ctrl-X + Ctrl-F. Дальше - перебор вариантов с помощью обычных Ctrl-N, Ctrl-P.

Проверка орфографии
z= - Показать меню с возможными правильными вариантами слова.
zG - Добавить слово к словарю.
]z, [z - Перейти к следующей/предыдущей ошибке.
zW - Пометить слово как ошибочное.

Группировка текста
zo - Открыть текущую группировку.
zO - Открыть текущую группировку рекурсивно.
zc - Скрыть текущую группировку.
zС - Скрыть текущую группировку рекурсивно.
za - Скрыть/открыть текущую группировку.
zA - Скрыть/открыть текущую группировку рекурсивно.
zr - Открыть все группировки.
zR - Открыть все группировки рекурсивно.
zm - Скрыть все группировки.
zM - Скрыть все группировки рекурсивно.

Компиляция/отладка программ
:make - Вызов команды make (сборка проекта).
:cc[numb] - Отображение ошибки с указанным номером.
:cn - Перейти к следующей ошибке.
:cp - Перейти к предыдущей ошибке.
:cr - Перейти к первой ошибке.
:cla - Перейти к последней ошибке.
:cq - Выйти из программы с возвратом кода ошибки.
:cf [file] - Загрузить указанный файл в качестве файла ошибок.
:cl - Отобразить все ошибки.
:copen - Открыть окно со списком ошибок.
:cclose - Закрыть окно со списком ошибок.
^p, ^n - Дополнение слова используя в качестве словаря весь текст или дополнительные источники (include файлы).
[i - Показать определение (included) переменной, функций ... .
[d - Показать определение (defined) МАКРО.
ga - Информация о символе под курсором.

Манипуляции с окнами
^W - Операции с окнами:
i, d, f - новое окно с i-переменой, d-определением, f-файлом под курсором;
n - открыть новое окно;
s - сдублировать еще одно окно от текущего (горизонтально);
v - сдублировать еще одно окно от текущего (вертикально);
с, q - закрыть текущее окно;
o - закрыть все остальные окна;
r - сдвиг вверх;
R - сдвиг вниз;
x - сдвиг на другое окно с активизацией другого окна;
K - переместить текущее окно вверх;
J - переместить текущее окно вниз;
H - переместить текущее окно влево;
L - переместить текущее окно вправо;
k, Up - активизировать окно сверху;
j, Down - активизировать окно снизу;
h, Left - активизировать окно слева;
l, Right - активизировать окно справа;
w - активизировать следующее окно;
p - активизировать предыдущее окно;
+ - увеличить высоту окна на одну строку;
- - уменьшить высоту окна на одну строку;
> - увеличить ширину окна на один символ;
< - уменьшить ширину окна на один символ;
= - сравнять размеры окон;
_ - установить максимальную высоту окна;
1_ - установить минимальную высоту окна;
| - установить максимальную ширину окна;
1| - установить минимальную ширину окна.
:sp - Разделить окно по горизонтали.
:vs - Разделить окно по вертикали.
:new - Создать новое окно (горизонтальное разделение).
:vne - Создать новое окно (вертикальное разделение).

Настройки
:set - Работа с опциями (без имени опции показывает установленные опции).
all - показать все опции;
termcap - показать только терминальные опции;
<opt> - активирует опцию если она логическая;
<opt>! - инвертирует опцию;
<opt>& - устанавливает стандартное значение опции;
no<opt> - деактивирует опцию;
<opt>=<value> - установка значения опции в <value>;
<opt>? - показать значение опции.
:options - Установка различных опций.

3 комментария:

энерджи комментирует...

:r! com - Вставить в позицию курсора вывод команды com - отличная фишка вставки времени в файл, благодарю.

Анонимный комментирует...

> :r! com - Вставить в позицию курсора вывод команды com - отличная фишка вставки времени в файл, благодарю.

Побурчу для вида :)
:r! date --date=now +"%A %d"
Что выведет? Правильно, фигню. А хотелось бы что-нибудь типа: Friday 13

Dmitry Konishchev комментирует...

> Побурчу для вида :)
> :r! date --date=now +"%A %d"
> Что выведет? Правильно, фигню.
> А хотелось бы что-нибудь типа: Friday 13

А вы проэкранируйте знак процента:
:r! date --date=now +"\%A \%d"
и все будет ОК.