Vi -- Vim
"Using a free version of vi is not a sin but a penance."
Richard Matthew Stallman
https://ru.wikipedia.org/wiki/Vim
https://ru.wikibooks.org/wiki/Vim
$ vimtutor
Vim Cheatsheet
Режимы работы
В большинстве статей по Vim принято писать, что: В Vim имеется три режима работы,
Командный режим: все нажатия клавиш интерпретируются как команды
Режим вставки: используется для ввода текста
Визуальный режим: используется для выделения текста или блока текста, этот режим можно рассматривать как под режим командного режима
Отбросив религиозные заблуждения и предрассудки правильнее выделить четыре режима работы
(ведь это Vi Improved):
Нормальный режим, командный (normal mode)
По умолчанию Vim начинает свою работу в нормальном режиме, который также называют команд-ным. Нажатие клавиш в этом режиме воспринимается как команды (копирования, удаления, перемещения текста и т. д.). Среди команд нормального режима есть «односимвольные» команды. Так, например, нажатие $ приведёт к перемещению курсора в конец строки; нажатие клавиши Ø (ноль) — в начало; D (в верхнем регистре) — к удалению (delete) части текущей строки от текущего положения курсора до конца; С (в верхнем регистре) — к замене (change) части текущей строки от текущего положения курсора и до конца и т. д. Другие команды для своей работы будут ждать дальнейшего продолжения ввода.
Например f ответственно за быстрое перемещение в строке к следующему набранному после себя символу. Поэтому после нажатия f Vim будет ждать набора этого символа, чтобы использовать его в качестве искомого. После нажатия y (yank), d, c и других подобных «управляющих» клавиш Vim будет ожидать дальнейшего ввода команд, задающих объект, над которым будет произведено действие (копирование, удаление или замена соответственно).
Так, d a w удалит текущее слово под курсором (delete ambient word), а d$ — все символы начиная с текущего положения курсора и заканчивая концом строки. Подобные очень простые команды используются не только в «ручном режиме» (когда при необходимости набираются всякий раз с клавиатуры), но и при задании сложных последовательностей действий.
Нормальный режим (Normal mode) основной. Режим, из которого осуществляется переход во все остальные. Из любого режима в Normal mode можно перейти, дважды нажав клавишу Esc (в большинстве случаев достаточно одного нажатия).
Режим вставки, редактирования (insert mode)
Режим, в котором производится ввод текста.
Для перехода из командного/нормального режима в режим вставки можно нажать i (для начала вставки текста на месте курсора) или a (для начала вставки текста после курсора). Также существует ряд других клавиш и их сочетаний для перехода в режим непосредственного редактирования текста (например, через одну из команд замены текстового объекта).
В этом режиме Vim работает так же, как и большинство «обычных» текстовых редакторов.
По умолчанию набранные символы не воспринимаются как команды, а вставляются в существующий текст. Однако даже в этом режиме можно задать особые действия редактора, выполняемые при нажатии определённых клавиш или их сочетаний. Как пример, можно задать, чтобы при наборе открывающейся скобки ( сразу же добавлялась парная ей закрывающая скобка и курсор устанавливался между ними. Для вставки, удаления, изменения и автодополнения текста также могут использоваться клавиатурные сочетания (Ctrl+R и др.) При наборе слова-аббревиатуры это слово автоматически заменяется на заранее заданный текст.
Режим командной строки (command-line mode)
Этот режим вызывается нажатием (:) из нормального режима. За двоеточием следует какая либо команда (например, поиска или замены), которая после ввода передаётся на исполнение нажатием Enter. После выполнения команды редактор возвращается в нормальный режим. К этому режиму также относятся команды поиска дальше по тексту /, поиск назад по тексту (?) и команда-фильтр ! для передачи данных внешнему фильтру и тд. многие другие.
Визуальный режим (visual mode)
Визуальный режим отсутствовал в Vi и впервые появился в Vim. Он чем-то схож с командным.
С помощью специальных управляющих команд, в сочетании со стрелками и командами навигации,
можно посимвольно, построчно или в виде блока выделять фрагменты текста и затем применить к ним команды нормального режима (например, удаление выделенного текста или его замена).
Редактирование в этом режиме проще, чем в нормальном, потому что чётко видно, к какому блоку текста будет применяться вызванная команда редактирования.
https://ru.wikibooks.org/wiki/Vim
http://vimdoc.sourceforge.net/htmldoc/help.html
https://www.opennet.ru/docs/RUS/vim_cookbook/
http://scabere.livejournal.com/62886.html
http://funix.ru/programs_utilities/klavishi-i-kombinacii-klavish-vim.html
http://dev-mark.blogspot.ru/2010/12/vim_23.html
$ vim .vimrc
syntax on
set number
set tabstop=2
set hlsearch
set incsearch
set encoding=utf-8 # для Windows https://habrahabr.ru
== Некоторые часто используемые ==
$ vim --cmd :e. —Открыть из "cli" vim с открытым встроенным файл-менеджером (см: $ vim -help)
h j k l —перемещение в разные стороны, плюс стрелки
:e . —Открыть встроенный файл-менеджер
:Sex —Разбить окно и открыть встроенный файл менеджер (Ctr+W, —затем с закрыть окно) (ZZ ...)
:marks —просмотр маркеров, `[k] —перейти к локальному маркеру k,
(`0 —вернуться на позицию, на которой закончили работу при закрытии vim)
i —(i nsert) переход в режим вставки для вставки текста перед курсором
I —переход в режим вставки с перемещением курсора в начало строки
a —(a ppend) переход в режим вставки для вставки текста после курсора
A —переход в режим вставки с перемещением курсора в конец строки
o —(o pen) режим вставки в новую строку добавляемую после текущей
O —режим вставки в новую строку добавляемую перед текущей
R —писать поверх имеющегося текста <------------- заменяя
p —вставить из буфера обмена
Shift insert —вставить из внешнего буфера обмена
(может понадобиться :set paste)
Для вставки текста, который только что был удалён, наберите p . Эта
команда вставит удалённый текст(из кармана) ПОСЛЕ курсора (если была удалена строка,
то она будет помещена в строке под курсором).
v —переход в визуальный режим (выделение символов) + стрелки
V—переход в визуальный режим (выделение строк)
Ctrl+v —переход в блочный визуальный режим (выделение прямоугольных областей текста)
<n>d —удалить n+1 строку
<n>y —скопировать n+1 строку
ESC —перейти в обычный (Normal mode) режим просмотра
DEL —удалить следующий символ
:<n> —перейти на строку #n
% —перейти к парной скобке
:e **/filename.c —редактировать файл (с поиском по имени)
:w [fname] — сохранить, записать изменения, без [fname] текущий
:wa —сохранить изменения во всех файлах
:wq —сохранить изменения и выйти из редактора
ZZ —сохранить изменения и выйти из редактора :x или :wq
ZQ — выйти без сохранения (если выход был аварийным при следующем открытии файла предложит выбор из swap, удалить swap:$ rm .filename.swp или удалить текущий из vim::!rm %)
:q —выйти из редактора (если не было изменений выйдет, если были подскажет)
! — символ "усиления"
:q! —выйти из редактора, не сохраняя изменения
:wa —write all changed files (save all changes), and keep working
:xa —exit all (save all changes and close Vim)
:qa —quit all (close Vim, but not if there are unsaved changes)
:qa! —quit all (close Vim without saving—discard any changes)
:color <name> —выбор цветовой схемы. цветвые схемы:
/usr/local/share/vim/vim72/colors/*.vim
:pwd —текущий каталог
:cd [path] —перейти в другой каталог
:!команда —выполнить команду: man, git,... и т.д стрелками(буквами) веерх и вниз можно авто-дополнять, а команды и искать по истории
:!sort %.—фильтрация текста через внешнюю команду (:h filter)
CTR+p или CTR+n —автоматическое дополнение текста (в режиме редактирования)
CTR+r,=,<expr> —вставить выражение, например 5*2 - 3 (в режиме редактирования)
CTR+u, CTR+d Page Up / Page Down
CTR+y, CTR+e —Перемотка вверх/вниз без движения курсора
x — Удаление после курсора
X — Удаление перед курсором
dd — вырезать (удалить) строку
(n)dd — Удалить (вырезать) n строки, начиная со строки, в которой находится курсор
d$ — Удалить все символы от текущей позиции до конца строки
cc — удалить и начать редактирование
y — скопировать выделенное (через v)
yy — копировать строку
(n)yy — скопировать несколько строк
p — вставить после курсора, Р — перед курсором
Shift insert — вставить из внешнего буфера обмена
u, :u[ndo] — отмена предыдущего действия (undo)
CTR-R, :red[o] — отмена отмены предыдущего действия (redo)
копирование — yank ( y)
вырезание — delete ( d)
вставка — put ( p)
==Перемещения по тексту==
h j k l —перемещение в разные стороны
|, 0, home —в начало строки
^ —на первый непустой символ в строке
$, end —в конец строки
gg —переход к началу файла
G —на последнюю строку файла
e —до конца слова
<number>G или <number>gg —перейти на конкретную строку <number>
- —на строку вверх и на первый не пустой символ
+, Enter —на строку вниз и на первый не пустой символ
H —на первую строку экрана
M —на среднюю строку экрана
L —на последнюю строку экрана
w —на слово вперед
b —на слово назад
( —на предложение назад (до точки)
) —на предложение вперед (до точки)
{ —на абзац назад (до пустой строки)
} —на абзац вперед (до пустой строки)
:ju —список переходов
==Удаление==
x —Удаление после курсором
X —Удаление перед курсором
d —оператор удаления: d объект
объект - над чем должна быть выполнена команда (перечислено ниже)
Краткий список объектов:
w —от курсора до конца слова, включая последующий пробел
e —от курсора до конца слова, НЕ включая последующий пробел
$ —от курсора до конца строки
^ —от курсора до начала строки
Например:
dw —Удаление слова после курсора
d^ —Удалить все символы от текущей позиции до начала строки
d$ —Удалить все символы от текущей позиции до конца строки
d/word —Удалить всё от текущей позиции до слова "word"
dfx —Удалить всё от текущей позиции до символа "x"
==Регистр==
Vu —Перевести строку в нижний регистр
VU —Перевести строку в верхний регистр
g~~ —Инвертировать регистр
vEU —Перевести слово под курсором в верхний регистр
vE~ —Инвертировать регистр слова
ggguG —Перевести весь текст в нижний регистр
:set ignorecase —Регистронезависимый поиск
:set smartcase —Игнорировать регистр при поиске, если в искомом выражении нет символов верхнего регистра
:%s/\<./\u&/g —Перевести первую букву каждого слова в верхний регистр
:%s/\<./\l&/g —Перевести первую букву каждого слова в нижний регистр
:%s/.*/\u& —Перевести первую букву первого слова в каждой строке в верхний регистр
:%s/.*/\l& —Перевести первую букву первого слова в каждой строке в нижний регистр
==Взаимодействие с ОС==
:!pwd —Выполнить команду pwd и вернуться
!!pwd —Выполнить команду pwd и вставить результат в редактор
:sh —Открыть шелл
$exit —Вернуться в редактор из шелла
==Выравнивание==
:%!fmt —Выровнять все строки
!}fmt —Выровнять все строки в текущей позиции
5!!fmt —Выровнять следующие 5 строк
==Форматирование==
Выравнивание по левому краю:
:[№ строки,диапазон,через запятую]left [кол-во полей отступа]
:1left 5
:2,8left - просто без отступа
http://www.r-notes.ru/redaktirovanie-formatirovannogo-teksta
== Сворачивание ==
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 —задаем маркеры начала и конца блока
==Сокращения==
:ab mail mail@provider.org —Определить mail как сокращение от mail@provider.org
==Отступы==
:set autoindent —Включить автоматическую расстановку отступов
:set smartindent —Включить “умную” расстановку отступов
:set shiftwidth=4 —Установить отступ равный 4 пробелам
ctrl-t, ctrl-d —Убрать/добавить отступ в режиме вставки
<< —Добавить отступ
>> —Убрать отступ
== Выделение ==
v + hjkl —выделение текста
SHIFT + v —выделить строку
CTR + v —выделение прямоугольника
p —вставить
y —копировать
d —удалить
gu —к нижнему регистру
gU —к верхнему регистру
== Поиск и замена в файле ==
/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/ —Искать во всех открытых файлах
/выражение —поиск выражения в файле
\c выражение —поиск без учета регистра
n —следующее совпадение
N —предыдущее совпадение
:%s/foo/bar/gi —замена строк, см: https://site/kfgnb0101 http://eax.me/regular-expr/
== Работа с вкладками ==
:tabnew —создать таб
:tabnew [fname] —создать таб
:tabs —вывести список табов
gt —следующий таб
gT —предыдущий таб
:tabn —следующий таб
:tabp —предыдущий таб
<n>gt —перейти на таб #n
:tabfirst —Перейти на первую вкладку
:tablast —Перейти на последнюю вкладку
:tabm n(position) —Изменить порядок вкладок
:tabdo %s/foo/bar/g —Выполнить команду во всех вкладках
:tab ball —Поместить все открытые файлы во вкладки
:tabm +1 —переместить таб вперед на одну позицию
:tabm -1 —переместить таб назад на одну позицию
:tabm 2 —переместить таб на заданную позицию (нумерация начинается с нуля)
== Проверка орфографии ==
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
:set spell spelllang=ru,en —включить проверку орфографии
:set nospell —выключить проверку орфографии
]s —следующее слово с ошибкой
[s —предыдущее слово с ошибкой
z= —замена слова на альтернативу из списка
zg good word
zw wrong word
zG ignore word
== Other ==
:set [no]wildmenu —При авто-дополнении в командной строке над ней выводятся возможные варианты
:set list —Отображать табуляцию и переводы строк
q: —История команд
. —Повторение последней команды
:set expandtab —заменить Tab на пробелы
:set tabstop=2 —величина Tab (по умолчанию 4) =кол-во пробелов
--------------------------------------------------------------
==Клавиши перемотки==
Ctrl+e— прокрутка строк вниз
Ctrl+y— прокрутка строк вверх
Ctrl+f или Ctrl+d — прокрутка страниц вниз
Ctrl+b или Ctrl+u — прокрутка страниц вверх
zz — переместить строку с курсором в центр окна
zt — переместить строку с курсором вверх
zb -переместить строку с курсором вниз
== Подсветка синтаксиса ==
:syntax on (set nu) —включить подсветку
:syntax off (set nu!) —выключить подсветку (по умолчанию)
:set hlsearch —подсветка при поиске
:/<text>
:set incsearch —при поиске подсветка первого вхождения, перемещение —n
:/<text>
при поиске находясь на нужном слове нажать астериск (*)
:nohl[search] (сокращенно :nohl) —снять подсветку
==Замена==
:%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
==Чтение/запись файлов==
:1,10 w outfile —Записать в outfile с первой по десятую строки
:1,10 w >> outfile —Добавить в outfile с первой по десятую строки
:r infile —Вставить содержимое файла infile
:23r infile —Вставить содержимое файла infile после 23 строки
==Автодополнение==
Ctrl+n Ctrl+p —(в режиме вставки) Дополнить слово
Ctrl+x Ctrl+l —Дополнить строку
:set dictionary=dict —Установить словарь
Ctrl+x Ctrl+k —Дополнение из словаря
==Навигация по ФС==
:e . —Открыть встроенный файл-менеджер
:Sex —Разбить окно и открыть встроенный файл менеджер
:browse e —Графический файл-менеджер
:ls —Список буферов
:cd .. —Перейти в родительскую директорию
:args —Список открытых файлов
:args *.php —Открыть все файлы с расширением *.php
:grep expression *.php —Показать список файлов с расширением php, содержащих в имени expression
gf —Открыть файл с именем, равным слову, находящемуся под курсором
== Перенос строк ==
:set wrap —разрешить word wrap (по умолчанию)
:set nowrap —запретить word wrap
== Печать ==
:ha[rdcopy] —распечатать документ
:set printoptions=duplex:off —отключить двустороннюю печать
== Маркеры ==
mB —установить глобальный маркер B (закладка для преключения между файлами)
m[k] —Пометить текущую позиция как [k] (локальный маркер)
‘k —перейти к локальному маркеру k
d’k —Удалить всё до метки k
d’a,’k —Удалить всё от метки a до метки k
`0 —вернуться на позицию, на которой закончили работу при закрытии vim
:marks —просмотр маркеров
set viminfo='1000,f1 маркеры пишутся в ~/.viminfo, восстанавливаясь
при следующем запуске vim. маркер " хранит последнюю позицию курсора в файле
== Сессии ==
mksession file.session —сохранить текущую сессию
source file.session —восстановить ранее сохраненную сессию
== Макросы ==
qa —записать макрос с именем a
q —в режиме записи макроса: закончить запись
@a —выполнить макрос с именем a
@@ —повторить последний макрос
== Регистры ==
"ayy —скопировать строку в регистр a
"bdd —вырезать строку и поместить в регистр b
"С2d —вырезать три строки и дописать в конец регистра C
:reg [name1][name2][...] —просмотреть содержимое регистров
== indent - Отступы ==
[#]> —сдвинуть выделенное вправо
[#]< —сдвинуть выделенное влево
[#]>> —сдвинуть строку вправо
[#]<< —сдвинуть строку влево
set tabstop=# —для табуляции используется # пробелов
set shiftwidth=# —в командах отступа используется # пробелов
set [no]expandtab —заменять ли табуляцию на соответствующее число пробелов
== Поиск по всему проекту ==
:vimgrep /EXPR/ **/*.c —поиск по регулярному выражению
:copen —показать все найденные места
:close —скрыть все найденные места
:cn —переход к следующему результату
:cp —переход к предыдущему результату
== Нумерация строк ==
:set number —включить нумерацию строк (:set nu)
:set nonumber —отключить нумерацию строк (:set nu!)
== Работа с окнами ==
:split —горизонтальное разбиение
:vsplit —вертикальное разбиение
Ctr+W, —затем с закрыть окно
+- —изменение высоты текущего окна
<> —изменение ширины текущего окна
= —установить равный размер окон
h j k l —или стрелочки перемещение между окнами
: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 в текущем окне
== Работа с кодировкой ==
e ++enc=<имя кодировки> —Редактирование файла в ??? кодировке
e ++enc=cp1251 -- исправление после Windows например
w ++enc=<имя кодировки> —Сохранить файл в новой кодировке
set fileencodings=utf-8,koi8-r —Список автоматически определяемых кодировок в порядке убывания приоритета
Хорошо создать пользовательское меню:
set wildmenu
set wcm=<Tab>
menu Encoding.koi8-r :e ++enc=koi8-r<CR>
menu Encoding.cp1251 :e ++enc=cp1251<CR>
menu Encoding.cp866 :e ++enc=cp866<CR>
menu Encoding.ucs-2le :e ++enc=ucs-2le<CR>
menu Encoding.utf-8 :e ++enc=utf-8<CR>
map <F12> :emenu Encoding.<Tab>
*** По F12 выбор по Tab
Для подсветки синтаксиса редактируемого текста возможно выделять в нем ключевые слова или определенные языковые конструкции ( *syntax-highlighting* ).
В vim используется единый способ подсветки элементов самого редактора и частей редактируемого текста ( *:highlight* ). Сначала с помощью команды :highlight задаются разные типы подсветки. Например, команда :hi NonText term=bold cterm=bold ctermfg=4 означает, что на терми- налах области текста, соответствующие типу "NonText", будут высвечиваться ярким, причем на цветных – синим (цвет 4 по стандарту ANSI). Редактор сам использует некоторые типы подсветки (в частности, когда строк в редактируемом файле меньше, чем на экране, на месте недостающих выводятся NonText -ом символы "~" ). Набор типов подсветки называетсяцветовой схемой и может лежать в файле ~/.vim/colors/имя_схемы.vim ( *:colorscheme* ).
Страница 171 <<----- VIM
Настройки
=Основные настройки=
» Включаем несовместимость настроек с предшественником Vi
set nocompatible
» Включаем перенос строк (set nowrap отключает перенос строк)
set wrap
» Перенос строк по словам, а не по буквам
set linebreak
» Выключаем поддержку мыши при работе в терминале
(для включения нужно устaновить mouse=a)
set mouse=
» Включаем подсветку синтаксиса
syntax on
» Включаем отображение выполняемой в данный момент команды в правом нижнем углу экрана
set showcmd
» Показывать строку с позицией курсора
set ruler
» Показывать первую парную скобку после ввода второй
set showmatch
» Показывать строку вкладок всегда
set showtabline=2
» Показывать строку статуса всегда
set laststatus=2
» Показывать имя буфера в заголовке терминала
set title
» Формат заголовка
set titlestring=%t%(\ %m%)%(\ %r%)%(\ %h%)%(\ %w%)%(\ (%{expand(\»%:p:~:h\»)})%)\ -\ VIM
» Использовать диалоги вместо сообщений об ошибках
set confirm
» Включаем отображение дополнительной информации в статусной строке
set statusline=%<%f%h%m%r%=format=%{&fileformat}\ file=%{&fileencoding}\ enc=%{&encoding}\ %b\ 0x%B\ %l,%c%V\ %P
» Включаем виртуальный звонок (мигание вместо спикера)
set visualbell
» Не выгружать буфер, когда переключаемся на другой файл
set hidden
» Использовать больше цветов в терминале
set t_Co=256
» Задаем фон терминала, что влияет на подсветку
set background=dark
» Включает отображение номеров строк
set number
» Включаем ‘умную’ автоматическую расстановку отступов
set smartindent
» Копирует отступ от предыдущей строки » наследовать отступы предыдущей строки
set autoindent
» Размер табуляции
set tabstop=4 (умолчание)
» Размер сдвига при нажатии на клавиши «<» и «>»
set shiftwidth=4
» Включить подсветку невидимых символов
set list
» Подсветка текущей строки
set cursorline
» При вставке фрагмента сохраняет отступы
set pastetoggle=
» Включение автоматического перечитывания файла при изменении
set autoread
» установить keymap, чтобы по Ctrl+^ переключалась раскладка клавиатуры при вводе текста на русский и обратно внутри самого редактора
set keymap=russian-jcukenwin
» по умолчанию латинская раскладка
set iminsert=0
» разбивать окно горизонтально снизу
set splitbelow
» разбивать окно вертикально справа
set splitright
» Метод фолдинга — вручную (для обычных файлов)
set foldmethod=manual
» Метод фолдинга — по синтаксису
set foldmethod=syntax
» Опции авто-дополнения
set completeopt=longest,menuone
=Поиск=
» Включаем подсветку выражения, которое ищется в тексте
set hlsearch
» Отключение подсветки найденных выражений
set nohlsearch
» При поиске перескакивать на найденный текст в процессе набора строки (инкрементальный поиск)
set incsearch
» Если искомое выражения содержит символы в верхнем регистре — ищет с учётом регистра, иначе — без учёта
set smartcase
» Останавливать поиск при достижении конца файла
set nowrapscan
» Игнорировать регистр букв при поиске
set ignorecase
» В режиме поиска используется раскладка, заданная по умолчанию
set imsearch=-1
» по умолчанию латинская (английская) раскладка при поиске
set imsearch=0
» хранить больше истории команд
set history=128
» Размер истории для отмены правок
set undolevels=1000
» предлагать авто-дополнение на основе уже введённого регистра
set infercase
=Swap и backup=
» Отключаем создание swap файлов
set noswapfile
» Все swap файлы будут помещаться в заданную директорию (туда скидываются открытые буферы)
set dir=~/.vim/swap/
» Отключаем создание бекапов (резервные копии файлов с окончанием «~» создаваться не будут)
set nobackup
» Если установлено set backup, то помещаются в этот каталог
set backupdir=~/.vim/backup/
=Кодировки, горячие клавиши и прочее=
if has(«unix»)
» использовать английскую локаль на любой системе
language en_US.UTF-8
endif
» Кодировка по умолчанию
set encoding=utf-8
set termencoding=utf-8
» Формат файла по умолчанию
set fileformat=unix
» Формат файла, который влияет на окончания строк — будет перебирать в указанном порядке
set ffs=unix,dos,mac
» Список кодировок файлов для авто-определения
set fileencodings=utf-8,koi8-r,cp1251,cp866
» Показывать все возможные кандидаты для выбора при авто-завершении команд в командной строке
set wildmenu
set wcm=<TAB>
» вывести весь список сразу доступных вариантов, а затем перебором
set wildmode=list:longest,full
» Переключение кодировки чтения файла по <F7>
menu Encoding.Read.UTF8<TAB><F7> :e ++enc=utf8 <CR>
menu Encoding.Read.KOI8-R<TAB><F7> :e ++enc=koi8-r<CR>
menu Encoding.Read.CP1251<TAB><F7> :e ++enc=cp1251<CR>
menu Encoding.Read.CP866<TAB><F7> :e ++enc=cp866<CR>
map <F7> :emenu Encoding.Read.<TAB>
» Переключение кодировки сохранения файла по <F8>
menu Encoding.Write.UTF8<TAB><F8> :set fenc=utf8 <CR>
menu Encoding.Write.KOI8-R<TAB><F8> :set fenc=koi8-r<CR>
menu Encoding.Write.CP1251<TAB><F8> :set fenc=cp1251<CR>
menu Encoding.Write.CP866<TAB><F8> :set fenc=cp866<CR>
map <F8> :emenu Encoding.Write.
» По умолчанию проверка орфографии выключена (setlocal nospell). Меню для управления этими настройками по <F9>
menu SpellLang.nospell<TAB><F9> :setlocal nospell <CR>
menu SpellLang.RU<TAB><F9> :setlocal spell spelllang=ru_yo <CR>
menu SpellLang.EN<TAB><F9> :setlocal spell spelllang=en_us <CR>
» также возможна одновременная проверка многоязычного документа
menu SpellLang.RU_EN<TAB><F9> :setlocal spell spelllang=ru_ru,en_us <CR>
» словари при загрузке с сайта ftp://ftp.vim.org/pub/vim/runtime/spell/ будут ложиться в ~/.vim/spell, что редактор сам предложит при первой проверке орфографии
map <F9> :emenu SpellLang.<TAB>
» Сохранить файл по <F2>
nmap <F2> :w!<CR>
imap <F2> <Esc>:w!<CR>
vmap <F2> <Esc>:w!<CR>
» Выйти из редактора по <F10>
nmap <F10> :q<CR>
imap <F10> <Esc>:q<CR>
vmap <F10> <Esc>:q<CR>
» Просмотр списка буферов по <F4>
nmap <F4> <Esc>:buffers<CR>
vmap <F4> <Esc>:buffers<CR>
imap <F4> <Esc><Esc>:buffers<CR>
» предыдущий буфер
map <F5> :bp<CR>
vmap <F5> <Esc>:bp<CR>i
imap <F5> <Esc>:bp<CR>i
» следующий буфер
map <F6> :bn<CR>
vmap <F6> <Esc>:bn<CR>i
imap <F6> <Esc>:bn<CR>i
» Переключение табов (вкладок) с помощью SHIFT+TAB и CTRL+TAB
map <S-TAB> :tabprevious<CR>
nmap <S-TAB> :tabprevious<CR>
imap <S-TAB> <Esc>:tabprevious<CR>i
map <C-TAB> :tabnext<CR>
nmap <C-TAB> :tabnext<CR>
imap <C-TAB> <Esc>:tabnext<CR>i
» Открытие\закрытие новой вкладки по CTRL+T и CTRL+W
nmap <C-t> :tabnew<CR>
imap <C-t> <Esc>:tabnew<CR>a
nmap <C-w> :tabclose<CR>
imap <C-w> <Esc>:tabclose<CR>
Биндинг клавишь (map — механизм определения макрокоманд) может происходить для разных режимов работы редактора VIM:
map или nmap — нормальный(командный) режим (normal);
imap — режим ввода символов (insert);
vmap — визуальный (visual).
В любом случае лишним не будет всегда контролировать в каком режиме на данный момент работает редактор.
Формат записи для присвоения кнопкам действия следующий:
map [клавиша] [список команд]
Названия клавиш обязательно заключаются в угловые скобки. После map в скобках «<>» задается клавиша или комбинация клавиш, при нажатии которой/которых будет выполнено определенное действие. Shift и Ctrl можно сократить до S и C. Ввод команды завершается обычно символом перевода строки (нажатие на «Enter»). Можно прибиндить не только выполнение некоторых действий в редакторе, а и каких-либо скриптов\утилит, т.е. те же действия, которые можно выполнить в командном режиме VIM-a.
http://funix.ru/programs_utilities/vimrc-nastrojka-vim.html
-----------------------------------------
Размер окна Vim вычисляется в символах. Физический размер экрана, таким образом, зависит от размера используемого фонта. Чтобы посмотреть текущий размер, пользуйтесь командой:
:set lines columns
Чтобы изменить размер, установите новые значения для опций 'lines' и/или 'columns':
:set lines=50
:set columns=80
(в файл запуска)
Чтобы узнать текущее положение окна Vim на экране монитора, наберите команду:
:winpos
Эта команда работает только в версии с графическим интерфейсом. Её вывод выглядит примерно так:
Положение окна: X 272, Y 103 ~
Положение окна указывается в пикселах. Вы можете использовать числа с этой командой для перемещения окна Vim. Например, чтобы переместить окно на 100 пикселов влево:
:winpos 172 103
http://www.r-notes.ru/administrirovanie
-----------------------------------------
Настройка редактора vi: файл настроек vi — ~/.exrc
Если его просто скопипаситить, то работать будет не всё(!) Читайте ниже о том, как правильно создать свой .exrc.
" -------------- setup
set autoindent
set backup="vi.bak"
set showmode
set exrc
set extended
set ruler
set verbose
set sw=2
" -------------- macro
" F1 sh
map OPsh 1Gi#!/bin/sh^M^M^[``
" F1 py
map OPpy 1Gi#!/usr/local/bin/python^M^M^[``
" F1 pl
map OPpl 1Gi#!/usr/local/bin/perl^M^M^[``
" F2
map OQ :w^M
" F3
map OR :wq^M
" esc-esc
map ^[^[ :q^M
" -------------- ru
map й q
map ц w
map у e
map к r
map е t
map н y
map г u
map ш i
map щ o
map з p
map х [
map ъ ]
map ф a
map ы s
map в d
map а f
map п g
map р h
map о j
map л k
map д l
map ж ;
map э '
map я z
map ч x
map с c
map м v
map и b
map т n
map ь m
map Й Q
map Ц W
map У E
map К R
map Е T
map Н Y
map Г U
map Ш I
map Щ O
map З P
map Х {
map Ъ }
map Ф A
map Ы S
map В D
map А F
map П G
map Р H
map О J
map Л K
map Д L
map Ж :
map Э "
map Я Z
map Ч X
map С C
map М V
map И B
map Т N
map Ь M
map Б <
map Ю >
" эти две пары конфликтуют
" можно оставить либо одну, либо другую
"map б ,
"map ю .
map . /
map , ?
Комментарии к настройке
Файл состоит из трёх секций: настройка редактора, создание макросов и русификация.
Настройка редактора
Здесь включено несколько полезных опций:
autoindent — авто-отступ
backup="vi.bak" — создание резервной копии с заданным именем
showmode — показывать текущий режим
exrc — пытаться найти настройки в локальной директории
extended — включить расширенные регулярные выражения
ruler — показывать текущие строку и колонку
verbose — выдавать расширенные сообщения об ошибках
set sw=2 — установить отступ в два пробела (используется в командах >> и <<)
Существует много других опций, которым я не нашёл применения, но вы, возможно, найдёте. Смотрите man 1 vi.
Создание макросов
Это самая сложная тема. Раздел макросов нельзя копировать «как есть». Его нужно набрать самостоятельно.
Макросы имеют вид:
map <что заменить> <на что заменить>
Давайте разберём самый простой макрос: F2 — «сохранить файл».
Сперва нам надо узнать, какую последовательность символов выдаёт клавиша F2. Для этого запускаем какую-нибудь нейтральную команду вывода на консоль (cat — хороший выбор), нажимаем F2 и смотрим, что получилось. У меня получилось вот что:
~$ cat
^[OQ
У вас результат может быть иным, зависит от настроек консоли, но суть от этого не меняется. Мы видим тут три символа: ^[ — esc, и латинские буквы O и Q.
Именно эту последовательность символов получит vi, когда вы нажмёте F2. (Вы могли бы не нажимать F2, а использовать последовательность клавиш ^[OQ — результат бы не изменился).
Первый символ — esc — мы не будем включить в макрос. Пусть vi обработает его обычным способом, перейдя в режим команд. Итого, нам надо создать макрос для последовательности OQ.
Но набрать его не просто, мы должны закодировать в нём нажатие на «Enter». Для этого с клавиатуры надо набрать последовательно Ctrl-V - Enter. На экране при этом появится пара символов ^M. Аналогично надо набирать все управляющие последовательности.
В конфигурации предусмотрено несколько макросов для функциональных клавиш и последовательностей клавиш, начинающихся с функциональной (набирать надо быстро).
F1 - s - h — добавляем шапку #!/bin/sh и возвращаемся в текущую строку
F1 - p - l — добавить шапку #!/usr/local/bin/perl
F1 - p - y — добавить шапку #!/usr/local/bin/python
F2 — сохранить файл
F3 — сохранить и выйти
esc - esc — выйти без сохранения, если файл не изменился
Русские команды;
Третья секция очень проста — здесь заводятся макросы для русских букв. Теперь все команды будут работать и на русской раскладке.