Защо използвам Vim
(и защо и вие бихте искали)
===================================================================

Vim е наследник на легендарния текстов редактор от средата на 70-те г. vi.
Сравнен с vi, съдържа множество подобрения.  Изключително популярен е сред
програмистите навсякъде по света.  Има реализации за всички разпространени
операционни системи: Linux и др. варианти на Unix, Windows, MacOS и т.н.
Всички реализации са безплатно достъпни и са еднакви по възможности и начин
на използване.

Vim може да работи както в текстова, така и в графична среда, а също да бъде
изпълняван като команда, повиквана от друга команда.

Vim може да работи с текстови файлове с огромен размер.  Зарежда ги мигновено
и позволява бързо придвижване между различните им части.

Vim може да работи едновременно с множество файлове, показани в участъци
(„прозорци“) на екрана или отделни страници (tab-pages).

Vim може да бъде конфигуриран, специализиран и програмиран за специфични
предпочитания и начини на употреба.  За целта разполага със собствен език
за програмиране, удобно организирани конфигурационни файлове и други средства.

Vim разпознава вида на текстовия файл, който му се подава (според начина на
завършване на редовете – Unix/DOS/Mac), а при записване запазва или променя
този вид според желанието на потребителя.

Vim работи и с Уникод, и с различни частни кодирания.  С подходящо конфигуриране
различава автоматично какъв файл му се подава.

Vim предвижда възможности да се въвеждат непечатни и други „особени“ знакове –
чрез числов (ASCII, Unicode) или мнемоничен (digraph) код, както и чрез
клавиатурни таблици за съответствие.

Vim позволява да се пише на множество национални езици, вкл. такива, при които
се пише отдясно наляво.

Писането на национални езици става особено удобно с използване на клавиатурни
таблици за съответствие.  Този метод има няколко предимства, едно от които е,
че осигурява независимост от наличието на клавиатурен драйвер на операционната
система за съответния език, както и изобщо от самата о.с.  Важно е и това, че
съответствието в таблиците се избира от потребителя и освен съответната азбука
може да включва диакритични и препинателни знаци и изобщо всичко, което се
сметне за нужно.

Vim може да работи с файлове в двоичен (нередов, нетекстов) режим.

Командите на Vim са еднообразни една с друга по отношение на избора на обекти
(„целите“), върху които действат: използват се едни и същи видове „цели“ при
придвижване, премахване, замяна и копиране.

Обекти-цели за команди на Vim могат да бъдат отделни знакове, редици от
знакове, думи, редове, изречения, абзаци, раздели, програмни процедури,
скобови съответствия ((), [], {}, <> или други посочени двойки), белязани
места в текста или т.нар. визуално избрана област.  Смисълът на повечето
от споменатите понятия при желание може да бъде променян.

Vim позволява „визуално избиране“ на области от три вида – последователни,
правоъгълни и по редове.

Във Vim всички действия на потребителя допускат текстово представяне –
например дори преместването на курсора може да бъде зададено чрез буква –
и по този начин самите те могат да бъдат обект на редактиране: поредици от
действия могат да бъдат запомняни, променяни, повторно проигравани и
съхранявани като „макроопределения“ или в „сценарни“ файлове.

Повечето „координатни“ аргументи на командите на Vim могат да се задават
в относителен смисъл, като относителността бива няколко вида.

Vim позволява на потребителя да назначава команди на един или друг клавиш
и да оформя собствени менюта от команди.  Командите могат да се определят
контекстнозависимо: според текущия режим и др.

Vim има синтактични схеми за цветно показване на стотици езици за програмиране
и файлови формати.  Има и множество цветови схеми.  Цветовите схеми се прилагат
наред със синтактичните и се избират независимо от тях.  Потребителят може да
добавя схеми и от двата вида.

Vim може да образува файл във формат HTML, изглеждащ точно като даден файл,
когато с него работи редакторът (т.е. с оцветяване според избрани синтактична
и цветова схеми).  Така програма на даден език или друг текст могат да бъдат
съхранени в подходящ цветен вид (за илюстрация или други цели) и
разпространявани и възпроизвеждани в този вид независимо от редактора.

Vim може да използва специализирани приставки (plug-ins) – програми, които
биват задействани при зареждане или записване на файл според вида на файла.
Някои приставки действат по подразбиране, напр. за автоматично разуплътняване
и повторно уплътняване (ungzip/gzip), когато входният файл е уплътнен.

Vim може да се използва като среда за програмиране (IDE) за различни езици за
програмиране, а също за (La)TeX, както и да бъде профилиран за различни други
проблемноспецифични дейности.

Във Vim някои видове текст, напр. на C/C++, се форматират автоматично, при
набирането им или с нарочна команда след това.  Начинът на форматиране се
управлява подробно с конфигуриращи параметри.  Форматирането може да бъде и
отменено.

Части от текста на редактирания с Vim файл могат да се скриват.  Такива части
биват избирани непосредствено или се задават като равнища на подробност (в
йерархично построени текстове, като HTML, XML и др.).

Характерна за Vim е възможността за повторно използване на вече зададена
управляваща информация: цели, повторения и др.  Редакторът автоматично запомня
различни видове такава информация: последно търсене, последна промяна и др.
Например, след веднъж зададен низ или образец за търсене, същото търсене може
да се извършва многократно.  Направена промяна, дори сложно зависеща от
контекста (напр. замяна на три поредни думи, средната от които отговаря на
определен шаблон) може след това да бъде извършвана многократно на други места
само с едно натискане на клавиш.

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

Vim разполага с множество буфери (регистри) за временно съхраняване (и копиране
оттам) на текст.

За търсене на текст по дадено съдържание (в команди за търсене, замяна и
изтриване) се използват шаблони – регулярни изрази, които позволяват голяма
общност и гъвкавост при съпоставяне с текста.  Регулярните изрази дават
възможност за извършване на удивително разнообразни съпоставяния.  Части
от шаблон могат да бъдат белязани така, че съответните части от разпознатия
текст да се използват при образуване на заменящия текст.

Търсенето на текст e „динамично“: съответният на шаблона текст се показва
още докато се формира шаблонът.  Едновременно се показват всички намерени
съответстия и лесно се преминава между тях.

При търсене, когато се намери съответствие, курсорът може да бъде поставен не
само в началото на намерения текст, но също с отместване спрямо началото или
края на този текст.

Когато файлът е на C или C++ търсене може да се извършва не само в текущо
редактирания файл, а заедно с това и в такива, които са „вмъкнати“ в него
(с команди #include).

Също в такива случаи е възможно чрез помощни, автоматично създавани „индексни“
файлове (tags), определение на процедура или глобална променлива да се търси в
зададено множество от файлове.

Vim може автоматично да вмъква или дописва команди, имена на файлове, шаблони
за търсене и други низове.  Дописването се избира според контекст, определен
от извършваното действие и от съдържанието на текста, върху който се прилага.

Vim поддържа „дневници“, в които записва кои команди са били изпълнявани и какви
търсения са извършвани в него.  Тези „дневници“ се използват за лесно намиране
и повтаряне на дадено действие.  Тъй като самите те представляват текст, в тях
също може да се търси и те могат да бъдат променяни посредством редактиращи
действия на Vim.

Наред с тези дневници, Vim запомня и разнообразна информация, свързана с
историята на извършваните от потребителя действия при работа с редактора:
списък от буфери, поставени етикети, съдържание на използваните регистри.
Така всичко това може да се използва при следващия сеанс на работа с Vim.

Vim позволява да бъдат отменяни (в обратен на извършването им ред) неограничено
много потребителски действия (undo), като и те да бъдат повторно извършени
(redo).

Търсенето със замяна на съответния текст, когато се прилага многократно, може да
става наведнъж за всички съответствия или стъпка по стъпка, с потвърждение или
отхвърляне от потребителя на всяка замяна поотделно.

За всеки файл, с който работи, Vim създава екземпляр за възстановяване след
авария: спиране на ток, „забиване на системата“ и т.н.  Ако се случи подобно
нещо, всичко или почти всичко свършено може да се възстанови чрез аварийния
екземпляр (Vim сам предлага това), а ако не, в края на работата с дадения файл
аварийното му копие тихомълком се унищожава.

Когато даден файл бъде пораждан или обработван с друга програма, докато бива
редактиран и с Vim, последният предлага обновяване (изчитане наново) при всяка
външна спрямо редактора промяна на файла.

Съществуват и са лесно достъпни разнообразни по вид и форма източници на знание
за Vim (и изобщо vi): учебници, ръководства, справочници.  Изчерпателна
документация за Vim е на разположение заедно със самата програма, във вид на
хипертекстов справочник.

Vim се използва и развива от голямо количество хора.  Това помага той постоянно
да се усъвършенства.  Съществува и постоянно се обогатява хранилище на приставки
и други приложни програми за Vim, свободно достъпно като самата програма.