Разница между 1.4 и текущей версией РедакторVim.
@@ -1,134 +1,393 @@
+= Vim
 
+- Work in progress
 
--- 1. Режимы Vim
+[[http://img0.joyreactor.cc/pics/comment/full/%D0%B3%D0%B5%D1%80%D0%BE%D0%B8-%D0%BC%D0%B5%D1%87%D0%B0-%D0%B8-%D0%BC%D0%B0%D0%B3%D0%B8%D0%B8-3-Heroes-of-Might-and-Magic-3-Heroes-of-Might-and-Magic-%D0%98%D0%B3%D1%80%D1%8B-1611943.png | It’s OK this way | 100px]]
 
-Vim поддерживает несколько режимов работы. Это означает что действие клавиш и их комбинаций различается в зависимости от того в каком режиме вы сейчас находитесь
+===
 
---- Командный режим
+TODO статьи:
+	* добавить раздел про табы (tabe);
+	* описание буферов и работы с ними (:ls/:b/);
+	* ctags;
+	* разделение экрана на несколько областей :vsplit, :split, ...
+	* полезные плагины.
+===
+
+Vim — мощный текстовый редактор, потомок Unix-редактора vi.
+Так же как и vi, vim гибко конфигурируем и содержит множество
+возможностей по ускорению и автоматизации редактирования текстов.
+За счёт использования внутреннего скриптового языка vimscript
+редактор гибко конфигурируется и позволяет быстро разрабатыватывать расширения.
+
+Для новичков vim может показаться громоздким и непонятным из-за своей необычной
+«системы управления».
+Дело в том, что Vim поддерживает множество режимов работы.
+Это значит, что действие комбинаций клавиш различается
+в зависимости от того режима, в котором находится редактор.
+Командный режим является режимом по умолчанию.
+Находясь в нём, мы можем перейти в другие режимы
+или выполнять команды (о них будет сказано ниже).
+
+Для того чтобы начать вводить текст,
+необходимо перевести vim в режим вставки. Делается это вводом ``i``.
+После этого внизу окна редактора начнёт отображаться строка ``-- INSERT --``.
+В режиме вставки vim работает как нормальный текстовый редактор,
+любой введённый символ вставляется в редактируемый текст.
+
+Для того, чтобы вернуться в командный режим, необходимо нажать клавишу Esc.
+Здесь и далее мы будем обозначать её как '''<ESC>'''.
+
+В качестве примера создадим файл ''hello.txt'', содержащий строчку 'Hello, world!'
+
+В терминале вводим команду
+
+ $ '''vim hello.txt'''
+
+После этого в открытом редакторе набираем
+
+ iHello, world!'''<ESC>''':wq
+
+Теперь по порядку о том, что мы сделали:
+	1 ``i`` — команда перехода в режим вставки (После нажатия внизу появляется строка ``-- INSERT --``);
+	1 ``Hello,world!`` — в режиме вставки строка печатается на экран;
+	1 ``'''<ESC>'''`` — возвращаем vim в командный режим;
+	1 ``:wq`` — команда для сохранения файла и выхода из текстового редактора.
+
+- Посимвольное перемещение курсора
+
+Для перемещения курсора по тексту в командном режиме используются клавиши ``hjkl``:
+
+	``h`` : переместить курсор влево,
+	``j`` : переместить курсор вниз,
+	``k`` : переместить курсор вверх,
+	``l`` : переместить курсор вправо.
+
+Вы можете использовать клавиши со стрелками (← ↑ → ↓) но использовать ``hjkl`` для перемещения гораздо удобнее, чем тянуть руку к мышке
+или клавишам со стрелками (при слепом десятипальцевом методе набора ваши пальцы уже лежат на клавишах ``jkl``).
+
+- Числовые аргументы
+
+Перед любой командой перемещения курсора можно указать число,
+обозначающее сколько раз команда будет выполнена.
+Например команда 4j перемещает курсор на 4 строки вниз.
+
+- Базовые команды
+
+Команда удаления символа под курсором ``x``.
+
+Отмена сделанных изменений ``u`` (аналог ``'''<ctrl>'''+z``).
+
+Возвращение отменённых изменений ``'''<ctrl>'''+r``
+
+Помимо базовых команд,
+о которых было сказано выше,
+vim поддерживает множество других,
+позволяет комбинировать уже существующие или создавать свои.
+Более того, перед большинством команд можно набрать число,
+определяющее сколько раз команда будет выполнена,
+например для удаления четырёх символов вместо четырёх нажатий на ``x`` можно набрать команду ``4x``
+
+- Пара слов о командном режиме
+
+Можно относиться к командам vim как к предложениям.
+
+Есть глаголы (например f — find, d — delete, g — go), есть существительные (например w — word, буквы, числа).
+
+Примеры составления предложений:
+	* Delete till find 'b' (удалить всё до символа 'b') — ``dtfb``
+	* Mark from there to 22 line (выделить всё с текущего символа до 22 строки) — ``vg22g``
+
+Соответственно чем больше вы знаете «слов», тем более сложные и полезные «предложения» вы сможете составлять.
+Вторая часть статьи — краткий конспект различных возможностей и команд vim.
+ 
+- 1. Режимы Vim
+
+Помимо описанных выше режимов работы (вставка, командный режим) vim поддерживает множество других.
+Более того, переход между режимами может быть выполнен несколькими способами.
+
+-- 1.1 Командный режим
 
 Режим по умолчанию. Из него осуществляется переход в другие режимы и выполнение команд.
 
-Клавиша перехода - '''ESC'''.
+Клавиша перехода — '''<ESC>'''.
 
-Все команды из разделов 2 - 10 выполняются из этого режима.
+Все команды из разделов 3 - 10 выполняются из этого режима.
 
---- Режим ввода
+-- 1.2 Режим ввода
 
 Клавиши перехода:
-	* '''i''' - ввод с текущего символа
-	* '''a''' - ввод со следующего символа
-	* '''o''' - ввод со следующей строки
+	* ``i`` — ввод с текущего символа;
+	* ``a`` — ввод со следующего символа;
+	* ``o`` — перейти в режим ввода с новой строки под курсором;
+	* ``O`` — перейти в режим ввода с новой строки над курсором;
+	* ``I`` — переместиться в начало строки и перейти в режим ввода;
+	* ``A`` — переместиться в конец строки и перейти в режим ввода.
+
+-- 1.3 Режим выделения
+
+Клавиши перехода:
+	* ``v`` — посимвольное выделение;
+	* ``V`` — построчное выделение.
+
+-- 1.4 Режим замены
 
---- Режим выделения
+Клавиша перехода — ``R``.
 
-Клавиша перехода - '''v'''.
+- 2. Справка
 
---- Режим замены
+Vim содержит довольно полную документацию, которой можно воспользоваться в любой момент.
+Для её просмотра необходимо использовать команду ``:help``.
+Для получения справки по интересующей команде достаточно набрать ``:help commandname`` в командном режиме.
+По оглавлению можно перемещаться с помощью горячих клавиш из раздела "Путешествие по меткам".
+Кроме того вместе с vim устанавливается вместе с небольшим учебным пособием, для начала обучения введите в терминале
 
-Клавиша перехода - '''R'''.
+ $ '''vimtutor''
 
--- 2. Работа с файлами и сессиями
+- 3. Работа с файлами и сессиями
 
-''':mksession''' - создать файл сессии (в файл Session.vim сохраняется информация о настройках и всех открытых файлах и буферах);
+``:mksession`` — создать файл сессии (в файл Session.vim сохраняется информация о настройках и всех открытых файлах и буферах);
 
-'''source Session.vim''' - загрузить файл сессии (все настройки и открытые в прошлый раз окна восстанавливаются);
+``source Session.vim`` — загрузить файл сессии (все настройки и открытые в прошлый раз окна восстанавливаются);
 
-''':e'''FILE - открывает FILE на редактирование;
+``:e``FILE — открывает FILE на редактирование;
 
-''':w'''\[FILE] - записывает сделанные изменения в открытый файл или FILE, если он указан;
+``:w``[FILE] — записывает сделанные изменения в открытый файл или FILE, если он указан;
 
-''':q''' - выход из vim. При ''':q!''' выход без записи сделанных изменений;
+``:q`` — выход из vim. При ``:q!`` выход без записи сделанных изменений.
 
-'''РЕМАРКА:''' - можно смешивать несколько команд в одну. Например - ''':wq!'''
+'''РЕМАРКА:''' можно смешивать несколько команд в одну. Например — ``:wq``
 
--- 3. Перемещение
+- 4. Перемещение
 
+Перемещение курсора:
+
+===
 влево / вниз / вверх / вправо
-h    /j   /k    /l
+ h    / j    / k     / l
+===
 
-'''РЕМАРКА:''' Удобство в том, что при такой раскладке пальцы всегда лежат на большинстве нужных клавишь и не нужно перемещать руку от букв к клавишам стрелок.
+'''РЕМАРКА:''' Удобство в том, что при такой раскладке пальцы всегда лежат на большинстве нужных клавиш, и не нужно перемещать руку от букв к клавишам стрелок.
 
-'''^''' - в начало строки;
+``^`` — курсор в начало строки;
 
-'''$''' - в конец строки;
+``$`` — курсор в конец строки;
 
-'''w''' - в начало следующего слова;
+``w`` — курсор в начало следующего слова;
 
-'''b''' - в начало предыдущего;
+``b`` — курсор в начало предыдущего слова;
 
-'''{NUM}gg''' - переход на {NUM} строку;
+``{NUM}gg`` — переход на {NUM} строку;
 
-'''G''' - переход в конец файла.
+``G`` — переход в конец файла;
 
--- 4. Отмена действий
+``ctrl + y`` — экран на 1 строку вверх;
 
-'''u''' - отменяет предыдущее действие. Может применяться несколько раз. Аналог комбинации '''ctrl + z''';
+``ctrl + e`` — экран на 1 строку вниз;
 
-'''ctrl + r''' отмена отмены предыдущего действия. Аналог комбинации '''ctrl + shift + z'''.
+``ctrl + u`` — экран на 1/2 страницы вверх;
 
--- 5. Поиск
+``ctrl + d`` — экран на 1/2 страницы вниз;
 
-'''/{regex}''' - поиск регулярного выражения {regex} в текущем файле от курсора к концу файла;
+``ctrl + b`` — экран на страницу вверх;
 
-'''/{regex}''' - поиск регулярного выражения {regex} в текущем файле от курсора к началу файла;
+``ctrl + u`` — экран на страницу вверх.
 
-'''n''' - найти следующее слово;
+- 5. Отмена действий
 
-'''N''' - найти предыдущее слово;
+``u`` — отменяет предыдущее действие. Может применяться несколько раз. Аналог комбинации ``ctrl + z``;
 
-'''f{letter} или F{letter}''' - перемещает курсор на следующую (или предыдущую если F) букву {letter} в текущей строке;
+``ctrl + r`` — отмена отмены предыдущего действия. Аналог комбинации ``ctrl + shift + z``.
 
-'''t{letter} или T{letter}''' - перемещает курсор за один символ до следующей (или предыдущей если T) буквы {letter} в текущей строке;
+- 6. Поиск
 
--- 6. Редактирование
+``/{regex}`` — поиск регулярного выражения {regex} в текущем файле от курсора к концу файла;
 
-'''{NUM}dd''' - удаление {NUM} строк;
+``/{regex}`` — поиск регулярного выражения {regex} в текущем файле от курсора к началу файла;
 
-'''{NUM}cc''' - аналог dd, но после удаления переворит редактор в режим ввода;
+``n`` — найти следующее вхождение;
 
-'''{NUM}yy''' копирование {NUM} строк в буфер обмена;
+``N`` — найти предыдущее вхождение;
 
-'''p''' - вставка из буфера обмена в текущую позицию курсора;
+``f{letter} или F{letter}`` — перемещает курсор на следующую (или предыдущую если F) букву {letter} в текущей строке;
 
-'''x''' - удаление символа под курсором.
+``t{letter} или T{letter}`` — перемещает курсор за один символ до следующей (или предыдущей если T) буквы {letter} в текущей строке.
 
--- 7. Пара слов о коммандном режиме
+- 7. Редактирование
 
-Можно относиться к командам vim как к предложениям.
+``{NUM}dd`` — удаление {NUM} строк;
 
-Есть глаголы (например f, d, g) есть существительные (например w, буквы, числа).
+``{NUM}cc`` — аналог dd, но после удаления переворит редактор в режим ввода;
 
-Примеры составления предложений:
-	* Delete till find 'b' (удалить всё до символа 'b') - dtfb
-	* Mark from there to 22 line (выделить всё с текущего символа до 22 строки) - vg22g
+``{NUM}yy`` — копирование {NUM} строк в буфер обмена;
+
+``p`` — вставка из буфера обмена после позиции курсора;
+
+``P`` — вставка из буфера обмена до позиции курсора;
+
+``x`` — удаление символа под курсором.
 
--- 8. Вызов внешних команд
+- 8. Вызов внешних команд
 
-''':!cmd''' - вызывает shell команду cmd для обработки переданных данных. Если данных не передано показывает вывод команды на экран.
+``:!cmd`` — вызывает shell команду cmd для обработки переданных данных. Если данных не передано, показывает вывод команды на экран.
 
 Пример:
 
-''':!ls''' - показывает файлы в текущей директории
+``:!ls`` — листинг файлов в текущей директории;
+
+``:%wc -w`` — подсчёт слов в файле.
+
+Делаем vim hex-редактором:
+
+``%!xxd`` — конвертирует файл в хекс представление;
+
+``%!xxd -r`` — конвертирует обратно.
+
+
+- 9. Прочие полезные команды
+
+``:E`` — Открывает меню выбора файла;
+
+``:setlocal`` — показывает текущие локальные переменные.
+
+- 10. Путешествие по меткам
+
+В отношении языков программирования меткой является
+некий объект (функция, переменная, структура, ...).
+Vim позволяет организовать удобное перемещение к определениям меток. 
+
+``ctrl + ]`` — перейти к первому определению метки, находящейся под курсором;
+
+``ctrl + g`` — то же что и ``ctrl + ]``, но показывает меню выбора, если определений несколько;
+
+``ctrl + t`` — вернуться обратно.
+
+
+Для создания файла, содержащего в себе информацию о расположении меток
+необходимо воспользоваться утилитой ctags.
+
+В корневой директори проекта, к которому вы хотите сгенерировать файл меток запустите команду
+
+ $ '''ctags -R .'''
+
+После этого в текущей директории создаётся файл ''tags''.
+vim автоматически определяет и обрабатывает файлы ''tags'', находящиеся в текущей рабочей директории. 
+Для подключения файла вручную необходимо присвоить переменной tags путь до необходимого файла тегов
+
+ :set tags=TAGFILE
+
+- 11. Файл настроек vimrc
+
+При запуске редактор считывает настройки, сохранённые в файле ''~/.vimrc''. Те же команды можно установить для текущей сессии vim в командном режиме после двоеточния (Пример: ``:set nu``)
+
+Для установки опций используется ключевое слово ``set``, причём если мы хотим отключить опцию, то перед её именем мы пишем ``no``
+
+Пример:
+
+``set nu`` — включает нумерацию строк vim;
+
+``set nonu`` — выключает нумерацию;
+
+``set hls`` — highlight search, подсвечивает искомые слова;
+
+``set ic`` — ignore case, игнорирует регистр букв при поиске;
+
+``syntax on`` — включает подсветку синтаксиса.
+
+- 12. Полезные дополнения vimrc
+
+Работа с файлами в windows(cp1251) кодировке
+
+==={vim}
+set fileencodings=cp1251,utf-8
+if has("x11") == 0
+  set enc=cp1251
+endif
+===
+
+Добавление привычных комбинаций ``'''<ctrl>'''+c``, ``'''ctrl'''+v``, ``'''ctrl'''+a``
+
+==={vim}
+function! CopyAll()
+  let n = line('.')
+  normal gg"+yG
+  exec n
+endfunction
+
+vmap <C-c> "+y
+map <C-v> <esc>"+gP
+map <C-a> <esc>:call CopyAll()<cr>
+
+===
+
+Мэппинг русских клавиш, для того чтобы не приходилось переключать раскладку для командного режима.
+
+==={vim}
+
+"russian keys support
+set langmap=йq,цw,уe,кr,еt,нy,гu,шi,щo,зp,фa,ыs,вd,аf,пg,рh,оj,лk,дl,яz,чx,сc
+set langmap+=мv,иb,тn,ьm,ЙQ,ЦW,УE,КR,ЕT,НY,ГU,ШI,ЩO,ЗP,ФA,ЫS,ВD,АF,ПG,РH,ОJ,ЛK
+set langmap+=ДL,ЯZ,ЧX,СC,МV,ИB,ТN,ЬM,х[,Х{,ъ],ж\\;,Ж:,э',Э\\",б\\,,Б<,ю.,Ю>,Ё~
+
+===
+
+Nazi-режим, с помощью которого можно бороться за чистоту кода.
+Подсвечивает лишние пробелы в конце строк.
+
+==={vim}
+
+function HlSpaces()
+	highlight ExtraWhitespace ctermbg=red guibg=red
+	"autocmd ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red
+	au BufWinEnter * match ExtraWhitespace /\s\+$/
+	au InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
+	au InsertLeave * match ExtraWhitespace /\s\+$/
+endfunction
+
+au FileType c call HlSpaces()
+
+===
+
+- 13. Плагины
+
+Для упрощения работы в VIM в интернете можно найти множество плагинов.
+Их установка довольно проста (обычно нужно просто поместить файлы в папку '''~/.vim/''').
+
+Из них можно выделить
+
+--- omnicppcomplete
 
-''':%wc -w''' - считает количество слов в файле
+Плагин для автодополнения имён структур, функций. 
+Информацию о которых получается из
+файла меток, который можно сгенерировать с помощью утилиты '''ctags'''.
 
-Делаем vim hex редактором:
+--- snipmate
 
-'''%!xxd''' - конвертирует файл в хекс представление
+Плагин, содержащий в себе снипеты 
+(короткие часто используемые куски программ,
+например определение функции main) для многих языков программирования.
+Добавить свои снипеты или изменить существующие можно в файлах ''.vim/snippets/*''
 
-'''%!xxd -r''' - конвертирует обратно
+--- NERDtree
 
+Плагин отображает дерево каталогов начиная с выбранного корня.
+Довольно удобно для просмотра больших проектов.
 
--- 9. Прочие полезные команды
+- 14. Используемые источники
 
--- 10. Путешествие по тегам
 
--- 11. Файл настроек vimrc
+%R(
 
--- 12. Справка
+%T Vim — Викиучебник
+%U http://ru.wikibooks.org/wiki/Vim
+%D 2015
 
--- 13. Полезные дополнения vimrc
+%A Oualline S.
+%T Vi iMproved (VIM)
+%I New Riders
 
--- 14. Плагины
+%A Orenstein B.
+%U http://www.youtube.com/watch?v=SkdrYWhh-8s
+%T Write code faster: expert-level vim (Railsberry 2012)
 
--- 15. Используемые источники
+%R)