Разница между 1.21 и текущей версией РедакторVim.
@@ -1,5 +1,10 @@
+= Vim
 
-%NF
+- Work in progress
+
+[[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]]
+
+===
 
 TODO статьи:
 	* добавить раздел про табы (tabe);
@@ -7,214 +12,302 @@
 	* 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
 
-%NE
+Теперь по порядку о том, что мы сделали:
+	1 ``i`` — команда перехода в режим вставки (После нажатия внизу появляется строка ``-- INSERT --``);
+	1 ``Hello,world!`` — в режиме вставки строка печатается на экран;
+	1 ``'''<ESC>'''`` — возвращаем vim в командный режим;
+	1 ``:wq`` — команда для сохранения файла и выхода из текстового редактора.
 
+- Посимвольное перемещение курсора
 
-Небольшой конспект по поводу возможностей редактора Vim.
+Для перемещения курсора по тексту в командном режиме используются клавиши ``hjkl``:
 
-Если вы слышите о нём в первый раз или никогда не пользовались, то в разделе "Используемые источники" можно ознакомится с книгами и публикациями о Vim, где он описан гораздо лучше. [http://ru.wikibooks.org/wiki/Vim|Пример]. Либо можно пройти встроенный в vim ознакомительный курс, для этого в командной строке нужно ввести ''vimtutor''
+	``h`` : переместить курсор влево,
+	``j`` : переместить курсор вниз,
+	``k`` : переместить курсор вверх,
+	``l`` : переместить курсор вправо.
 
--- 1. Режимы Vim
+Вы можете использовать клавиши со стрелками (← ↑ → ↓) но использовать ``hjkl`` для перемещения гораздо удобнее, чем тянуть руку к мышке
+или клавишам со стрелками (при слепом десятипальцевом методе набора ваши пальцы уже лежат на клавишах ``jkl``).
 
-Vim поддерживает несколько режимов работы. Это означает, что действие клавиш и их комбинаций различается в зависимости от того, в каком режиме вы сейчас находитесь
+- Числовые аргументы
 
---- Командный режим
+Перед любой командой перемещения курсора можно указать число,
+обозначающее сколько раз команда будет выполнена.
+Например команда 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''' - перейти в режим ввода с новой строки под курсором;
-	* '''O''' - перейти в режим ввода с новой строки над курсором;
-	* '''I''' - переместиться в начало строки и перейти в режим ввода;
-	* '''A''' - переместиться в конец строки и перейти в режим ввода;
+	* ``i`` — ввод с текущего символа;
+	* ``a`` — ввод со следующего символа;
+	* ``o`` — перейти в режим ввода с новой строки под курсором;
+	* ``O`` — перейти в режим ввода с новой строки над курсором;
+	* ``I`` — переместиться в начало строки и перейти в режим ввода;
+	* ``A`` — переместиться в конец строки и перейти в режим ввода.
 
---- Режим выделения
+-- 1.3 Режим выделения
 
 Клавиши перехода:
-	* '''v''' - посимвольное выделение;
-	* '''V''' - построчное выделение.
+	* ``v`` — посимвольное выделение;
+	* ``V`` — построчное выделение.
+
+-- 1.4 Режим замены
 
---- Режим замены
+Клавиша перехода — ``R``.
 
-Клавиша перехода - '''R'''.
+- 2. Справка
 
--- 2. Работа с файлами и сессиями
+Vim содержит довольно полную документацию, которой можно воспользоваться в любой момент.
+Для её просмотра необходимо использовать команду ``:help``.
+Для получения справки по интересующей команде достаточно набрать ``:help commandname`` в командном режиме.
+По оглавлению можно перемещаться с помощью горячих клавиш из раздела "Путешествие по меткам".
+Кроме того вместе с vim устанавливается вместе с небольшим учебным пособием, для начала обучения введите в терминале
 
-''':mksession''' - создать файл сессии (в файл Session.vim сохраняется информация о настройках и всех открытых файлах и буферах);
+ $ '''vimtutor''
 
-'''source Session.vim''' - загрузить файл сессии (все настройки и открытые в прошлый раз окна восстанавливаются);
+- 3. Работа с файлами и сессиями
 
-''':e'''FILE - открывает FILE на редактирование;
+``:mksession`` — создать файл сессии (в файл Session.vim сохраняется информация о настройках и всех открытых файлах и буферах);
 
-''':w'''\[FILE] - записывает сделанные изменения в открытый файл или FILE, если он указан;
+``source Session.vim`` — загрузить файл сессии (все настройки и открытые в прошлый раз окна восстанавливаются);
 
-''':q''' - выход из vim. При ''':q!''' выход без записи сделанных изменений;
+``:e``FILE — открывает FILE на редактирование;
 
-'''РЕМАРКА:''' - можно смешивать несколько команд в одну. Например - ''':wq'''
+``:w``[FILE] — записывает сделанные изменения в открытый файл или FILE, если он указан;
 
--- 3. Перемещение
+``:q`` — выход из vim. При ``:q!`` выход без записи сделанных изменений.
+
+'''РЕМАРКА:''' можно смешивать несколько команд в одну. Например — ``:wq``
+
+- 4. Перемещение
 
 Перемещение курсора:
 
-%NF
+===
 влево / вниз / вверх / вправо
  h    / j    / k     / l
-%NE
+===
 
 '''РЕМАРКА:''' Удобство в том, что при такой раскладке пальцы всегда лежат на большинстве нужных клавиш, и не нужно перемещать руку от букв к клавишам стрелок.
 
-'''^''' - курсор в начало строки;
+``^`` — курсор в начало строки;
 
-'''$''' - курсор в конец строки;
+``$`` — курсор в конец строки;
 
-'''w''' - курсор в начало следующего слова;
+``w`` — курсор в начало следующего слова;
 
-'''b''' - курсор в начало предыдущего слова;
+``b`` — курсор в начало предыдущего слова;
 
-'''{NUM}gg''' - переход на {NUM} строку;
+``{NUM}gg`` — переход на {NUM} строку;
 
-'''G''' - переход в конец файла;
+``G`` — переход в конец файла;
 
-'''ctrl + y''' - экран на 1 строку вверх;
+``ctrl + y`` — экран на 1 строку вверх;
 
-'''ctrl + e''' - экран на 1 строку вниз;
+``ctrl + e`` — экран на 1 строку вниз;
 
-'''ctrl + u''' - экран на 1/2 страницы вверх;
+``ctrl + u`` — экран на 1/2 страницы вверх;
 
-'''ctrl + d''' - экран на 1/2 страницы вниз;
+``ctrl + d`` — экран на 1/2 страницы вниз;
 
-'''ctrl + b''' - экран на страницу вверх;
+``ctrl + b`` — экран на страницу вверх;
 
-'''ctrl + u''' - экран на страницу вверх;
+``ctrl + u`` — экран на страницу вверх.
 
--- 4. Отмена действий
+- 5. Отмена действий
 
-'''u''' - отменяет предыдущее действие. Может применяться несколько раз. Аналог комбинации '''ctrl + z''';
+``u`` — отменяет предыдущее действие. Может применяться несколько раз. Аналог комбинации ``ctrl + z``;
 
-'''ctrl + r''' отмена отмены предыдущего действия. Аналог комбинации '''ctrl + shift + z'''.
+``ctrl + r`` — отмена отмены предыдущего действия. Аналог комбинации ``ctrl + shift + z``.
 
--- 5. Поиск
+- 6. Поиск
 
-'''/{regex}''' - поиск регулярного выражения {regex} в текущем файле от курсора к концу файла;
+``/{regex}`` — поиск регулярного выражения {regex} в текущем файле от курсора к концу файла;
 
-'''/{regex}''' - поиск регулярного выражения {regex} в текущем файле от курсора к началу файла;
+``/{regex}`` — поиск регулярного выражения {regex} в текущем файле от курсора к началу файла;
 
-'''n''' - найти следующее вхождение;
+``n`` — найти следующее вхождение;
 
-'''N''' - найти предыдущее вхождение;
+``N`` — найти предыдущее вхождение;
 
-'''f{letter} или F{letter}''' - перемещает курсор на следующую (или предыдущую если F) букву {letter} в текущей строке;
+``f{letter} или F{letter}`` — перемещает курсор на следующую (или предыдущую если F) букву {letter} в текущей строке;
 
-'''t{letter} или T{letter}''' - перемещает курсор за один символ до следующей (или предыдущей если T) буквы {letter} в текущей строке;
+``t{letter} или T{letter}`` — перемещает курсор за один символ до следующей (или предыдущей если T) буквы {letter} в текущей строке.
 
--- 6. Редактирование
+- 7. Редактирование
 
-'''{NUM}dd''' - удаление {NUM} строк;
+``{NUM}dd`` — удаление {NUM} строк;
 
-'''{NUM}cc''' - аналог dd, но после удаления переворит редактор в режим ввода;
+``{NUM}cc`` — аналог dd, но после удаления переворит редактор в режим ввода;
 
-'''{NUM}yy''' копирование {NUM} строк в буфер обмена;
+``{NUM}yy`` — копирование {NUM} строк в буфер обмена;
 
-'''p''' - вставка из буфера обмена после позиции курсора;
+``p`` — вставка из буфера обмена после позиции курсора;
 
-'''P''' - вставка из буфера обмена до позиции курсора;
+``P`` — вставка из буфера обмена до позиции курсора;
 
-'''x''' - удаление символа под курсором.
+``x`` — удаление символа под курсором.
 
--- 7. Пара слов о командном режиме
+- 8. Вызов внешних команд
 
-Можно относиться к командам vim как к предложениям.
+``:!cmd`` — вызывает shell команду cmd для обработки переданных данных. Если данных не передано, показывает вывод команды на экран.
 
-Есть глаголы (например f, d, g), есть существительные (например w, буквы, числа).
-
-Примеры составления предложений:
-	* Delete till find 'b' (удалить всё до символа 'b') - dtfb
-	* Mark from there to 22 line (выделить всё с текущего символа до 22 строки) - vg22g
+Пример:
 
--- 8. Вызов внешних команд
+``:!ls`` — листинг файлов в текущей директории;
 
-''':!cmd''' - вызывает shell команду cmd для обработки переданных данных. Если данных не передано, показывает вывод команды на экран.
+``:%wc -w`` — подсчёт слов в файле.
 
-Пример:
+Делаем vim hex-редактором:
 
-''':!ls''' - показывает файлы в текущей директории
+``%!xxd`` — конвертирует файл в хекс представление;
 
-''':%wc -w''' - считает количество слов в файле
+``%!xxd -r`` — конвертирует обратно.
 
-Делаем vim hex-редактором:
 
-'''%!xxd''' - конвертирует файл в хекс представление
+- 9. Прочие полезные команды
 
-'''%!xxd -r''' - конвертирует обратно
+``:E`` — Открывает меню выбора файла;
 
+``:setlocal`` — показывает текущие локальные переменные.
 
--- 9. Прочие полезные команды
+- 10. Путешествие по меткам
 
-''':E''' - Открывает меню выбора файла;
+В отношении языков программирования меткой является
+некий объект (функция, переменная, структура, ...).
+Vim позволяет организовать удобное перемещение к определениям меток. 
 
-''':setlocal''' - показывает текущие локальные переменные
+``ctrl + ]`` — перейти к первому определению метки, находящейся под курсором;
 
--- 10. Путешествие по тегам
+``ctrl + g`` — то же что и ``ctrl + ]``, но показывает меню выбора, если определений несколько;
 
-Файл тегов можно создать с помощью команды
+``ctrl + t`` — вернуться обратно.
 
-%NF
-ctags -R .
-%NE
 
-'''ctrl + ]''' - перейти к определению тега;
+Для создания файла, содержащего в себе информацию о расположении меток
+необходимо воспользоваться утилитой ctags.
 
-'''ctrl + g''' - то же что и '''ctrl + ]''', но показывает меню выбора, если определений несколько;
+В корневой директори проекта, к которому вы хотите сгенерировать файл меток запустите команду
 
-'''ctrl + t''' - вернуться обратно.
+ $ '''ctags -R .'''
 
--- 11. Файл настроек vimrc
+После этого в текущей директории создаётся файл ''tags''.
+vim автоматически определяет и обрабатывает файлы ''tags'', находящиеся в текущей рабочей директории. 
+Для подключения файла вручную необходимо присвоить переменной tags путь до необходимого файла тегов
 
-При запуске редактор считывает настройки, сохранённые в файле '''~/.vimrc'''. Те же команды можно установить для текущей сессии vim в командном режиме после двоеточния (Пример: ''':set nu''')
+ :set tags=TAGFILE
 
-Для установки опций используется ключевое слово '''set''', причём если мы хотим отключить опцию, то перед её именем мы пишем '''no'''
+- 11. Файл настроек vimrc
 
-Пример:
+При запуске редактор считывает настройки, сохранённые в файле ''~/.vimrc''. Те же команды можно установить для текущей сессии vim в командном режиме после двоеточния (Пример: ``:set nu``)
 
-'''set nu''' - включает нумерацию строк vim;
+Для установки опций используется ключевое слово ``set``, причём если мы хотим отключить опцию, то перед её именем мы пишем ``no``
 
-'''set nonu''' - выключает нумерацию;
+Пример:
 
-'''set hls''' - highlight search, подсвечивает искомые слова
+``set nu`` — включает нумерацию строк vim;
 
-'''set ic''' - ignore case, игнорирует регистр букв при поиске
+``set nonu`` — выключает нумерацию;
 
-'''syntax on''' - включает подсветку синтаксиса
+``set hls`` — highlight search, подсвечивает искомые слова;
 
--- 12. Справка
+``set ic`` — ignore case, игнорирует регистр букв при поиске;
 
-Vim содержит довольно полную документацию, которой можно воспользоваться в любой момент. Для её просмотра необходимо использовать команду ''':help'''.
-Для получения справки по интересующей команде достаточно набрать ''':help commandname''' в командном режиме.
-По оглавлению можно перемещаться с помощью горячих клавиш из раздела "Путешествие по тегам"
+``syntax on`` — включает подсветку синтаксиса.
 
--- 13. Полезные дополнения vimrc
+- 12. Полезные дополнения vimrc
 
 Работа с файлами в windows(cp1251) кодировке
 
-%NF
+==={vim}
 set fileencodings=cp1251,utf-8
 if has("x11") == 0
   set enc=cp1251
 endif
-%NE
+===
 
-Добавление привычных комбинаций '''ctrl+c''', '''ctrl+v''', '''ctrl+a'''
+Добавление привычных комбинаций ``'''<ctrl>'''+c``, ``'''ctrl'''+v``, ``'''ctrl'''+a``
 
-%NF
+==={vim}
 function! CopyAll()
   let n = line('.')
   normal gg"+yG
@@ -225,16 +318,37 @@
 map <C-v> <esc>"+gP
 map <C-a> <esc>:call CopyAll()<cr>
 
-%NE
+===
 
 Мэппинг русских клавиш, для того чтобы не приходилось переключать раскладку для командного режима.
 
-%NF
-.LP
-set langmap=йq ,цw ,уe ,кr ,еt ,нy ,гu ,шi ,щo ,зp ,фa ,ыs ,вd ,аf,пg ,рh ,оj ,лk ,дl ,яz ,чx ,сc ,мv ,иb ,тn ,ьm ,ЙQ ,ЦW ,УE ,КR ,ЕT ,НY ,ГU ,ШI ,ЩO ,ЗP ,ФA ,ЫS ,ВD ,АF ,ПG ,РH ,ОJ ,ЛK ,ДL ,ЯZ ,ЧX ,СC ,МV ,ИB ,ТN ,ЬM ,х[ ,Х{ ,ъ] ,ж\\; ,Ж: ,э' ,Э\\" ,б\\, ,Б< ,ю. ,Ю>
-%NE
+==={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()
+
+===
 
--- 14. Плагины
+- 13. Плагины
 
 Для упрощения работы в VIM в интернете можно найти множество плагинов.
 Их установка довольно проста (обычно нужно просто поместить файлы в папку '''~/.vim/''').
@@ -245,7 +359,7 @@
 
 Плагин для автодополнения имён структур, функций. 
 Информацию о которых получается из
-файла тегов, который можно сгенерировать с помощью утилиты '''ctags'''.
+файла меток, который можно сгенерировать с помощью утилиты '''ctags'''.
 
 --- snipmate
 
@@ -259,7 +373,7 @@
 Плагин отображает дерево каталогов начиная с выбранного корня.
 Довольно удобно для просмотра больших проектов.
 
--- 15. Используемые источники
+- 14. Используемые источники
 
 
 %R(