Привожу здесь свой файл настроек 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
— выйти без сохранения, если файл не изменилсяТретья секция очень проста — здесь заводятся макросы для русских букв. Теперь все команды будут работать и на русской раскладке.