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

YouTube Video

Vim Cheatsheet

Режимы работы

В большинстве статей по Vim принято писать, что: В Vim имеется три режима работы,

    1. Командный режим: все нажатия клавиш интерпретируются как команды

    2. Режим вставки: используется для ввода текста

    3. Визуальный режим: используется для выделения текста или блока текста, этот режим можно рассматривать как под режим командного режима

Отбросив религиозные заблуждения и предрассудки правильнее выделить четыре режима работы

(ведь это 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. Он чем-то схож с командным.

С помощью специальных управляющих команд, в сочетании со стрелками и командами навигации,

можно посимвольно, построчно или в виде блока выделять фрагменты текста и затем применить к ним команды нормального режима (например, удаление выделенного текста или его замена).

Редактирование в этом режиме проще, чем в нормальном, потому что чётко видно, к какому блоку текста будет применяться вызванная команда редактирования.

== Некоторые часто используемые ==

$ 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 —переход в блочный визуальный режим (выделение прямоугольных областей текста)


https://andreyex.ru

<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

_vimrc

=Поиск=

» Включаем подсветку выражения, которое ищется в тексте

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

https://www.opennet.ru/__VI

Если его просто скопипаситить, то работать будет не всё(!) Читайте ниже о том, как правильно создать свой .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 — выйти без сохранения, если файл не изменился

Русские команды;

Третья секция очень проста — здесь заводятся макросы для русских букв. Теперь все команды будут работать и на русской раскладке.