Рубрики
vim \ vi \ text editor

vi, vim, text editor

Редактор VI имеет три режима:

1.  Командный  -  в  этом  режиме можно перемещаться по файлу и выполнять редактирующие команды над текстом. Команды вызываются ОБЫЧНЫМИ ЛАТИНСКИМИ БУКВАМИ.
2. Ввода текста - в этом режиме обычные латинские  буквы  будут вставляться в текст.
3.  Режим  строчного  редактора  ED используется для управления файлами (типа сохранить файл, зачитать файл и т.д.)

VI в КОМАНДНОМ РЕЖИМЕ:

ESC  :  q  ! Enter - ЧТОБЫ ВЫЙТИ ИЗ ФАЙЛА БЕЗ СОХРАНЕНИЯ
ESC  :  w ! Enter -  сохранить изменения
ESC  :  q   Enter - выйти из файла
ESC  :  wq  Enterв - ыйти из файла с сохранением
i - перевод в режим ввода вводите требуемый текст
ESC -  прекратить ввод, перейти в командный режим

VI в РЕЖИМ ВВОДА:

"i" - вставлять здесь
"A" - вставлять с конца строки
"cw" - заменять текущее слово
ESC - для ВОЗВРАТА В КОМАНДНЫЙ РЕЖИМ
CTRL-[ - для возврата в командный режим
для перехода В РЕЖИМ УПРАВЛЕНИЯ ФАЙЛАМИ нужно нажать ":"  (перейти в режим редактора ED)
h,j,k,l - влево, вниз, вверх, вправо
Ctrl-F -  На страницу вниз
trl-B -  На страницу вверх

Минимальный набор команд:

i - перейти в режим вставки
a - перейти в режим вставки со следующего символа
h,j,k,l    влево, вниз, вверх, вправо
dd - удалить строку
5dd - удалить 5 строк
:x - выход с сохранением
:q! - выход без сохранения изменений
 - выход из режима редактирования
 + v + стрелки - выделение
y - копирование (yank)

Набор команд:

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 (в режиме редактирования)
CTR+u, CTR+d - Page Up / Page Down
CTR+y, CTR+e Перемотка вверх/вниз без движения курсора

Поиск:

/word	                Искать слово “word” сверху вниз
?word	                Искать слово “word” снизу вверх
/jo[ha]n>	        Искать “john” или “joan”
/\< the	                Искать слова, начинающееся на “the”
/the\>	                Искать слова, заканчивающиеся на “the”
/\< the\>	        Искать “the” (точное соответствие)
/\< …. \>	        Искать слова из четырех символов
/fred\|joe	        Искать “fred” или “joe”
/\<\d\d\d\d\>	        Искать 4 цифры подряд
/^\n\{3}	        Искать 3 пустые строки
:bufdo /searchstr/	Искать во всех открытых файлах

Удаление:

d^	               Удалить все символы от текущей позиции до начала строки
d$	               Удалить все символы от текущей позиции до конца строки
d/word	               Удалить всё от текущей позиции до слова "word"
dfx	               Удалить всё от текущей позиции до символа "x"

Замена:

:%s/old/new/g	       Заменить все вхождения “old” на “new”
:%s/old/new/gw	       Заменить все вхождения “old” на “new” с запросом подтверждения
:2,35s/old/new/g       Заменить все вхождения “old” на “new” между 2 и 35 строками
:5,$s/old/new/g	       Заменить все вхождения “old” на “new” начиная с 5 строки и до конца файла
:%s/^/hello/g	       Добавить “hello” в начало каждой строки
:%s/$/Harry/g	       Добавить “Harry” в конец каждой строки
:%s/onward/forward/gi  Заменить “onward” на “forward” с учетом регистра
:%s/ *$//g	       Убрать все пробелы
:g/string/d	       Удалить все строки, содержащие “string”
:v/string/d	       Удалить все строки, не содержащие “string”
:s/Bill/Steve/	       Заменить первое вхождение “Bill” на “Steve” в текущей строке
:s/Bill/Steve/g	       Заменить все вхождения “Bill” на “Steve” в текущей строке
:%s/\r//g	       Убрать символ возврата каретки (Такие тексты обычно приходят от windows-пользователей)
:%s#>[^<]\+>##g	       Очистить текст от HTML-тегов
:%s/^\(.*\)\n\1$/\1/   Удалить строки, повторяющиеся дважды
Ctrl+a                 Увеличить число под курсором на единицу
Ctrl+x                 Уменьшить число под курсором на единицу
ggVGg?                 Преобразовать текст в Rot13

Abs[ 'выражение' ] -> | 'выражение' |
:%s/Abs\[\([^\]]*\)\]/|\1|/g

'Заглавная латинская буква''цифра' -> 'Заглавная латинская буква'_'цифра'
:%s/\(\u\)\(\d\)/\1_\2/g

Здесь стоит отметить, что для буквального совпадения квадратные скобки предваряются слешами, поскольку являются спецсимволами. 
Вообще любой спецсимвол, если должен участвовать в поиске, обозначая свое непосредственное значение, предваряется слешем: \^; \* и т.д. 
Сам слеш предваряется также слешем. 
Выглядит это так: для поиска последовательности '\cos' надо ввести '\\cos'.

Регистр:

Vu                     Перевести строку в нижний регистр
VU	               Перевести строку в верхний регистр
g~~	               Инвертировать регистр
vEU	               Перевести слово под курсором в верхний регистр
vE~	               Инвертировать регистр слова
ggguG	               Перевести весь текст в нижний регистр
:set ignorecase	       Регистронезависимый поиск
:set smartcase	       Игнорировать регистр при поиске, если в искомом выражении нет символов верхнего регистра
:%s/\<./\u&/g	       Перевести первую букву каждого слова в верхний регистр
:%s/\<./\l&/g	       Перевести первую букву каждого слова в нижний регистр
:%s/.*/\u&	       Перевести первую букву первого слова в каждой строке в верхний регистр
:%s/.*/\l&	       Перевести первую букву первого слова в каждой строке в нижний регистр

Чтение/запись файлов

:1,10 w outfile	       Записать в outfile с первой по десятую строки
:1,10 w >> outfile     Добавить в outfile с первой по десятую строки
:r infile              Вставить содержимое файла infile
:23r infile            Вставить содержимое файла infile после 23 строки

Навигация по ФС:

:e .                    Открыть встроенный файл-менеджер
:Sex                    Разбить окно и открыть встроенный файл менеджер
:browse e               Графический файл-менеджер
:ls                     Список буферов
:cd ..                  Перейти в родительскую директорию
:args                   Список открытых файлов
:args *.php             Открыть все файлы с расширением *.php
:grep expression *.php	Показать список файлов с расширением php, содержащих в имени expression
gf	                Открыть файл с именем, равным слову, находящемуся под курсором

Взаимодействие с ОС:

:!pwd	                Выполнить команду pwd и вернуться
!!pwd	                Выполнить команду pwd и вставить результат в редактор
:sh	                Открыть шелл
$exit	                Вернуться в редактор из шелла

Выравнивание:

:%!fmt	               Выровнять все строки
!}fmt	               Выровнять все строки в текущей позиции
5!!fmt	               Выровнять следующие 5 строк

Вкладки:

:tabnew	                Создать новую вкладку
gt	                Перейти на следующую вкладку
:tabfirst	        Перейти на первую вкладку
:tablast	        Перейти на последнюю вкладку
:tabm n(position)	Изменить порядок вкладок
:tabdo %s/foo/bar/g	Выполнить команду во всех вкладках
:tab ball	        Поместить все открытые файлы во вкладки

Разделение окна:

:e filename	        Редактировать filename в текущем окне
:split filename	        Разделить окно и открыть filename
ctrl-w + стрелка ВВЕРХ  Переместить курсор в верхнее окно
ctrl-w ctrl-w	        Переместить курсор в следующее окно
ctrl-w ctrl-p	        Переместить курсор в предыдущее окно(вернуться назад)
ctrl-w ctrl-x	        Поменять окна местами
ctrl-w_	                Максимизировать текущее окно
ctrl-w=	                Подогнать окна по размеру
10 ctrl-w+              Увеличить текущее окно на 10 строк
:vsplit file            Вертикально разделить окно
:sview file             Разделить окно и открыть file только для чтения
:hide                   Закрыть текущее окно
:only                   Закрыть все окна, кроме текущего
:b 2                    Открыть #2 в текущем окне

Автодополнение:

Ctrl+n Ctrl+p (в режиме вставки)     Дополнить слово
Ctrl+x Ctrl+l                        Дополнить строку
:set dictionary=dict                 Установить словарь
Ctrl+x Ctrl+k                        Дополнение из словаря

Метки:

mk	               Пометить текущую позиция как k
‘k	               Перейти к метке k
d’k	               Удалить все до метки k
d’a,’k	               Удалить все от метки a до метки k

Сокращения

:ab mail mail@provider.org	    Определить mail как сокращение от mail@provider.org


Отступы:

:set autoindent	          Включить автоматическую расстановку отступов
:set smartindent          Включить “умную” расстановку отступов
:set shiftwidth=4         Установить отступ равный 4 пробелам
ctrl-t, ctrl-d            Убрать/добавить отступ в режиме вставки
<<                        Добавить отступ
>>                        Убрать отступ


Подсветка синтаксиса:

:syntax on	Включить подсветку
:syntax off	Выключить подсветку
:set syntax=perl	Установить режим подсветки