<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-2623496709141658829</atom:id><lastBuildDate>Thu, 06 Nov 2025 10:22:45 +0000</lastBuildDate><category>программирование</category><category>python</category><category>vim</category><category>инструменты</category><category>java</category><category>C++</category><category>SNMP</category><category>SNMPScanner</category><category>android</category><category>esp8266</category><category>smartq zwatch</category><category>декораторы</category><category>дескрипторы</category><category>метаклассы</category><title>lazy cleric</title><description>Programmer blog</description><link>http://lazycleric.blogspot.com/</link><managingEditor>noreply@blogger.com (clericJ)</managingEditor><generator>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-8863697296355084470</guid><pubDate>Tue, 26 Jan 2021 06:50:00 +0000</pubDate><atom:updated>2021-02-17T18:49:26.839+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">C++</category><category domain="http://www.blogger.com/atom/ns#">esp8266</category><category domain="http://www.blogger.com/atom/ns#">инструменты</category><category domain="http://www.blogger.com/atom/ns#">программирование</category><title>Прозрачный настраиваемый мост wifi-uart на esp8266, со встроенным эмулятором терминала</title><description>&lt;h2&gt;Предисловие&lt;/h2&gt;
В бытность мою инженером связи, мне часто приходилось настраивать  различное оборудование. Зоопарк из коммутаторов различных производителей, телефонные станции и прочее. Первоначальную настройку на коммутаторах удобнее делать подключившись через rs232, шнурком с преобразователем COM-USB к ноутбуку. Однако этот кабель не всегда удобен. &lt;cut&gt;Бывали ситуации когда ты в подвале (шкафы  с оборудованием, в сетях ДРС которые я обслуживал, находились именно там), пытаешься стоя одной рукой держать ноутбук, а другой печатать, а  короткий кабель соединённый с коммутатором не способствует удобству. Или зимой в минус 25 приходилось стоять возле базовой станции с ноутбуком в такой же позе. Вместо того чтобы сидеть в тёплой машине, припаркованной в 20 метрах. Предвидя упрёки в комментариях, о том что оборудование настраивать надо уделёно, скажу что эти случаи были аварийными (оборудование не в доступе) и оптимально было действовать именно так (сроки устранения повреждений не резиновые).
  &lt;br&gt;
&lt;img src=&quot;https://pic.mysku-st.ru/uploads/pictures/04/89/80/2020/08/24/c644dd.jpg&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot;
 alt=&quot;&quot; rel=&quot;lbox&quot; /&gt;
  &lt;br&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
В общем тогда я прямо таки мечтал о беспроводном удлинителе 232-ого интерфейса. И на то время у китайцев существовали такие приблуды. Но, во первых дорого, во вторых громоздко и не автономно (был отдельный БП на 9-12В). 
И вот прошли годы, я работаю в другой области и с оборудованием связи имею мало общего. Но иногда с настройкой коммутаторов всё-же приходится сталкиваться. Тут заходя в очередной раз на mysku.ru вижу акцию на отладочную плату TTGO T-OI с микроконтроллером esp8266 &lt;a href=&quot;https://mysku.ru/blog/discounts/79727.html&quot;&gt;за 1 доллар&lt;/a&gt;. Заказав такую халяву, я начал думать что бы с ней такого полезного сделать. Собирать очередную метеостанцию не особо хотелось. И тут мне вспомнилась идея беспроводного преобразователя, хотя сейчас полно аналогичных решений и алишке, и даже есть такие вещи как Air Console с впечатляющим функционалом и не менее впечатляющей ценой. 
Но было интересно реализовать самому, попрактиковаться, так сказать, ведь такое хобби приносит море удовольствия.

&lt;h2&gt;Аппаратная часть&lt;/h2&gt;
Краткие характеристики модуля TTGO T-OI со страницы продавца: 
&lt;pre class=&quot;literal-block&quot;&gt;
Спецификации оборудования 

Чипсет:                 ESP8266EX
Флэш-память:            4 Мб 
Размер:                 43,96x25,63x20,80 мм
Вес:                    7,87 г.
Питание:                MicroUSB 5V/Батарея 16340 3,7V
Органы управления:      Кнопка reset, переключатель питания
Разьемы:                Micro USB, Grove, IPEX(внешняя антенна)
&lt;/pre&gt;
Живые фото:
&lt;img src=&quot;https://pic.mysku-st.ru/uploads/pictures/04/89/80/2020/08/26/e78a9d.jpg&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot;
 alt=&quot;&quot; rel=&quot;lbox&quot; /&gt;
&lt;img src=&quot;https://pic.mysku-st.ru/uploads/pictures/04/89/80/2020/08/26/8081b7.jpg&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot;
 alt=&quot;&quot; rel=&quot;lbox&quot; /&gt;
Распиновка модуля:
&lt;img src=&quot;https://pic.mysku-st.ru/uploads/pictures/04/89/80/2020/08/26/a6e7c6.png&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot;
 alt=&quot;&quot; rel=&quot;lbox&quot; /&gt;
&lt;br&gt;
Данный модуль привлекателен тем что в нём встроена зарядка для лития и держатель для  аккумуляторов формата 18340. Что без лишних телодвижений делает устройство автономным. Для включения отладочной платы служит переключатель в правом нижнем углу. Еще одним достоинством является совместимость по пинам с Wemos D1 Mini, что даёт возможность подключать к TTGO все шилды от Mini.
Этим я и решил воспользоваться, накидав в Easy EDA шилд, преобразовывающий uart в rs232:
&lt;img src=&quot;https://pic.mysku-st.ru/uploads/pictures/04/89/80/2020/08/16/886d43.png&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot;
 alt=&quot;&quot; rel=&quot;lbox&quot; /&gt;
&lt;br&gt;
Так-как напряжение логических уровней на esp8266 3.3В, то в качестве преобразователя в/из интерфейса rs232, в место традиционного MAX232 использовал  микросхему MAX3232 в корпусе SOIC-16, которая как раз работает с этим напряжением. Далее, мне понадобилось 5 конденсаторов на 100 нанофарад и резистор на 1 килоОм со светодиодом. Всё в SMD исполнении, типоразмера 0805. Еще понадобится разъем DRB- 9MA.
&lt;br&gt;
Компоненты списком:
&lt;br&gt;
&lt;img src=&quot;https://pic.mysku-st.ru/uploads/pictures/04/89/80/2020/08/24/b3c1e8.png&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot;
 alt=&quot;&quot; rel=&quot;lbox&quot; /&gt;

С ЛУТом возиться не хотелось, поэтому заказал её изготавливание в Китае.
Шилд занимает GPIO13, GPIO15 пины, для работы с uart&#39;ом. Отладочная информация, сыпется в GPIO2. Особенностью esp8266 является то что она позволяет переназначать аппаратный uart с ножек GPIO1 и GPIO3 на GPIO15 (TX) и GPIO13 (RX), вызовом метода Serial.swap(). Преимуществом такого трюка является то, что подключение не мешает перепрошивке модуля, а так-же в порт не сыпется отладочный мусор. Однако я оставил возможность назначить стандартные GPIO для uart. Для этого необходимо перерезать старые дорожки и напаять перемычки на TX и RX на нижней стороне платы.
Фото шилда, собранного &quot;будерброда&quot;:
&lt;br&gt;
&lt;img src=&quot;https://pic.mysku-st.ru/uploads/pictures/04/89/80/2020/08/26/b6f1f2.jpg&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot;
 alt=&quot;&quot; rel=&quot;lbox&quot; /&gt;
&lt;img src=&quot;https://pic.mysku-st.ru/uploads/pictures/04/89/80/2020/08/26/a48cb3.jpg&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot;
 alt=&quot;&quot; rel=&quot;lbox&quot; /&gt;
&lt;img src=&quot;https://pic.mysku-st.ru/uploads/pictures/04/89/80/2020/08/26/ac25dd.jpg&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot;
 alt=&quot;&quot; rel=&quot;lbox&quot; /&gt;
&lt;br&gt;
&lt;h2&gt;Программная часть&lt;/h2&gt;
Я начал с изучения того что уже написано в данной области. Оказывается в пакете поставки с esp для Ардуино уже лежит пример кода для соединения устройства и хоста, (например телефона или ноутбука) через wifi по telnet. Пример так и называется WiFiTelnetToSerial.
Взяв его за основу, я написал веб-интерфейс для настройки соединения и точки доступа. С сохранением настроек в во флеш-память. А так-же воспользовавшись библиотекой  &lt;a href=&quot;https://terminal.jcubic.pl/&quot;&gt;jQuery Terminal&lt;/a&gt;, реализовал эмулятор терминала, прямо в браузере. Общение web-терминала с преобразователем происходит через web-sockets. 
Сам код можно скачать на гитхабе, ссылки будут к конце статьи.
Писался он с помощью &lt;a href=&quot;https://platformio.org/&quot;&gt;PlatformIO &lt;/a&gt;. 
При компиляции нужно учитывать тот момент что для взаимодействия с файловой системой esp8266, я воспользовался библиотекой LittleFS в место привычной многим SPIFFS. Дело в том что SPIFFS признана устаревшей и рекомендуется переходить на LittleFS. В связи с этим у меня возникли некоторые проблемы с библиотекой FTP, пришлось пройтись по её исходникам и переписать все вызовы с  SPIFFS на  LittleFS. У обоих библиотек практически совместимый API, так что такой простой заменой всё и решилось.

При подаче питания esp создаёт точку доступа WirelessTerminal с паролем 123456789. 
Так-же запускаются web-сервер на 80 порту. И ftp-сервер на 21 (нужен для доступа к флеш памяти контроллера, в основном для отладки).
При заходе на ip-адрес 192.168.4.1 (по умолчанию) через браузер, появляется страница настроек:
&lt;br&gt;
&lt;img src=&quot;https://pic.mysku-st.ru/uploads/pictures/04/89/80/2020/08/16/7a928c.png&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot;
 alt=&quot;&quot; rel=&quot;lbox&quot; /&gt;
&lt;br&gt;
Тут возможно настроить параметры соединения, и точки доступа.
Для того чтобы подключится к устройству по 232 интерфейсу подойдёт любой эмулятор терминала (я по старинке пользуюсь HyperTerminal), либо воспользоваться web консолью, нажав на кнопку RUN TERMINAL в главном окне.
&lt;p&gt;
&lt;img src=&quot;https://pic.mysku-st.ru/uploads/pictures/04/89/80/2020/08/16/4fa69a.png&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot;
 alt=&quot;&quot; rel=&quot;lbox&quot; /&gt;
&lt;br&gt;
&lt;i&gt;Примеры сессий&lt;/i&gt;
&lt;p&gt;

Для телефонов на андроид подойдёт бесплатный Serial WiFi Terminal из Google Market. Так-же оставлю несколько скриншотов того как выглядит интерфейс на телефоне:
&lt;img src=&quot;https://pic.mysku-st.ru/uploads/pictures/04/89/80/2020/08/16/0b1a95.png&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot;
 alt=&quot;&quot; rel=&quot;lbox&quot; /&gt;
&lt;br&gt;
&lt;h2&gt;Выводы&lt;/h2&gt;
По моему мнению получилась хорошая тренировка для мозгов, а как-же полезная в хозяйстве сисадмина/инженера устройство, для желающих повторить оставляю ссылки на исходники:
&lt;br&gt;
Проект шилда в easyeda: &lt;a href=&quot;https://easyeda.com/clericJ/wemos-d1mini-rs232shield&quot;&gt;https://easyeda.com/clericJ/wemos-d1mini-rs232shield&lt;/a&gt;&lt;br&gt;
Программная часть: &lt;a href=&quot;https://github.com/clericJ/wifi-terminal&quot;&gt;https://github.com/clericJ/wifi-terminal&lt;/a&gt;&lt;br&gt;
</description><link>http://lazycleric.blogspot.com/2021/01/wifi-uart-esp8266.html</link><author>noreply@blogger.com (clericJ)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-4409572140372849195</guid><pubDate>Tue, 26 Jan 2021 06:36:00 +0000</pubDate><atom:updated>2021-01-26T09:58:04.703+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">vim</category><category domain="http://www.blogger.com/atom/ns#">инструменты</category><title>Полезные плагины для Vim -  взгляд из прошлого</title><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt; Как-то давным давно, я писал небольшие заметки о полезных плагинах для vim, для ныне почившего сайта. И вот недавно я наткнулся на эти статьи и решил их выложить.
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi7U2UkNlmEebzBtpH96Y2PTEZy11ys2d5ae4IzQUbthyp2QIsa7nVeFvRU0-RDsg6f0hceT8dXkgulZ7y8HySN2aFo9vAwQBCHmPLZnBYrBMN6y_0NS951lQizj92evLB96t2vNh9ByQw/s750/vim-pathogens-750x519.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;400&quot; data-original-height=&quot;519&quot; data-original-width=&quot;750&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi7U2UkNlmEebzBtpH96Y2PTEZy11ys2d5ae4IzQUbthyp2QIsa7nVeFvRU0-RDsg6f0hceT8dXkgulZ7y8HySN2aFo9vAwQBCHmPLZnBYrBMN6y_0NS951lQizj92evLB96t2vNh9ByQw/s400/vim-pathogens-750x519.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
&lt;br&gt;&lt;br&gt;
&lt;div class=&quot;document&quot; id=&quot;vim-template&quot;&gt;
&lt;h1 class=&quot;title&quot;&gt;vim-template - Шаблоны для различных типов файлов&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Язык написания плагина&lt;/strong&gt;: VimL&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Зависимости&lt;/strong&gt;: нет&lt;/p&gt;
&lt;p&gt;Сегодня мы рассмотрим плагин добавляющий в vim шаблоны для типов файлов. Но
сначала поговорим для чего нам всё это нужно. Во первых вас не утомляет писать
по сути один и тот же код например при создании заголовочного (.h) файла? Писать
include guards? Или другой пример, вы создаёте html страницу в vim,
ищите откуда скопипастить начальную структуру документа (все эти html, head, body...)
Не совсем удобно, правда? В любой IDE или маломальски приличном текстовом
редакторе заготовки для различных типов файлом обычно идут из коробки
стоит только перейти в меню &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;File-&amp;gt;New...&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;В vim так-же достаточно методов добавления вышеописанного функционала, начиная
с abbreviations, заканчивая самописными функциями, стартующими при событии создания
файла.&lt;/p&gt;
&lt;p&gt;Однако для меня оказалось удобнее использовать плагин vim-template.
Преимущества:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;простой&lt;/li&gt;
&lt;li&gt;легко расширяем&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;А теперь подробнее об использовании.
После установки плагина, в директории &lt;tt class=&quot;docutils literal&quot;&gt;$VIMRUNTIME&lt;/tt&gt; создаём папку template, в
ней и будут хранится наши заготовки для файлов.
Вот структура моей директории template:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
template:
|   template.c
|   template.cmd
|   template.cpp
|   template.h
|   template.htm
|   template.html
|   template.py
|   template.vnote
|   text.rst
|
+---plugin
|       template.vim
|
\---win32
        template.cpp
&lt;/pre&gt;
&lt;p&gt;Для того чтобы плагин смог найти определённый темплейт, файлы должны называться
template.*&lt;/p&gt;
&lt;p&gt;Для тех кому мало
просто кусков кода, автор приготовил удобный способ обработки темплейта
перед тем как он будет загружен в файл. Например таким образом можно добавить
в темплейт переменные, раскрываемые во время загрузки.&lt;/p&gt;
&lt;p&gt;С помощью события &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;plugin-template-loaded&lt;/span&gt;&lt;/tt&gt; плагин даёт нам понять, что пора
раскрыть переменные находящаяся в темплейте, небольшой пример из моего vimrc:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
augroup template-plugin
    autocmd User plugin-template-loaded call s:template_keywords()
augroup END

function! s:template_keywords()
    if search(&#39;&amp;lt;+FILE_NAME+&amp;gt;&#39;)
        silent %s/&amp;lt;+FILE_NAME+&amp;gt;/\=toupper(expand(&#39;%:t:r&#39;))/g
    endif
    if search(&#39;&amp;lt;+CURSOR+&amp;gt;&#39;)
        execute &#39;normal! &amp;quot;_da&amp;gt;&#39;
    endif
    silent %s/&amp;lt;+DATE+&amp;gt;/\=strftime(&#39;%Y-%m-%d&#39;)/g
endfunction
&lt;/pre&gt;
&lt;p&gt;В функции &lt;tt class=&quot;docutils literal&quot;&gt;s:template_keywords()&lt;/tt&gt; мы определяем три переменные, думаю
знатокам vim этот код предельно понятен, поэтому не буду останавливаться на нём
подробнее.
Вот таким нехитрым способом вы можете добавить свои переменные, а затем использовать
их в шаблоне.&lt;/p&gt;
&lt;p&gt;Так-как в вашей папке на данный момент пусто, пора добавить туда первую заготовку
например для заголовочного файла языка C++:&lt;/p&gt;
&lt;p&gt;&lt;tt class=&quot;docutils literal&quot;&gt;template.h&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
// created: &amp;lt;+DATE+&amp;gt;
#ifndef &amp;lt;+FILE_NAME+&amp;gt;_H_INCLUDED
#define &amp;lt;+FILE_NAME+&amp;gt;_H_INCLUDED

&amp;lt;+CURSOR+&amp;gt;

#endif // &amp;lt;+FILE_NAME+&amp;gt;_H_INCLUDED
&lt;/pre&gt;
&lt;p&gt;Теперь, при открытии пустого .h файла, или создании через vim, командой &lt;tt class=&quot;docutils literal&quot;&gt;:new&lt;/tt&gt;, наш шаблон
раскроется в такой код (для example.h):&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
// created: 2012-09-02
#ifndef EXAMPLE_H_INCLUDED
#define EXAMPLE_H_INCLUDED


#endif // EXAMPLE_H_INCLUDED
&lt;/pre&gt;
&lt;div class=&quot;section&quot; id=&quot;id1&quot;&gt;
&lt;h1&gt;См. Также:&lt;/h1&gt;
&lt;p&gt;Справочный файл: &lt;tt class=&quot;docutils literal&quot;&gt;:help template&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;Страница плагина на vim.org: &lt;a class=&quot;reference external&quot; href=&quot;http://www.vim.org/scripts/script.php?script_id=2834&quot;&gt;http://www.vim.org/scripts/script.php?script_id=2834&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Git-репозитарий: &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/thinca/vim-template.git&quot;&gt;https://github.com/thinca/vim-template.git&lt;/a&gt;&lt;/p&gt;
&lt;!-- vim: spell nowrap --&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class=&quot;document&quot; id=&quot;ctrlp&quot;&gt;
&lt;h1 class=&quot;title&quot;&gt;CtrlP - нечёткий поиск по файлам, буферам, тегам, ...&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Язык написания плагина&lt;/strong&gt;: VimL&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Зависимости&lt;/strong&gt;: нет&lt;/p&gt;
&lt;p&gt;Для vim существует огромное количество плагинов, как полезных так и не особо нужных. Но среди них есть и те, после использования которых, вы восклицаете - как я раньше жил без этого!
Сегодня я познакомлю вас с одним из них, встречайте - &lt;tt class=&quot;docutils literal&quot;&gt;CtrlP&lt;/tt&gt;. Цель этого плагина сделать максимально удобным и быстрым поиск файлам, буферам, тегам, и т.д.&lt;/p&gt;
&lt;p&gt;Основные возможности плагина:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Поиск по мере набора&lt;/li&gt;
&lt;li&gt;Используется &amp;quot;нечёткий поиск&amp;quot; что позволяет найти цель вводом всего пары символов&lt;/li&gt;
&lt;li&gt;Написан на чистом VimScript, одинаково хорошо работает для MacVim, gVim и Vim 7.0+&lt;/li&gt;
&lt;li&gt;Полная поддержка регулярных выражений vim&lt;/li&gt;
&lt;li&gt;Поддержка поиска по недавно открытым файлам (MRU) и по открытым буферам&lt;/li&gt;
&lt;li&gt;Расширения, благодаря которым искать можно не только по файлам, но например, по тегам генерируемым ctags&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Для начала немного о &amp;quot;нечётком поиске&amp;quot;, предположим у нас есть директория вида:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
kraken
|   buidldoc.cmd
|   kraken.py
|   readme.htm
|   readme.rst
|   tags
|   test.py
|
\---kraken_handlers
    |   base.py
    |   pdb_postmortem_loader.py
    |   pyqt4_error_reporter.py
    |   save_crash_info.py
    |   __init__.py
&lt;/pre&gt;
&lt;p&gt;Для того чтобы открыть файл &lt;tt class=&quot;docutils literal&quot;&gt;__init__.py&lt;/tt&gt; в vim, вам придётся прописывать его полный путь: &lt;tt class=&quot;docutils literal&quot;&gt;:o kraken/kraken_handlers/__init__.py&lt;/tt&gt; это долго и утомительно. С помощью нечёткого поиска это делается вводом всего лишь части названия файла, например &lt;tt class=&quot;docutils literal&quot;&gt;__&lt;/tt&gt; однозначно найдёт совпадение с файлом. Удобно так-же то, что по мере набора вы сразу видите результат.&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_C44On4CkpWGVyXgi0e-vN1nOjSke5Uk9B9OjgDVusVkoA1D1rKd7yIV9bHfLHZrDU3hUQo47HdJ5R_itxRTcJmMz7u1tBDUV-d-DG-M8MwrmpJtAYerdmk6wtLe27_pt_m7I-lDivCSM/s719/screen-01.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;113&quot; data-original-width=&quot;719&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_C44On4CkpWGVyXgi0e-vN1nOjSke5Uk9B9OjgDVusVkoA1D1rKd7yIV9bHfLHZrDU3hUQo47HdJ5R_itxRTcJmMz7u1tBDUV-d-DG-M8MwrmpJtAYerdmk6wtLe27_pt_m7I-lDivCSM/s600/screen-01.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Такой-же трюк можно проделывать и с директориями:&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIqK4PCIE7kWQKZfGnueePRJ_1RPb9IxI8EWKYKNhnehNPa-mhBPh1ZMJflwvXixGSDPtASqGi_D-MvHMeqG_LnCGUo16fTOAI9p0p_5nQXm9iutrfXeICB4C1ZBbEikNo-dZNd-m_qVJp/s719/screen-02.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;111&quot; data-original-width=&quot;719&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIqK4PCIE7kWQKZfGnueePRJ_1RPb9IxI8EWKYKNhnehNPa-mhBPh1ZMJflwvXixGSDPtASqGi_D-MvHMeqG_LnCGUo16fTOAI9p0p_5nQXm9iutrfXeICB4C1ZBbEikNo-dZNd-m_qVJp/s600/screen-02.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Используйте &amp;lt;c-p&amp;gt; или ``:CtrlP`` для вызова плагина&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Это на самом деле очень удобно, думаю, мне не нужно будет вас убеждать, если вы пользовались данным функционалом в других приложениях, например в редакторе Sublime Text 2 эта возможность считается одной из ключевых.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Совет:&lt;/em&gt; для того чтобы после открытия файла, сразу перейти к нужному номеру строки введите :&amp;lt;номер строки&amp;gt; после имени, пример: &lt;tt class=&quot;docutils literal&quot;&gt;&amp;gt;&amp;gt;__i:10&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;Плагин &lt;tt class=&quot;docutils literal&quot;&gt;CtrlP&lt;/tt&gt; не ограничивается поиском только по файловой системе, с помощью команд &lt;tt class=&quot;docutils literal&quot;&gt;:CtrlPBuffer&lt;/tt&gt; и &lt;tt class=&quot;docutils literal&quot;&gt;:CtrlPMRU&lt;/tt&gt; он позволяет искать по открытым буферам и недавно закрытым файлам соответственно. Но это ещё не всё, с помощью расширений плагина, он даёт возможность поиска по тегам, директориям, истории изменений и много чему еще, но об этом мы поговорим позже.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;id1&quot;&gt;
&lt;h1&gt;Сравнение с аналогами&lt;/h1&gt;
&lt;p&gt;Помимо рассматриваемого, для vim существует еще, по крайней мере два плагина с похожим функционалом это command-t и FuzzyFinder.
И последним из них, я достаточно долго пользовался, пока не узнал о CtrlP.
Причиной перехода стало то что FuzzyFinder давно не обновлялся и скорее всего, заброшен автором.&lt;/p&gt;
&lt;p&gt;Command-t вдохновлялся TextMate, его авторы хвалятся скоростью работы плагина. Благодаря использованию Ruby и C-extensions к нему. Сам я этот плагин не ставил. Из-за вышеописанных зависимостей (для меня важна портабельность). Возможно, Ruby-программистам Command-t подойдёт больше.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;id2&quot;&gt;
&lt;h1&gt;Расширения&lt;/h1&gt;
&lt;p&gt;С помощью команд-расширений плагин позволяет искать:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&lt;tt class=&quot;docutils literal&quot;&gt;CtrlPTag&lt;/tt&gt; - по тегам, сгенерированным ctags&lt;/li&gt;
&lt;li&gt;&lt;tt class=&quot;docutils literal&quot;&gt;CtrlPBufTag&lt;/tt&gt; - тегам внутри буфера&lt;/li&gt;
&lt;li&gt;&lt;tt class=&quot;docutils literal&quot;&gt;CtrlPQuickfix&lt;/tt&gt; - буферу qucckfix&lt;/li&gt;
&lt;li&gt;&lt;tt class=&quot;docutils literal&quot;&gt;CtrlPDir&lt;/tt&gt; - директориям&lt;/li&gt;
&lt;li&gt;&lt;tt class=&quot;docutils literal&quot;&gt;CtrlPRTS&lt;/tt&gt; - файлам в runtime vim (vim-скрипты, файлы справки, снипеты)&lt;/li&gt;
&lt;li&gt;&lt;tt class=&quot;docutils literal&quot;&gt;CtrlPUndo&lt;/tt&gt; - истории отмен (Undo history)&lt;/li&gt;
&lt;li&gt;&lt;tt class=&quot;docutils literal&quot;&gt;CtrlPLine&lt;/tt&gt; - номерам строк файла&lt;/li&gt;
&lt;li&gt;&lt;tt class=&quot;docutils literal&quot;&gt;CtrlPChange&lt;/tt&gt; - списку последних изменений файла&lt;/li&gt;
&lt;li&gt;&lt;tt class=&quot;docutils literal&quot;&gt;CtrlPMixed&lt;/tt&gt; - сразу по файлам, буферам и списку последних открытых файлов&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Более подробно обо всех командах вы можете узнать из справочного файла плагина.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Включить расширения можно, перечислив их в переменной &lt;tt class=&quot;docutils literal&quot;&gt;g:ctrlp_extensions&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
let g:ctrlp_extensions = [&#39;tag&#39;, &#39;buffertag&#39;, &#39;quickfix&#39;, &#39;dir&#39;, &#39;rtscript&#39;,
                        \ &#39;undo&#39;, &#39;line&#39;, &#39;changes&#39;, &#39;mixed&#39;, &#39;bookmarkdir&#39;]
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;id3&quot;&gt;
&lt;h1&gt;См. Также:&lt;/h1&gt;
&lt;p&gt;Справочный файл: &lt;tt class=&quot;docutils literal&quot;&gt;:h CtrlP&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;Страница на vim.org: &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/kien/ctrlp.vim.git&quot;&gt;https://github.com/kien/ctrlp.vim.git&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Домашняя страница плагина: &lt;a class=&quot;reference external&quot; href=&quot;http://kien.github.com/ctrlp.vim/&quot;&gt;http://kien.github.com/ctrlp.vim/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Git-репозитарий:&lt;/p&gt;
&lt;!-- vim: spell nowrap --&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class=&quot;document&quot; id=&quot;fencview&quot;&gt;
&lt;h1 class=&quot;title&quot;&gt;FencView - открыть файл в нужной кодировке, легко!&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Язык написания плагина&lt;/strong&gt;: VimL&lt;/p&gt;
&lt;p&gt;При работе в разных операционных системах и окружениях, возникает необходимость
открывать файлы в различных кодикорвах (например cp1251 для Windows). Для задания
кодировки файла в Vim существует команда &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;fileencoding={enc}&lt;/span&gt;&lt;/tt&gt;. Однако не всегда мы
знаем исходную кодировку файла. В таком случае бывает удобнее попробовать несколько
вероятных кандидатов из списка.&lt;/p&gt;
&lt;p&gt;Планин fencview предоставляет нам эту возможность, добавляя в меню GVim пункт
Tools-&amp;gt;Encoding&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9o6GO7XhOrTq5mQMONuGCoGhuTdtGOG8WYDDM8rxVy0yAqMWDvB0UVmnwXYcj-iNQqsvsfRq5f7BPxgiMS575UDSmvJspUFXdt7zPULBwx7zyQtMXgkqAbLg2jBfKiyMa0fGt9anIu_L4/s0/screen-01.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;472&quot; data-original-width=&quot;602&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9o6GO7XhOrTq5mQMONuGCoGhuTdtGOG8WYDDM8rxVy0yAqMWDvB0UVmnwXYcj-iNQqsvsfRq5f7BPxgiMS575UDSmvJspUFXdt7zPULBwx7zyQtMXgkqAbLg2jBfKiyMa0fGt9anIu_L4/s0/screen-01.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Если-же вы пользуетесь консольной версией, то введите команду FencView&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO62B_p4meYi4YDtGq6gBwjoM8IvS2LBpsI3Katnd5dXtQjcVftd-NM_1wPwwdzEuMo-mg6vkXW31srZ-Rr-dCOM43k9U7N1fqakkETkK0QVoqisWJvpIx9QqoWO3nwBmdf2i_l_lWV3V5/s729/screen-02.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;476&quot; data-original-width=&quot;729&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO62B_p4meYi4YDtGq6gBwjoM8IvS2LBpsI3Katnd5dXtQjcVftd-NM_1wPwwdzEuMo-mg6vkXW31srZ-Rr-dCOM43k9U7N1fqakkETkK0QVoqisWJvpIx9QqoWO3nwBmdf2i_l_lWV3V5/s600/screen-02.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Команда &lt;tt class=&quot;docutils literal&quot;&gt;FencAutoDetect&lt;/tt&gt; пробует определить кодировку файла самостоятельно.
К сожалению она заточена на определение языков восточной письменности
(Chinese Simplified, Chinese Traditional, Japanese, Korean) и в наших краях
не сильно полезна.
По этой причине я бы советовал отключить автоопределение кодировки при открытии
файла, опцией:&lt;/p&gt;
&lt;p&gt;&lt;tt class=&quot;docutils literal&quot;&gt;g:fencview_autodetect = 0&lt;/tt&gt;&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;id1&quot;&gt;
&lt;h1&gt;Зависимости&lt;/h1&gt;
&lt;p&gt;Плагин требует опцию &lt;tt class=&quot;docutils literal&quot;&gt;+iconv&lt;/tt&gt; для своей работы (проверить можно так
&lt;tt class=&quot;docutils literal&quot;&gt;:echo &lt;span class=&quot;pre&quot;&gt;has(&#39;iconv&#39;))&lt;/span&gt;&lt;/tt&gt;, а так-же библиотеку &lt;tt class=&quot;docutils literal&quot;&gt;iconv.dll&lt;/tt&gt;
(если вы работаете в Windows), расположенную в %PATH% или рядом
с исполняемым файлом Vim, как у меня.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Совет: с помощью встроенной опции Vim - fileencodings вы можете задать список
кодировок, с помощью которых Vim будет пробовать открыть файл
пример:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;tt class=&quot;docutils literal&quot;&gt;set &lt;span class=&quot;pre&quot;&gt;fileencodings=ucs-bom,utf-8,cp1251&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;так-же для задания кодировки файлов по умолчанию используется опция fileencoding
пример:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;tt class=&quot;docutils literal&quot;&gt;set &lt;span class=&quot;pre&quot;&gt;fileencoding=utf-8&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;id2&quot;&gt;
&lt;h1&gt;См. Также:&lt;/h1&gt;
&lt;p&gt;Страница плагина на vim.org: &lt;a class=&quot;reference external&quot; href=&quot;http://www.vim.org/scripts/script.php?script_id=1708&quot;&gt;http://www.vim.org/scripts/script.php?script_id=1708&lt;/a&gt;&lt;/p&gt;
&lt;!-- vim: spell nowrap --&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class=&quot;document&quot; id=&quot;pyflakes-python&quot;&gt;
&lt;h1 class=&quot;title&quot;&gt;pyflakes - подсветка ошибок в коде python на лету&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Язык написания плагина&lt;/strong&gt;: VimL, python&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Зависимости&lt;/strong&gt;: +python&lt;/p&gt;
&lt;p&gt;Часто ли вы делаете опечатки? Вот я частенько, бывает, даже когда я пишу в код.
Это не так страшно, если вы пишете на языках со статической типизацией, например на
C++ или Java, компилятор просто тыкает вас в место ошибки, при несоответствии типов или
забытом параметре функции.
А как быть при работе с интерпретируемыми ЯП?&lt;/p&gt;
&lt;p&gt;Я много кода пишу на python и уже не представляю себе жизни без подсветки ошибок
в редакторе на лету. В vim эту функцию выполняет плагин pyflakes-vim, основанный
на утилите для проверки ошибок
.. _pyflakes: &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/kevinw/pyflakes&quot;&gt;https://github.com/kevinw/pyflakes&lt;/a&gt;
Вся прелесть этой утилиты в том, что она не просто выявляет синтаксические ошибки,
которые и так можно посмотреть, запустив скрипт. Но и показывает:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;неиспользуемые импорты и переменные&lt;/li&gt;
&lt;li&gt;использование переменной до её определения&lt;/li&gt;
&lt;li&gt;переопределение функции/метода в локальной области видимости&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVgXtEtHhImkbCJ29cOmtaJhzgcoKZ10juLV18zTWP3qAh3cKxWwZWAdhOAXMqkOzf2UegfSQtT2XJJ1ie6L4x2H2RNXUlGwj6Gj99LOsnpHU17jq0eZVYGyjc_q-Y-guneY0OZEMggQLU/s0/screen-01.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;427&quot; data-original-width=&quot;560&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVgXtEtHhImkbCJ29cOmtaJhzgcoKZ10juLV18zTWP3qAh3cKxWwZWAdhOAXMqkOzf2UegfSQtT2XJJ1ie6L4x2H2RNXUlGwj6Gj99LOsnpHU17jq0eZVYGyjc_q-Y-guneY0OZEMggQLU/s0/screen-01.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Совет: Все найденные ошибки так-же отображаются в стандартном окне quickfix.
Открыть которое можно командой ``:cwin``.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;pyflakes-vs-syntastic&quot;&gt;
&lt;h1&gt;pyflakes vs Syntastic&lt;/h1&gt;
&lt;p&gt;Хотя сам автор плагина пишет что он deprecated и рекомендует переходить
всем на
.. _Syntastic: &lt;a class=&quot;reference external&quot; href=&quot;http://www.vim.org/scripts/script.php?script_id=2736&quot;&gt;http://www.vim.org/scripts/script.php?script_id=2736&lt;/a&gt;
, так-как в этот плагин подсвечивает, в том числе и ошибки python&#39;а.
Я досих пор пользуюсь именно pyflakes-vim для python, просто потому что он для меня
более удобен:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Подсвечивает ошибки сразу, а не при сохранении как Syntastic.&lt;/li&gt;
&lt;li&gt;Сама подсветка реализована более правильно, вместо sings используется подсветка а-ля spellcheck.&lt;/li&gt;
&lt;li&gt;Портабельность, всё необходимое для работы плагина лежит в его директории (кроме интерпретатора python разумеется)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Однако для других языков я использую Syntastic, в виду того что он поддерживает
большое количество ЯП.&lt;/p&gt;
&lt;p&gt;Для тех кому интересен Sytastic: &lt;a class=&quot;reference external&quot; href=&quot;http://habrahabr.ru/post/108564/&quot;&gt;http://habrahabr.ru/post/108564/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Замечание: плагин не поддерживает python 3+&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;id1&quot;&gt;
&lt;h1&gt;См. Также:&lt;/h1&gt;
&lt;p&gt;Страница на vim.org: &lt;a class=&quot;reference external&quot; href=&quot;http://www.vim.org/scripts/script.php?script_id=2441&quot;&gt;http://www.vim.org/scripts/script.php?script_id=2441&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Git-репозитарий: &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/kevinw/pyflakes-vim.git&quot;&gt;https://github.com/kevinw/pyflakes-vim.git&lt;/a&gt;&lt;/p&gt;
&lt;!-- vim: spell nowrap --&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class=&quot;document&quot; id=&quot;tagbar&quot;&gt;
&lt;h1 class=&quot;title&quot;&gt;tagbar - удобная навигация по всем функциям и классам&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Язык написания плагина&lt;/strong&gt;: VimL&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Зависимости&lt;/strong&gt;: ctags&lt;/p&gt;
&lt;p&gt;Думаю, ни для кого не будет секретом, что когда кода становится много, искать что-либо в нём бывает затруднительно. Продвинутые редакторы кода и интегрированные среды разработки научились решать эту проблему с помощью так называемых outline`ов. Данный функционал представляет собой окно, со списком всех сущностей в коде (макросов, классов, функции и тд). Что позволяет сразу перейти к определению кликнув на нужный элемент.&lt;/p&gt;
&lt;p&gt;В vim с давних пор для этого использовался плагин taglist, формировавший outline окно с помощью внешней утилиты ctags. Большим недостатком этого плагина было то что он структурировал сущности в виде списка, в то время как более привычным и наглядным является древовидное представление.&lt;/p&gt;
&lt;p&gt;Какое то время назад мне на глаза попался плагин исправляющий недостатки taglist, имя ему tagbar:&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv3opV_5dYCLryJLL4zy6ul4ei_1p2lK2ewteCRjsTDoR7sCIXx6fkGjMsxU16HX_7ge7MjvG5FLdQIY60oOF60u1hVwp4NIV5nnzwJW9jaltEtPLkylsxI2tGLUzPiZgj0DIdHqjYN5jX/s934/screen01.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;656&quot; data-original-width=&quot;934&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv3opV_5dYCLryJLL4zy6ul4ei_1p2lK2ewteCRjsTDoR7sCIXx6fkGjMsxU16HX_7ge7MjvG5FLdQIY60oOF60u1hVwp4NIV5nnzwJW9jaltEtPLkylsxI2tGLUzPiZgj0DIdHqjYN5jX/s600/screen01.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Плагин отлично выполняет свою основную задачу, наглядно показывая сущности в коде. Так-же как и taglist, плагин использует утилиту ctags для получения информации из кода.&lt;/p&gt;
&lt;p&gt;В завершение я хочу показать несколько полезных настроек плагина:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
&amp;quot; Показывать окно слева
let g:tagbar_left = 1

&amp;quot; Ширина окна
let g:tagbar_width = 30

&amp;quot; Показывать стрелки вместо +/-
let g:tagbar_iconchars = [&#39;▶&#39;, &#39;◢&#39;]

&amp;quot; Не сортировать
let g:tagbar_sort = 0
&lt;/pre&gt;
&lt;div class=&quot;section&quot; id=&quot;id1&quot;&gt;
&lt;h1&gt;См. Также:&lt;/h1&gt;
&lt;p&gt;Справочный файл: &lt;tt class=&quot;docutils literal&quot;&gt;:help tagbar&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;Страница плагина на vim.org: &lt;a class=&quot;reference external&quot; href=&quot;http://www.vim.org/scripts/script.php?script_id=3465&quot;&gt;http://www.vim.org/scripts/script.php?script_id=3465&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Git-репозитарий: &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/majutsushi/tagbar.git&quot;&gt;https://github.com/majutsushi/tagbar.git&lt;/a&gt;&lt;/p&gt;
&lt;!-- vim: spell nowrap --&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class=&quot;document&quot; id=&quot;vim-fswitch&quot;&gt;
&lt;h1 class=&quot;title&quot;&gt;vim-fswitch - быстрое переключение между заголовочным файлом и реализацией&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Используемые языки при написании плагина&lt;/strong&gt;: VimL&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Зависимости&lt;/strong&gt;: нет&lt;/p&gt;
&lt;p&gt;Если вы пишете что-либо на С/С++ с используя Vim, то наверняка вам не хватает
быстрого способа перейти от заголовочного файла к реализации (напр от foo.h к foo.cpp).
Если вы задавались вопросом, почему нельзя реализовать такой простой функционал
в самом редакторе, то ответом по моему мнению будет идеология. Vim != IDE,
Vim это просто отличный текстовый редактор, ничего не знающий о семантике кода
и системе сборки вашего проекта. Т.е. если упрощённо, откуда ему знать что
заголовочные файлы вы держите в папке &lt;tt class=&quot;docutils literal&quot;&gt;./foo/include&lt;/tt&gt; проекта? Но иногда удобство
важнее идеологии и человек написавший плагин vim-fswitch со мной согласен.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;a-vim-vs-vim-fswitch&quot;&gt;
&lt;h1&gt;a.vim VS vim-fswitch&lt;/h1&gt;
&lt;p&gt;Долгое время я писал на С++ простенькие утилиты для себя, чтобы быстро переключатся
от заголовка к реализации использовался плагин a.vim. Но большой минус этого плагина
в том что он не даёт возможности настроить пути для поиска файлов. Т.е. если .h файл
не лежит рядом с .cpp файлом, он его просто не найдёт. Поискав на vim.org более функциональные
альтернативы я наткнулся на vim-fswitch. Больше всего меня привлекла возможность
гибкой настройки поиска файлов, на основе регулярных выражений.&lt;/p&gt;
&lt;p&gt;Пример из моего vimrc:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
augroup fswitch-autocommands
    au BufEnter *.cpp let b:fswitchdst  = &#39;h,hpp&#39;
    au BufEnter *.cpp let b:fswitchlocs = &#39;./,./include/,../include,./inc&#39;

    au BufEnter *.h let b:fswitchdst  = &#39;c,cpp&#39;
    au BufEnter *.h let b:fswitchlocs = &#39;../src,../,./&#39;
augroup END
&lt;/pre&gt;
&lt;p&gt;Тут мы ищем заголовочные (.h, .hpp) файлы в директориях &lt;tt class=&quot;docutils literal&quot;&gt;./include/, &lt;span class=&quot;pre&quot;&gt;../include,&lt;/span&gt;
./inc&lt;/tt&gt; относительно нашего текущего буфера, а так-же в самой директории с файлом.
Соответственно файлы реализации (.c, .cpp) в директориях &lt;tt class=&quot;docutils literal&quot;&gt;&lt;span class=&quot;pre&quot;&gt;../src,&lt;/span&gt; ../&lt;/tt&gt; и текущей.&lt;/p&gt;
&lt;p&gt;Из возможностей, так-же стоит отметить:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Создание пустого файла, если поиск ничего не дал, используя предпочитаемое расположение&lt;/li&gt;
&lt;li&gt;Гибкость настройки путей для каждого буфера&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;id1&quot;&gt;
&lt;h1&gt;Основные команды&lt;/h1&gt;
&lt;p&gt;Для простого переключения служит команда &lt;tt class=&quot;docutils literal&quot;&gt;FSHere&lt;/tt&gt;.
Если вы предпочитаете видеть заголовочный файл и реализацию в одном окне,
то для этого существует семейство команд которые открывают альтернативный файл,
с рездлением текущего окна:
&lt;tt class=&quot;docutils literal&quot;&gt;FSSplitLeft&lt;/tt&gt; (отобразить горизонтально слева), &lt;tt class=&quot;docutils literal&quot;&gt;FSSplitRight&lt;/tt&gt; (справа),
&lt;tt class=&quot;docutils literal&quot;&gt;FSSplitAbove&lt;/tt&gt; (вертикально сверху), &lt;tt class=&quot;docutils literal&quot;&gt;FSSplitBelow&lt;/tt&gt; (снизу).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;id2&quot;&gt;
&lt;h1&gt;&lt;em&gt;Совет:&lt;/em&gt;&lt;/h1&gt;
&lt;p&gt;Пользователям графической версии Vim`а будет полезно повесить переключение на пункт всплывающего
меню, например как это сделано у меня:&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ1GRDWLMBWShReL0pztM8sWvnCv96OUxW1qpL22219KgNt9CDvtPSfASqck6ytclrTAsUV-hO5XrEr_wKzP3LQYy5BTkvAWeSA1HJCK5LaNVN69c5o6Trzg5nnMj1Gyl8kW7gbHdankRg/s0/screen-01.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;305&quot; data-original-width=&quot;413&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ1GRDWLMBWShReL0pztM8sWvnCv96OUxW1qpL22219KgNt9CDvtPSfASqck6ytclrTAsUV-hO5XrEr_wKzP3LQYy5BTkvAWeSA1HJCK5LaNVN69c5o6Trzg5nnMj1Gyl8kW7gbHdankRg/s0/screen-01.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Для того чтобы этот пункт отображался &lt;em&gt;только&lt;/em&gt; для определённых типов файлов (С/C++)
используется функция &lt;tt class=&quot;docutils literal&quot;&gt;ToggleFTContextMenu&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
function! ToggleFTContextMenu(languages, modifiers, menuitem, action)
    for lang_ in a:languages
        if &amp;amp;filetype != lang_
            execute &#39;silent! aunmenu &#39; . a:menuitem
            continue
        endif
        for modifier in a:modifiers
            let esc = &#39;&#39;
            if modifier == &#39;i&#39;
                let esc = &#39;&amp;lt;esc&amp;gt;&#39;
            endif
            let command =  modifier . &#39;menu &amp;lt;silent&amp;gt; &#39; . a:menuitem . &#39; &#39; . esc .&#39;:call &#39; . a:action . &#39;&amp;lt;cr&amp;gt;&#39;
            execute command
        endfor
        return
    endfor
endfunction
&lt;/pre&gt;
&lt;p&gt;Теперь осталось зарегистрировать наше меню хитрым способом:&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;
augroup user-contextmenu
    au MenuPopup * call ToggleFTContextMenu([&amp;quot;cpp&amp;quot;, &amp;quot;c&amp;quot;],[&amp;quot;i&amp;quot;,&amp;quot;n&amp;quot;],
                \&amp;quot;PopUp.-Usrsep5-&amp;quot;, &amp;quot;:&amp;quot;)

    au MenuPopup * call ToggleFTContextMenu([&amp;quot;cpp&amp;quot;, &amp;quot;c&amp;quot;],[&amp;quot;i&amp;quot;,&amp;quot;n&amp;quot;],
                \&amp;quot;PopUp.Swtich\\ Header/Source&amp;quot;, &amp;quot;FSwitch(&#39;%&#39;, &#39;&#39;)&amp;quot;)
augroup END
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;id3&quot;&gt;
&lt;h1&gt;См. Также:&lt;/h1&gt;
&lt;p&gt;Справочный файл: :help fswitch&lt;/p&gt;
&lt;p&gt;Страница плагина на vim.org: &lt;a class=&quot;reference external&quot; href=&quot;http://www.vim.org/scripts/script.php?script_id=2590&quot;&gt;http://www.vim.org/scripts/script.php?script_id=2590&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Git-репозитарий: &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/derekwyatt/vim-fswitch.git&quot;&gt;https://github.com/derekwyatt/vim-fswitch.git&lt;/a&gt;&lt;/p&gt;
&lt;!-- vim: spell nowrap --&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;

</description><link>http://lazycleric.blogspot.com/2021/01/vim.html</link><author>noreply@blogger.com (clericJ)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi7U2UkNlmEebzBtpH96Y2PTEZy11ys2d5ae4IzQUbthyp2QIsa7nVeFvRU0-RDsg6f0hceT8dXkgulZ7y8HySN2aFo9vAwQBCHmPLZnBYrBMN6y_0NS951lQizj92evLB96t2vNh9ByQw/s72-c/vim-pathogens-750x519.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-7829581279499587672</guid><pubDate>Thu, 19 Apr 2018 17:13:00 +0000</pubDate><atom:updated>2018-04-20T19:49:35.930+03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">SNMP</category><category domain="http://www.blogger.com/atom/ns#">SNMPScanner</category><category domain="http://www.blogger.com/atom/ns#">программирование</category><title>SNMP Scanner</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h1&gt;
Simple network discovery tool&lt;/h1&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8ud08XcbXkFmHMOYJoUo84iI6lZNfuKS8kgIhKLciyvCNuree7eiHSPnSjI1pmOKflAYt7DtD5pbsznq9y5H9s8j0NzFBjumOCaAkCSPDRS95pzoLwzY_BRkm6hre8ZXuJcSo9ZUXwlkV/s1600/screenshot.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;679&quot; data-original-width=&quot;948&quot; height=&quot;229&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8ud08XcbXkFmHMOYJoUo84iI6lZNfuKS8kgIhKLciyvCNuree7eiHSPnSjI1pmOKflAYt7DtD5pbsznq9y5H9s8j0NzFBjumOCaAkCSPDRS95pzoLwzY_BRkm6hre8ZXuJcSo9ZUXwlkV/s320/screenshot.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2&gt;
Windows Installation:&lt;/h2&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/clericJ/snmp_scanner/raw/master/bin/SNMPScannerSetup.zip&quot; target=&quot;_blank&quot;&gt;Download lastest version&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Install program&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
System Requrements: Windows Vista, 7, 10 (not working on Windows XP!)&lt;br /&gt;
&lt;a href=&quot;https://www.blogger.com/null&quot; name=&quot;user-content-linux-installation&quot;&gt;&lt;/a&gt;

&lt;br /&gt;
&lt;h2&gt;
&lt;a class=&quot;anchor&quot; href=&quot;https://github.com/clericJ/snmp_scanner#linux-installation&quot; id=&quot;user-content-linux-installation&quot;&gt;&lt;svg class=&quot;octicon octicon-link&quot; height=&quot;16&quot; viewbox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot; fill-rule=&quot;evenodd&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Linux Installation:&lt;/h2&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/clericJ/snmp_scanner&quot; target=&quot;_blank&quot;&gt;Download sources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Run snmp_scanner_app.py&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
System Requrements: python-3.5+, PyQt5, pysnmp-4.4+&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;
&amp;nbsp;&lt;/h1&gt;
&lt;/div&gt;
</description><link>http://lazycleric.blogspot.com/2018/04/snmp-scanner-simple-network-discovery.html</link><author>noreply@blogger.com (clericJ)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8ud08XcbXkFmHMOYJoUo84iI6lZNfuKS8kgIhKLciyvCNuree7eiHSPnSjI1pmOKflAYt7DtD5pbsznq9y5H9s8j0NzFBjumOCaAkCSPDRS95pzoLwzY_BRkm6hre8ZXuJcSo9ZUXwlkV/s72-c/screenshot.png" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-5374950434475278697</guid><pubDate>Thu, 17 Apr 2014 15:16:00 +0000</pubDate><atom:updated>2014-08-28T15:01:31.798+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">smartq zwatch</category><category domain="http://www.blogger.com/atom/ns#">программирование</category><title>SmartQ ZWatch watch faces</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;b&gt;Installation:&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;nbsp;- download&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;nbsp;- install&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;nbsp;- reboot!&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;nbsp;- wait 2-3 minutes after booting &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUfxNDc4TpqFh_zB-ZEPcyBd7m6Ycec4Wybhn7PJggjy8J-v5oyMVmgzRu_2xk_0mwLC7fLndJiwTWZDPBzBLFxzFXBdLDT1KHHgG1mLuZgIi5X4-n_yIQ4TIP4uWJQCpkUpW-lcbO5jHi/s1600/cleanAll.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUfxNDc4TpqFh_zB-ZEPcyBd7m6Ycec4Wybhn7PJggjy8J-v5oyMVmgzRu_2xk_0mwLC7fLndJiwTWZDPBzBLFxzFXBdLDT1KHHgG1mLuZgIi5X4-n_yIQ4TIP4uWJQCpkUpW-lcbO5jHi/s1600/cleanAll.png&quot; height=&quot;200&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;http://yadi.sk/d/j-QrFccWMf9fi&quot; target=&quot;_blank&quot;&gt;Clean&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJt4YQCtntue3gfdbvLlhq-RCadosS0C9BEYe0CtsBg4SD0611nMFkylHejJY49LfdbFLRFOdj2Z4BQcKYyTOrihQyw5G-H6xv4DysEZdbGOe5i3GgUii6qG5RiYoFvV_KYvE3Q7wa96Xy/s1600/led.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJt4YQCtntue3gfdbvLlhq-RCadosS0C9BEYe0CtsBg4SD0611nMFkylHejJY49LfdbFLRFOdj2Z4BQcKYyTOrihQyw5G-H6xv4DysEZdbGOe5i3GgUii6qG5RiYoFvV_KYvE3Q7wa96Xy/s1600/led.PNG&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;http://yadi.sk/d/Bdud3aUXMf9fv&quot; target=&quot;_blank&quot;&gt;LED&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlGC6cN0rQBZG6Gg_yoG9tVwq-Wwr1-f71QmKjlAG_7uv2HjzZvJRtpzLjMePgw4Fc5FkDauxpd8rNAmFkvYr_BiMWfxtzWxrn3-dpQ5DhYzZ7PcivloRRoGFArMV8JuDvLRmjKBlSimIF/s1600/Metro2034Clock.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlGC6cN0rQBZG6Gg_yoG9tVwq-Wwr1-f71QmKjlAG_7uv2HjzZvJRtpzLjMePgw4Fc5FkDauxpd8rNAmFkvYr_BiMWfxtzWxrn3-dpQ5DhYzZ7PcivloRRoGFArMV8JuDvLRmjKBlSimIF/s1600/Metro2034Clock.png&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;http://yadi.sk/d/-GVgEPPmMf9g9&quot; target=&quot;_blank&quot;&gt;Metro 2034&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/clericJ/Metro2034WatchFace&quot; target=&quot;_blank&quot;&gt;Source&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thanks &lt;span class=&quot;normalname&quot;&gt;&lt;a href=&quot;http://4pda.ru/forum/index.php?showuser=2319375&quot;&gt;Mefesto11&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgbUu1hyphenhyphenvBtMZXPE7WvsctvMIA9gZQsPETrfiucjjsDRpaFwA8HiAQa-IoD7t6hhoLLvzHBLEgFab8QUFo6ydOYz74YWAWvVxuOB3geGBUuSjrjW6qW5nEdSl6HOMcdwCau4CTL6XyZ4Gy/s1600/Metro2034v2.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgbUu1hyphenhyphenvBtMZXPE7WvsctvMIA9gZQsPETrfiucjjsDRpaFwA8HiAQa-IoD7t6hhoLLvzHBLEgFab8QUFo6ydOYz74YWAWvVxuOB3geGBUuSjrjW6qW5nEdSl6HOMcdwCau4CTL6XyZ4Gy/s1600/Metro2034v2.png&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://yadi.sk/d/GrkK0gnzMsT6X&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Metro 2034v2&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thanks&amp;nbsp; &lt;span class=&quot;normalname&quot;&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span class=&quot;normalname&quot;&gt;&lt;span class=&quot;normalname&quot;&gt;&lt;a href=&quot;http://4pda.ru/forum/index.php?showuser=3200779&quot;&gt;RaySpark&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDIWaGAnaxYlZFrfTwe4gZjjWgYm-L8Bg5pfhg6bJAWKdxQzhanJhupFTAPHYFpr3IhwvHjc24np1sU-LheBGVB-Yp3HoCOmzmCYH1nK-vGUGm2FAt0Rb5mHlY8Oi-VTIHWg7BV3kqlPNW/s1600/PipBoyClock.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDIWaGAnaxYlZFrfTwe4gZjjWgYm-L8Bg5pfhg6bJAWKdxQzhanJhupFTAPHYFpr3IhwvHjc24np1sU-LheBGVB-Yp3HoCOmzmCYH1nK-vGUGm2FAt0Rb5mHlY8Oi-VTIHWg7BV3kqlPNW/s1600/PipBoyClock.png&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;http://yadi.sk/d/TBbDIGNrMf9gP&quot; target=&quot;_blank&quot;&gt;PipBoy&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/clericJ/PipBoyWatchFace&quot; target=&quot;_blank&quot;&gt;Source&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTtSsHuDgYszTn1Dgf6TQyNiULWabBllbVWduk2TgkY-UvUSJLOm0pDLtAKqlvWCOGkikwp22_CVJlxe0XexaxL-qbBhcvUG7IVI4Monn2_UXOMcNVEcCMrFjQs_CQwVH_85qpHjVguW_B/s1600/elektronika.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTtSsHuDgYszTn1Dgf6TQyNiULWabBllbVWduk2TgkY-UvUSJLOm0pDLtAKqlvWCOGkikwp22_CVJlxe0XexaxL-qbBhcvUG7IVI4Monn2_UXOMcNVEcCMrFjQs_CQwVH_85qpHjVguW_B/s1600/elektronika.PNG&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://yadi.sk/d/J7gRHtu6N45KQ&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Elektronika 5 &lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Thanks &lt;span class=&quot;normalname&quot;&gt;&lt;a href=&quot;http://4pda.ru/forum/index.php?showuser=2319375&quot;&gt;Mefesto11&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgisrrMunGpg33o1A0bAvZfb0UdDMsPBP10VzGQcpHbKhB0T1hv4e3Z4mqc06wJCdat5ewk3j9k4SNYRRB3xqpxNm8g3Tng3u2jt9A7aobWgGEA8zUao0QFxNokXbLpT7JXsyeYcyGz2vaJ/s1600/TransparencyClock.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgisrrMunGpg33o1A0bAvZfb0UdDMsPBP10VzGQcpHbKhB0T1hv4e3Z4mqc06wJCdat5ewk3j9k4SNYRRB3xqpxNm8g3Tng3u2jt9A7aobWgGEA8zUao0QFxNokXbLpT7JXsyeYcyGz2vaJ/s1600/TransparencyClock.png&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://yadi.sk/d/FXWyEjz8Mf9gf&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Transparency&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii4L_GQZwDvcvo8tAFyD8Aw91UHWlCcshf-8QupONKNhdyIFItePi0TPFgjfH5U5kjvaGJP17fhQ7mfVnnZSGqeP1CB5lFAIfLDKk5l7QcHsiB9G2paJuTzIUezb5AOiEkv27u50qp1dPT/s1600/klpie.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii4L_GQZwDvcvo8tAFyD8Aw91UHWlCcshf-8QupONKNhdyIFItePi0TPFgjfH5U5kjvaGJP17fhQ7mfVnnZSGqeP1CB5lFAIfLDKk5l7QcHsiB9G2paJuTzIUezb5AOiEkv27u50qp1dPT/s1600/klpie.jpg&quot; height=&quot;200&quot; width=&quot;199&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;http://yadi.sk/d/3JShjWS_Mf9gm&quot; target=&quot;_blank&quot;&gt;KeyLimePie&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyUH6sy-1QjK28TgjsdXZhPykALgNKw463-5RuW343sIMEvrlz-oNqxE1wdS6aeYweRK8QIDvl1w36UtzRIBjS95QWCUggzaTvV0AzbgZqCx9G5R9ZMVKKbhyphenhyphenr62zS-zDWJq2qAq6exoa4/s1600/TextClock-all.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyUH6sy-1QjK28TgjsdXZhPykALgNKw463-5RuW343sIMEvrlz-oNqxE1wdS6aeYweRK8QIDvl1w36UtzRIBjS95QWCUggzaTvV0AzbgZqCx9G5R9ZMVKKbhyphenhyphenr62zS-zDWJq2qAq6exoa4/s1600/TextClock-all.png&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;http://yadi.sk/d/ukzcWXjCMf9gd&quot; target=&quot;_blank&quot;&gt;Text (Russian lang only)&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/clericJ/TextClockWatchFace&quot; target=&quot;_blank&quot;&gt;Source&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD-VOFcOAs9ZQfhpnR_8HovQiAcJpueox4h-L6nuGq-sfqYRS9WRKGf0bTU1ZcQfyGD6IiO_rW92LGi1RVYNPbtMMn5jCC2WKUS-O-PsT4Snw55KE4HOGaDfeISJw8kAE2f6BlKtjEXXMY/s1600/neon.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD-VOFcOAs9ZQfhpnR_8HovQiAcJpueox4h-L6nuGq-sfqYRS9WRKGf0bTU1ZcQfyGD6IiO_rW92LGi1RVYNPbtMMn5jCC2WKUS-O-PsT4Snw55KE4HOGaDfeISJw8kAE2f6BlKtjEXXMY/s1600/neon.PNG&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href=&quot;https://yadi.sk/d/GQ_1GBEraZYJs&quot; target=&quot;_blank&quot;&gt;Neon&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/div&gt;
</description><link>http://lazycleric.blogspot.com/2014/04/smartq-zwatch-watchfaces.html</link><author>noreply@blogger.com (clericJ)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUfxNDc4TpqFh_zB-ZEPcyBd7m6Ycec4Wybhn7PJggjy8J-v5oyMVmgzRu_2xk_0mwLC7fLndJiwTWZDPBzBLFxzFXBdLDT1KHHgG1mLuZgIi5X4-n_yIQ4TIP4uWJQCpkUpW-lcbO5jHi/s72-c/cleanAll.png" height="72" width="72"/><thr:total>8</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-3394062311584186842</guid><pubDate>Sun, 02 Sep 2012 12:08:00 +0000</pubDate><atom:updated>2012-09-12T15:09:43.686+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">программирование</category><title>Недостатки Python</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSRjUyFhbedn44tg09M97AtmCo0-ldiz4ouqBAhxC8vu-NN5XLTXL0yaHlrr1tW3b6BbCWjoPUpo86lYAvv9vqbKeso1i36FuFzvjVqiQoVh8hd71UG776d6gaJ_xP12PUKsKA3nMMQCaa/s1600/linuxdevelopers.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSRjUyFhbedn44tg09M97AtmCo0-ldiz4ouqBAhxC8vu-NN5XLTXL0yaHlrr1tW3b6BbCWjoPUpo86lYAvv9vqbKeso1i36FuFzvjVqiQoVh8hd71UG776d6gaJ_xP12PUKsKA3nMMQCaa/s400/linuxdevelopers.jpg&quot; width=&quot;302&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
В этой статье я хочу поделится своим субъективным мнением по поводу одного из моих любимых инструментов, языка программирования python. &lt;br /&gt;
Для начала, я пробегусь по тем &quot;изъянам&quot;, за которые критикуют язык, люди на нём не писавшие/писавшие мало и выступлю в роли адвоката.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA71BljnmxEFxmMCihkUwAAFYbZQxgSW-KS2Xy5frzwTVmo4JiR_x176Rx4SsTsJ5bOa-th1pUjEZtf74nRdzA-tliHu8VaEO13tISKeH5BHSCpEHGdpilds83JyG8UDiGUNwRXWszp-I-/s1600/linuxdevelopers.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;

Явное указание self&lt;/h4&gt;
Многим кажется дикостью, всё время ставить self первым аргументом любого метода (за исключением staticmethod и classmetod). А затем писать эти ненавистные четыре буквы перед каждым обращением к внутренностям класса. Ведь мы привыкли что этого нет ни в C++, ни в Java. Там мы пишем this, только тогда, когда захотим этого сами.&lt;br /&gt;
Но эти же люди забывают, что python динамический язык, компилятор или IDE вам не подскажет что произошёл конфликт имён. Представьте, вы пишете код в методе foo и завели локальную переменную bar, но в классе от которого вы отнаследовались (он к тому же может быть определён в другом модуле) уже есть атрибут с таким же именем. Думаю, долгие часы весёлой отладки, вам гарантированны. Так-же, напомню. что до того как IDE стали &quot;умными&quot; была популярна венгерская нотация и, для того чтобы не перепутать атрибуты метода, применялась такая запись:&lt;br /&gt;
&lt;b&gt;m_foo&lt;/b&gt;&lt;br /&gt;
Это говорит о том, что проблема существует, но для языков со статической типизацией она решается с помощью предупреждений, выдаваемых&amp;nbsp; IDE или компилятором языка.&lt;br /&gt;
&lt;br /&gt;
Есть еще один момент, касающийся непосредственно философии python - &quot;явное лучше неявного&quot; (строчка из Дзен python). Весь язык построен на этих принципах и отход от них в данном случае не может быть оправдан никак.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;

Куцие lambda выражения&lt;/h4&gt;
Что с ними не так? Спросите вы. Мне вот тоже этого не понять, но люди любящие писать большие лямбда функции ругают python, из-за того, что при написании лямбд нельзя использовать операторы (statement) такие как if, for (хотя это ограничение можно обойти используя списковые выражения и тернальный if) и даже print. Чтож, если вы программист на erlang или lisp, то я вас пойму, вы знаете всю мощь и простоту написания лямбда выражений. Но это другой язык с другой философией. И одной из главных вещей в python, является читаемость кода. Именно поэтому блоки кода отделяются отступами на уровне синтаксиса. И да, это затрудняет писать большие лямбда выражения. Но ведь всегда можно завести полноценную локальную функцию.&lt;br /&gt;
Например, нам нужно отсортировать список по нужным нам атрибутам, для этого мы будем использовать метод sort с собственной функцией сравнения. Для начала, напишем всё это в виде лямбда выражения:&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;def foo():
    self._names.sort(cmp=lambda x, y: 
                1 if self._card_data[x].level &amp;gt; self._card_data[y].level else 
                    -1 if self._card_data[x].level &amp;lt; self._card_data[y].level else 0)
&lt;/pre&gt;
Теперь запишем наш код в локальную функцию:
&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;def foo():
    def compare(x,y):
        if self._card_data[x].level &amp;gt; self._card_data[y].level:
            return 1
        elif self._card_data[x].level &amp;lt; self._card_data[y].level
            return -1

        return 0
    self._names.sort(cmp=compare)
&lt;/pre&gt;
Изменилось не так много, оба варианта хорошо работают, но второй более читаем. Это будет особенно заметно если усложнить пример.&lt;br /&gt;
Лямбда функции в python используются для простых случаев и функционала&amp;nbsp; тернального if и списочных выражений (list expressions) хватает для написания простой логики, если же задача требует написания большой лямбда-лапши, пишите локальную функцию. И уж поверьте, вы сами себе скажете спасибо, когда будете читать код.&lt;br /&gt;
В завершение приведу еще две цитаты из Zen of Python:&lt;br /&gt;
&lt;i&gt;Простота лучше сложности.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Читаемость ценится высоко.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;

Форматирование кода на уровне синтаксиса&lt;/h4&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Это просто бесконечный источник для холиваров. Кому то это кажется гениальным, кто-то просто ненавидит. Думаю, это зависит от отношения человека к прекрасному, ведь идея о том что отформатированная программа - рабочая программа, хороша. Хотя для людей, привыкших выдавать море спагетти, кода она кажется дикой. Да, во всех современных IDE есть функция авто-форматирования кода, но я привык писать код сразу отформатированным и никогда не прибегал к этой функции для С++ в Visual Studio, исключая случаи работы с чужим кодом. Потому что в голове, так-же как и в коде всё должно быть структурировано и разложено по полочкам. &lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Многие программисты перешедшие с Perl жалуются что не могут написать однострочник и язык им навязывает делать отступы, но ведь это прекрасно! И не дай бог вам дадут поддерживать код, написанный таким человеком на языке &quot;со скобочками&quot;!&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Язык приучает человека писать сразу отформатированный код, а не надеяться на помощь IDE.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Расхождений со стилем именования и форматирования, так же не должно быть , по одной простой причине, есть &lt;a href=&quot;http://www.python.org/dev/peps/pep-0008/&quot; target=&quot;_blank&quot;&gt;PEP8&lt;/a&gt; в котором описаны все эти моменты.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
И мне приятно открыв чужой код увидеть что он отформатирован согласно общим правилам языка, а не в стиле &quot;я лучше знаю как должен выглядеть мой код&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Продолжение следует... &lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://lazycleric.blogspot.com/2012/09/python.html</link><author>noreply@blogger.com (clericJ)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSRjUyFhbedn44tg09M97AtmCo0-ldiz4ouqBAhxC8vu-NN5XLTXL0yaHlrr1tW3b6BbCWjoPUpo86lYAvv9vqbKeso1i36FuFzvjVqiQoVh8hd71UG776d6gaJ_xP12PUKsKA3nMMQCaa/s72-c/linuxdevelopers.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-5776812582678014853</guid><pubDate>Fri, 20 Jul 2012 13:17:00 +0000</pubDate><atom:updated>2013-05-07T22:56:57.928+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><title>Pyinstaller или забудьте от таскании с собой интерпретатора</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
В последнее время мне часто приходится писать небольшие утилитарные приложения, которые я потом передаю другим людям для работы с ними. Соответственно python на этих машинах не установлен. А заставлять людей его ставить, тоже не очень хочется. Тут-то и возникает проблема с портабельностью приложения.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
Для начала было решено писать всё на С++ (тем более я использую Qt), но мне очень не хватало &lt;a href=&quot;http://docs.python.org/library/&quot; target=&quot;_blank&quot;&gt;батареек &lt;/a&gt;python`а. Поэтому я начал смотреть в сторону программ сборщиков в исполняемый файл для python.&lt;br /&gt;
&lt;br /&gt;
Когда-то давно, для этих целей я пользовался &lt;a href=&quot;http://cx_freeze.readthedocs.org/en/latest/index.html&quot; target=&quot;_blank&quot;&gt;zxFreeze&lt;/a&gt;,&amp;nbsp; это безусловно отличный проект, но посмотрев документацию, я так и не нашёл способ запихать все используемые библиотеки в один единственный исполняемый файл, да и размер результатов не впечатлил. У библиотеки есть один безусловный плюс, она умеет работать с версиями python`а &amp;gt;= 3.0&lt;br /&gt;
Есть так-же проект &lt;a href=&quot;http://www.py2exe.org/&quot; target=&quot;_blank&quot;&gt;py2exe&lt;/a&gt; умеющий всё что мне нужно, но, посмотрев дату последнего релиза (2008 год), я решил оставить старичка в покое.&lt;br /&gt;
&lt;br /&gt;
И, наконец, герой сегодняшнего повествования, на котором я и остановил свой выбор, &lt;a href=&quot;http://www.pyinstaller.org/&quot; target=&quot;_blank&quot;&gt;pyinstaller&lt;/a&gt;.&lt;br /&gt;
Важные для меня достоинства библиотеки:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Способен собрать проект под все популярные платформы (Linux, Windows, MacOS)&lt;/li&gt;
&lt;li&gt;А так-же под 32/64 архитектуры процессора (исключение MacOS, под неё только 32bit)&lt;/li&gt;
&lt;li&gt;Работает с версиями python от 2.2 по 2.7 включительно (для тех кому нужна работа с python 3.0, рекомендую &lt;a href=&quot;http://cx_freeze.readthedocs.org/en/latest/index.html&quot; target=&quot;_blank&quot;&gt;zxFreeze&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Умеет собирать все зависимости (библиотеки python,&amp;nbsp; DLL\SO файлы) в один исполняемый файл&lt;/li&gt;
&lt;li&gt;Сжатие с помощью upx&lt;/li&gt;
&lt;/ul&gt;
&lt;i&gt;Обо всех достоинствах вы можете прочитать на &lt;a href=&quot;http://www.pyinstaller.org/&quot; target=&quot;_blank&quot;&gt;странице проекта&lt;/a&gt;&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;








Установка и настройка&lt;/h4&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Первым делом скачиваем дистрибутив пакета со &lt;i&gt;&lt;a href=&quot;http://www.pyinstaller.org/&quot; target=&quot;_blank&quot;&gt;страницы проекта.&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;i&gt;Последней версией на данный момент является 1.5.1 &lt;a href=&quot;https://github.com/downloads/pyinstaller/pyinstaller/pyinstaller-1.5.1.tar.bz2&quot; target=&quot;_blank&quot;&gt;прямая ссылка&lt;/a&gt;.&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
После&lt;i&gt; &lt;/i&gt;скачивания и распаковки архива, пакет следует сконфигурировать, для этого переходим в директорию пакета и запускаем &lt;b&gt;Configure.py&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
Всё, теперь мы можем им пользоваться для своих нужд.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;








Сборка проекта &lt;/h4&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Сборка проходит в два этапа, первым делом с помощью &lt;b&gt;Makespec.py &lt;/b&gt;создаётся файл &lt;b&gt;.spec&lt;/b&gt; , включающий в себя все настройки, необходимые для сборки. Следующим этапом идёт сама сборка в исполняемый файл, производимая скриптом &lt;b&gt;Build.py&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Для упрощения жизни, я написал простой батник под &lt;b&gt;Windows&lt;/b&gt;, автоматизирующий сборку:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;@echo off

set progname=CardEditor
set pyinstaller_dir=D:\bin\apps\pyinstaller

%pyinstaller_dir%\Makespec.py --onefile --icon=icon.ico --name=%progname% main.py -X -c 
%pyinstaller_dir%\Build.py %progname%.spec

rd build /s /q
del warn%progname%.txt
del logdict2.6.6.final.0-1.log
del %progname%.spec
copy dist\%progname%.exe %progname%.exe
rd dist /s /q
echo.
pause
&lt;/pre&gt;
В переменные &lt;code&gt;progname&lt;/code&gt; и &lt;code&gt;pyinstaller_dir&lt;/code&gt; следует вписать имя проекта и путь к директории &lt;b&gt;pyinstaller&lt;/b&gt;. Подробнее с синтаксисом команды &lt;b&gt;Makespec &lt;/b&gt;можно ознакомится &lt;a href=&quot;http://www.pyinstaller.org/export/d3398dd79b68901ae1edd761f3fe0f4ff19cfb1a/project/doc/Manual.html?format=raw&quot; target=&quot;_blank&quot;&gt;здесь.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Результирующие исполняемые файлы для небольших утилит, получились следующих размеров:&lt;br /&gt;
С &lt;b&gt;PyQt4 - 8.35 &lt;/b&gt;Mb&lt;br /&gt;
Без &lt;b&gt;Qt - 3.50&lt;/b&gt; Mb&lt;br /&gt;
&lt;br /&gt;
Что как я считаю, весьма недурно.&lt;/div&gt;
</description><link>http://lazycleric.blogspot.com/2012/07/pyinstaller.html</link><author>noreply@blogger.com (clericJ)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-3933122457101505189</guid><pubDate>Thu, 28 Jun 2012 20:47:00 +0000</pubDate><atom:updated>2014-07-04T10:58:27.963+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">инструменты</category><title>Сравнение Sublime Text 2 и Vim</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
На днях вышла финальная версия редактора &lt;a href=&quot;http://www.sublimetext.com/2&quot; target=&quot;_blank&quot;&gt;Sublime text 2&lt;/a&gt;. Почитав обзоры и попробовав его в деле, я решил написать сравнительный обзор моего текущего редактора (&lt;b&gt;Vim&lt;/b&gt;) и &lt;b&gt;Sublime&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;i&gt;Небольшое пояснение, под &lt;b&gt;Vim&lt;/b&gt;, я тут подразумеваю GVim/MacVim, так-как лично мне удобнее пользоваться именно GUI версиями vim`a.&lt;/i&gt;&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;






















Порог вхождения&lt;/h4&gt;
Начнём с &lt;b&gt;Vim&lt;/b&gt;`а, здесь порог вхождения несколько выше, для продуктивной работы вам понадобится изучение режимов редактора, полезных команд и сочетаний клавиш. Не обязательно учить их все, но что такое режимы и шорткаты для перехода в режим редактирования или в командный режим (я про &lt;b&gt;Command Mode&lt;/b&gt;, а не &lt;b&gt;Normal Mode&lt;/b&gt;), знать надо. Это я еще не затронул тему настройки &lt;b&gt;vim&lt;/b&gt;, тут по хорошему нужно учить &lt;b&gt;VimScript &lt;/b&gt;для написания более-менее годного конфига. Мой &lt;b&gt;vimrc &lt;/b&gt;перевалил отметку 42кб и это не считая настроек для плагинов.&lt;br /&gt;
С &lt;b&gt;Sublime &lt;/b&gt;напротив, ситуация куда лучше, все кто когда либо редактировал текст в &lt;b&gt;gedit/notepad++ &lt;/b&gt;и т.д. освоятся быстро, сочетаний клавиш не так много, настройка осуществляется путём правки конфига на &lt;b&gt;JSON&lt;/b&gt;. &lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;






















&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;






















Редактирование текста &lt;/h4&gt;
В &lt;b&gt;vim &lt;/b&gt;заложена концепция модульности. И уж поверьте, все его режимы придуманы не для того чтобы вы постоянно тянулись к клавише &lt;b&gt;Esc&lt;/b&gt;, в них скрыта реальная мощь. В качестве доказательств приведу пару статей &lt;a href=&quot;http://habrahabr.ru/post/28108/&quot; target=&quot;_blank&quot;&gt;эффективное использование vim&lt;/a&gt; и &lt;a href=&quot;http://habrahabr.ru/post/131951/&quot; target=&quot;_blank&quot;&gt;Эффективное использование Vim&lt;/a&gt;, не удивляйтесь что у них одно название. &lt;br /&gt;
Что же нам может предложить &lt;b&gt;Sublime text 2&lt;/b&gt;? Во первых очень удобная вещь под названием &lt;b&gt;Multiple Selection&lt;/b&gt;, даёт возможность выбрать и редактировать одновременно несколько мест в тексте. Так-же из коробки есть авто-закрытие скобок, авто-отступы, авто-завершение кода. Еще из плюсов хочется отметить подсветку всех вхождений слова под курсором (для этого в &lt;b&gt;Vim&lt;/b&gt; надо устанавливать плагин). Пару слов о поиске, в обоих редакторах он выполнен на отлично. Присутствует всё, что должно быть у продуктов такого класса: поиск с помощью регулярок, поиск по мере набора, поиск в файлах и так далее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;






















Расширяемость&lt;/h4&gt;
Возможности обоих редакторов могут быть расширены с помощью скриптовых языков, в случае &lt;b&gt;Sublime &lt;/b&gt;это &lt;b&gt;python&lt;/b&gt;. &lt;b&gt;Vim &lt;/b&gt;же даёт на выбор больше языков (&lt;b&gt;python, ruby, perl&lt;/b&gt;) но основным является &lt;b&gt;VimScript&lt;/b&gt;.&lt;br /&gt;
Однако именно в &lt;b&gt;Vim &lt;/b&gt;интеграция более тесная, скриптовый язык это просто продолжение редактора. Любая команда или клавиатурная привязка доступна из VS. Приведу пример. В &lt;b&gt;Sublime &lt;/b&gt;вы пишете плагины, а в &lt;b&gt;Vim &lt;/b&gt;c помощью &lt;b&gt;VimScript &lt;/b&gt;вы можете писать всё что угодно: файлы подсветки синтаксиса, цветовые схемы, макросы, интеграцию с компиляторами, тот же файл настроек по сути является файлом &lt;b&gt;VimScript&lt;/b&gt;. Можно сказать что значительная часть функционала &lt;b&gt;Vim &lt;/b&gt;написана на &lt;b&gt;VimScript&lt;/b&gt;, и только ядро редактора это код на &lt;b&gt;С.&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;






















Плагины&lt;/h4&gt;
Естественным продолжением предыдущей темы является плагиновая система редакторов. &lt;b&gt;Sublime &lt;/b&gt;достаточно молод и еще не обзавёлся таким количеством плагинов, которым обладает &lt;b&gt;Vim&lt;/b&gt;. Посмотреть большинство можно &lt;a href=&quot;http://wbond.net/sublime_packages/community#sort-installs&quot; target=&quot;_blank&quot;&gt;здесь.&lt;/a&gt; На данный момент в репозитории насчитывается 440 пакета. Есть как платные, так и бесплатные. Функционал некоторых плагинов действительно впечатляет. Но я не увидел чего либо, чего нету в &lt;a href=&quot;http://www.vim.org/scripts/index.php&quot; target=&quot;_blank&quot;&gt;многотысячном&lt;/a&gt; репозитории плагинов для &lt;b&gt;Vim&lt;/b&gt;. Для последнего же существует куда больше мощных плагинов, значительно расширяющих функционал редактора (используемые мной плагины описаны &lt;a href=&quot;http://lazycleric.blogspot.com/2012/06/vimrc.html&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt;)&lt;br /&gt;
Тут безусловным победителем выступает &lt;b&gt;Vim&lt;/b&gt;. Однако с ростом популярности &lt;b&gt;Sublime, &lt;/b&gt;ситуация может изменится.&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;

















Выводы&lt;/h4&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Sublime Text 2 &lt;/b&gt;Отличный текстовый редактор для программистов, сочетающий в себе приятный интерфейс (чего только стоит один &lt;b&gt;minimap&lt;/b&gt;)&amp;nbsp; и мощный функционал. Он прост в освоении и хорошо расширяем.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Vim &lt;/b&gt;же, со своими режимами и командами мощнейший инструмент редактирования кода. Так же к нему написана не одна сотня отличных плагинов. Но для того чтобы научится им пользоваться, может потребоваться некоторое время. Тут на любителя, если вам нравится настраивать всё под себя и учить новые методы работы с текстом, то &lt;b&gt;Vim &lt;/b&gt;станет для вас отличным решением. Если же вам просто нужен превосходный редактор исходного кода с хорошими плагинами, то попробуйте &lt;b&gt;Sublime Text 2.&lt;/b&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;

















&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;

















&amp;nbsp;P.S.&lt;/h4&gt;
Есть еще один критерий, платность/бесплатность продукта, &lt;b&gt;Vim &lt;/b&gt;бесплатен и
 открыт, &lt;b&gt;Sublime&lt;/b&gt; напротив проприетарен и стоит 59$. Однако моё мнение 
такого, если вы пользуетесь инструментом каждый день и при этом он 
помогает вам зарабатывать себе на хлеб. То нет ничего криминального в 
том чтобы купить &lt;b&gt;Sublime&lt;/b&gt;. Труд должен оплачиваться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;

















P.P.S.&lt;/h4&gt;
&lt;b&gt;Vim &lt;/b&gt;и &lt;b&gt;Sublime&amp;nbsp; &lt;/b&gt;это текстовые редакторы, я не сравниваю их с &lt;b&gt;IDE&lt;/b&gt;, потому что это разные инструменты, призванные решать каждый свои задачи. Думаю никто в здравом уме, не сядет писать большой проект на &lt;b&gt;Java&lt;/b&gt;, вооружившись одним перечисленных текстовых редакторов. А вот подправить код или написать небольшую утилиту на &lt;b&gt;python &lt;/b&gt;или &lt;b&gt;C++&lt;/b&gt;, то вполне. &lt;/div&gt;
</description><link>http://lazycleric.blogspot.com/2012/06/sublime-text-2-vim.html</link><author>noreply@blogger.com (clericJ)</author><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-6268102943016413861</guid><pubDate>Tue, 26 Jun 2012 12:55:00 +0000</pubDate><atom:updated>2012-07-11T02:24:13.625+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">android</category><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">программирование</category><title>CallMeNotifications - уведомления о просьбе перезвонить</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;





Вступление&lt;/h4&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIlp2BC_YdEqF4Gx9jiOqhz7K5_XNlQYUzvoe1HBbVdJjai9uMgS_Sp7ESyXHxcz_63Ns0qmdruo9CDhCkWoKXi6J6LRZwq4Qv4hpDXCP4Q-ub2osBku5d7BBXeXn7TbOxeR65gBgH8r1y/s1600/screenshot.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIlp2BC_YdEqF4Gx9jiOqhz7K5_XNlQYUzvoe1HBbVdJjai9uMgS_Sp7ESyXHxcz_63Ns0qmdruo9CDhCkWoKXi6J6LRZwq4Qv4hpDXCP4Q-ub2osBku5d7BBXeXn7TbOxeR65gBgH8r1y/s320/screenshot.png&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Наверное многие знают об услуге &quot;перезвони мне&quot; мобильных операторов (в простонародье также называемые &quot;попрошайками&quot; или &quot;бомжами&quot;). Меня всегда раздражало то, что такие СМСки копятся во входящих, мешая искать более информативные сообщения. И в один прекрасный день я решил чуточку упростить себе жизнь, а попутно познакомится с программированием под Android.&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;















Основные цели&lt;/h3&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Вывод сообщения о просьбе перезвонить в область уведомлений, при нажатии на которое, будет вызван абонент, приславший его&lt;/li&gt;
&lt;li&gt;Удаление сообщения из входящих&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
&lt;i&gt;В статье мало теории, и если будет что-либо непонятно, советую почитать документацию или заглянуть на хабр. &lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;И так, приступим, создадим в Eclipse новый проект под Android, назовём его &lt;code&gt;CallMeNotifications&lt;/code&gt;. Соответственно, главная &lt;code&gt;Activity&lt;/code&gt; у нас будет называться &lt;code&gt;CallMeNotificationsActivity&lt;/code&gt;. Её мы трогать не будем, так как пользовательского интерфейса в нашем приложении практически не будет. (Я лишь добавил туда описание приложения). Теперь нам нужно отловить все СМС, которые приходят на наш мобильный.&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;












Получение входящих СМС &lt;/h4&gt;
В Android события, например включение Wi-Fi или входящий звонок, порождают широковещательные сообщения, таким образом, подписавшись на одно из них, мы можем среагировать на событие. В нашем случае - это входящее СМС.  Для этого нам понадобится класс, наследующийся от &lt;code&gt;BroadcastReceiver&lt;/code&gt;. Его задачей будет прослушивать широковещательные сообщения и реагировать на них в методе onReceive. &lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;// Эти импорты понадобятся нам в будущем
import android.content.BroadcastReceiver;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.provider.ContactsContract;
import android.telephony.SmsMessage;
public class SmsReceiver extends BroadcastReceiver {

    // Идентификатор уведомления, понадобится нам позже
    public static int NOTIFY_ID = 0;

    @Override
    public void onReceive(Context context, Intent intent) {

    }
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;code&gt;context&lt;/code&gt; - Представляет контекст выполнения нашего приложения, через него мы будем получать доступ к необходимым нам методам.&lt;br /&gt;
Объект &lt;code&gt;indent&lt;/code&gt; хранит в себе информацию о перехваченном&amp;nbsp; широковещательном сообщении.&lt;br /&gt;
&lt;br /&gt;
Теперь важный момент, для того чтобы наш &lt;code&gt;Receiver&lt;/code&gt; вызывался, нужно его где-то зарегистрировать. Есть два пути сделать это, первый прямо в коде нашего Activity:&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;    IntentFilter filter = new IntentFilter(
        &quot;android.provider.Telephony.SMS_RECEIVED&quot;);

    filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
    registerReceiver(new SmsReceiver(), filter);
&lt;/pre&gt;
И второй, зарегистрировать его в AndroidManifest.xml проекта, добавив следующие строки:
&lt;br /&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;    &amp;lt;receiver android:name=&quot;.SmsReceiver&quot; android:exported=&quot;true&quot; &amp;gt;
        &amp;lt;intent-filter android:priority=&quot;1000&quot;&amp;gt; 
            &amp;lt;action android:name=&quot;android.provider.Telephony.SMS_RECEIVED&quot; /&amp;gt;
        &amp;lt;/intent-filter&amp;gt;
    &amp;lt;/receiver&amp;gt;
&lt;/pre&gt;
Последний способ более предпочтителен, потому что в этом случае наш &lt;code&gt;Receiver&lt;/code&gt; будет срабатывать даже тогда, когда наше приложение выгружено из памяти.&lt;br /&gt;
Еще один важный момент, приоритет &lt;code&gt;Receiver&lt;/code&gt;`у выставляется максимальный (1000), это нужно для того чтобы получать СМС раньше системного приложения менеджмента СМС.&lt;br /&gt;
&lt;br /&gt;
Теперь нам нужно получить само СМС сообщение:
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;    Bundle extras = intent.getExtras();

    if (extras != null) {
        Object[] smsExtra = (Object[]) extras.get(&quot;pdus&quot;);

        // Берём только первую СМС
        SmsMessage sms = SmsMessage.createFromPdu((byte[]) smsExtra[0]);
    }
&lt;/pre&gt;
Как вы, думаю, знаете, одна СМС в Android, может состоят из нескольких физических, с помощью конструкции &lt;code&gt;smsExtra[0]&lt;/code&gt; мы получаем лишь первую, так как больше нам и не нужно. Если вы пишете похожий код, но хотите получить полный текст СМС, то вы можете организовать здесь цикл.&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;








Разрешения&lt;/h4&gt;
При установке Android приложений, вы наверняка, замечали, что снизу выводятся какие разрешения просят приложения, например, доступ к личной информации или доступ в сеть.

Нашему приложению для нормальной работы, так же будут нужны разрешения. Их декларации хранятся в файле AndroidManifest.xml, в корне вашего проекта. Теперь прикинем, какие нам из них понадобятся:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxl5OQEdwD6CvycyaHvfPWR_5nrdgWcoXIsvqWL8Ia3T3068yIpbDhG13sYtzry8QCWzR1Y01ZcrgWMfEC17ce7_r8JI0LpEXU1aMyafycHYJKhUB_N26hNZvg33h9YIq395Ookorw8t8S/s1600/20120626171156.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxl5OQEdwD6CvycyaHvfPWR_5nrdgWcoXIsvqWL8Ia3T3068yIpbDhG13sYtzry8QCWzR1Y01ZcrgWMfEC17ce7_r8JI0LpEXU1aMyafycHYJKhUB_N26hNZvg33h9YIq395Ookorw8t8S/s200/20120626171156.png&quot; width=&quot;133&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;code&gt;WRITE_SMS, READ_SMS&lt;/code&gt; Работа с СМС&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RECEIVE_SMS&lt;/code&gt; приём СМС&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CALL_PHONE&lt;/code&gt; вызов абонента&lt;/li&gt;
&lt;li&gt;&lt;code&gt;READ_CONTACTS&lt;/code&gt; чтение имени контакта&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;/ul&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;    &amp;lt;uses-permission android:name=&quot;android.permission.WRITE_SMS&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.READ_SMS&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.RECEIVE_SMS&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.CALL_PHONE&quot;/&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.READ_CONTACTS&quot;/&amp;gt;
&lt;/pre&gt;
Прописываем разрешения в manifest, после строки
&lt;br /&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;uses-sdk android:minsdkversion=&quot;10&quot;/&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;












Парсер&lt;/h4&gt;
Настало время подумать об обработке СМС.&amp;nbsp; Самым очевидным способом распознания сообщения с просьбой перезвонить, являются регулярные выражения. Но поскольку у операторов мобильной связи нет единого текста уведомления, то нам придётся писать регулярку для каждого из них. Вот два примера такого рода СМС.&lt;br /&gt;
&lt;pre&gt;Мегафон:
Абонент +9370000000 просит Вас ему перезвонить
Билайн:
Этот абонент просит Вас перезвонить ему
&lt;/pre&gt;
&lt;br /&gt;
Здесь видно, что у каждого оператора свои способы передачи номера абонента. Например, у Билайна СМС приходят от номера самого абонента, а у Мегафона номер передаётся в тексте СМС. Это нужно учитывать при написании регулярок.
&lt;br /&gt;
Так же хранить регулярки в самом коде, не очень то и удобно, затрудняется их редактирование, плюс, после любого изменения, приходится пересобирать проект. Так что хранить регулярки мы будем в xml файле, в директории &lt;code&gt;raw/res&lt;/code&gt;, нашего проекта. Содержимое parsersettings.xml:
&lt;br /&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;settings&amp;gt;
    &amp;lt;operator name=&quot;Megafon&quot;&amp;gt;
        &amp;lt;match-pattern&amp;gt;(?:Абонент )((:?(:?8|\+7)[\- ]?)?(?:\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10})(:? просит Вас ему перезвонить).*&amp;lt;/match-pattern&amp;gt;
        &amp;lt;use-sender-number&amp;gt;0&amp;lt;/use-sender-number&amp;gt;
    &amp;lt;/operator&amp;gt;
    &amp;lt;operator name=&quot;MTS&quot;&amp;gt;
        &amp;lt;match-pattern&amp;gt;Перезвоните мне, пожалуйста.*Отправлено.*&amp;lt;/match-pattern&amp;gt;
        &amp;lt;use-sender-number&amp;gt;1&amp;lt;/use-sender-number&amp;gt;
    &amp;lt;/operator&amp;gt;
    &amp;lt;operator name=&quot;Beeline&quot;&amp;gt;
        &amp;lt;match-pattern&amp;gt;Этот абонент просит Вас перезвонить ему.*&amp;lt;/match-pattern&amp;gt;
        &amp;lt;use-sender-number&amp;gt;1&amp;lt;/use-sender-number&amp;gt;
    &amp;lt;/operator&amp;gt;
    &amp;lt;operator name=&quot;TELE2&quot;&amp;gt;
        &amp;lt;match-pattern&amp;gt;(?:Вас срочно просит перезвонить абонент )(:?(8|\+7)? ?\(?(\d{3})\)? ?(\d{3})[ -]?(\d{2})[ -]?(\d{2,3})).*&amp;lt;/match-pattern&amp;gt;
        &amp;lt;use-sender-number&amp;gt;0&amp;lt;/use-sender-number&amp;gt;
    &amp;lt;/operator&amp;gt;
    &amp;lt;operator name=&quot;NSS&quot;&amp;gt;
        &amp;lt;match-pattern&amp;gt;Пожалуйста, перезвоните мне.*&amp;lt;/match-pattern&amp;gt;
        &amp;lt;use-sender-number&amp;gt;1&amp;lt;/use-sender-number&amp;gt;
    &amp;lt;/operator&amp;gt;
&amp;lt;/settings&amp;gt;

&lt;/pre&gt;
Элемент &lt;code&gt;use-sender-number&lt;/code&gt; используется для указания парсеру не искать номер телефона в СМС, вместо этого воспользовавшись номером отправителя.
&lt;br /&gt;
Добавляем класс &lt;code&gt;SmsParser&lt;/code&gt; в проект. Его код достаточно очевиден для людей знакомых с Java.
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;import java.io.InputStream;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import android.telephony.SmsMessage;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class SmsParser {

    private SmsMessage message = null;
    private InputStream settings = null;
    private Boolean isCallMeSmsFlag = false;
    private String subscriberPhoneNumber = null;

    public SmsParser(SmsMessage message, InputStream settings) {
        this.message = message;
        this.settings = settings;
        parse();
    }
    private String xmlGetItem(Element element, String name) {
        return element.getElementsByTagName(name).item(0).getChildNodes()
                .item(0).getNodeValue();
    }
    private void parse() {
        try {
            DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(this.settings);
            doc.getDocumentElement().normalize();

            // Старайтесь закрывать всё что открыли, во избежание утечек памяти
            this.settings.close();

            NodeList nodes = doc.getElementsByTagName(doc.getDocumentElement()
                    .getChildNodes().item(1).getNodeName());

            for (int i = 0; i &amp;amp;lt; nodes.getLength(); i++) {
                Node node = nodes.item(i);

                if (node.getNodeType() == Node.ELEMENT_NODE) {

                    Element element = (Element) node;
                    Pattern pattern = Pattern.compile(xmlGetItem(element,
                            &amp;quot;match-pattern&amp;quot;));

                    Integer useSenderNumber = new Integer(xmlGetItem(element,
                            &amp;quot;use-sender-number&amp;quot;));

                    // Получаем тело сообщения и номер телефона отправителя
                    String smsBody = message.getMessageBody().toString();
                    String fromNumber = message.getOriginatingAddress();

                    Matcher match = pattern.matcher(smsBody);

                    if (match.find()) {
                        isCallMeSmsFlag = true;

                        if (useSenderNumber != 0) {
                            subscriberPhoneNumber = fromNumber;
                        } else {
                            // При составлении регулярного выражения, для
                            // определения номера телефона используется группа 1
                            subscriberPhoneNumber = match.group(1);
                        }
                        return;
                    }
                }
            }
        } catch (Exception e) {
            throw new RuntimeException(e.getLocalizedMessage());
        }

    }
    public String getPhoneNumber() {
        if (subscriberPhoneNumber != null) {
            return subscriberPhoneNumber.replace(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;);
        } else {
            return null;
        }
    }
    public boolean isCallMeSms() {
        return isCallMeSmsFlag;
    }
}
&lt;/pre&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;












Оповещение пользователя&lt;/h4&gt;
Для того чтобы информировать пользователя о приходе сообщения с просьбой перезвонить, мы будем использовать оповещения в области уведомлений. Данное действие в Android реализует класс &lt;code&gt;Notification&lt;/code&gt;.&lt;br /&gt;
В класс &lt;code&gt;SmsReceiver&lt;/code&gt; добавим метод выводящий уведомления
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;    
    private void sendNotification(Context context, String number, String text) {

        Notification notify = new Notification(R.drawable.ic_launcher, text,
                System.currentTimeMillis());

        NotificationManager notifier = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);

        // Регистрируем ответное событие на нажатие
        // им у нас будет вызов абонента
        Intent toLaunch = new Intent(Intent.ACTION_CALL, Uri.parse(&amp;quot;tel:&amp;quot;
                + number));
        PendingIntent intentBack = PendingIntent.getActivity(context, 0,
                toLaunch, 0);

        // Флаг закрытия уведомления, после того как на него нажали
        notify.flags |= Notification.FLAG_AUTO_CANCEL;
        // Проигрываем стандартную мелодию для оповещений
        notify.defaults |= Notification.DEFAULT_SOUND;
        notify.defaults |= Notification.DEFAULT_VIBRATE;
        notify.setLatestEventInfo(context, text,
              &amp;quot;Нажмите чтобы перезвонить&amp;quot; + number), intentBack);

        notifier.notify(NOTIFY_ID, notify);

        // Увеличиваем идентификатор, для того чтобы каждое уведомление
        // было уникальным, а не перезаписывалось предыдущим с таким же ID
        NOTIFY_ID += 1;
    }
&lt;/pre&gt;
&lt;br /&gt;
Нам понадобится еще один вспомогательный метод для поиска абонента в телефонной книге по его номеру
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;    private String getContactDisplayNameByNumber(Context context, String number) {
        Uri uri = Uri.withAppendedPath(
                ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
                Uri.encode(number));

        String name = &quot;&quot;;
        ContentResolver resolver = context.getContentResolver();
        Cursor lookup = resolver.query(uri, new String[] { BaseColumns._ID,
                ContactsContract.PhoneLookup.DISPLAY_NAME }, null, null, null);

        try {
            if (lookup != null &amp;amp;&amp;amp; lookup.getCount() &amp;gt; 0) {
                lookup.moveToNext();
                name = lookup.getString(lookup
                        .getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
            }
        } finally {
            if (lookup != null) {
                lookup.close();
            }
        }
        return name;
    }
&lt;/pre&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;Собираем всё вместе&lt;/h4&gt;
Осталось реализовать всю логику в методе &lt;code&gt;OnReceive&lt;/code&gt; нашего &lt;code&gt;SmsReceiver&lt;/code&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: java&quot;&gt;    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();

        if (extras != null) {
            Object[] smsExtra = (Object[]) extras.get(&quot;pdus&quot;);

            // Берём только первую СМС
            SmsMessage sms = SmsMessage.createFromPdu((byte[]) smsExtra[0]);
            // Открываем файл с регулярными выражениями
            InputStream settings = context.getResources().openRawResource(
                    R.raw.parsersettings);

            SmsParser parser = new SmsParser(sms, settings);
            if (parser.isCallMeSms()) {

                String phoneNumber = parser.getPhoneNumber();
                String who = getContactDisplayNameByNumber(context, phoneNumber);
                if (who.isEmpty()) {
                    who = phoneNumber;
                }
                String text = who + &quot;просит перезвонить&quot;;
                sendNotification(context, phoneNumber, text);
                this.abortBroadcast();

                playNotificationSound(context);
            }
        }
    
&lt;/pre&gt;
Важный момент, вызывая &lt;code&gt;this.abortBroadcast(),&lt;/code&gt; мы отменяем широковещятельное сообщение, а значит, оно не дойдёт до системного менеджера СМС и вам не придёт уведомление о получении. В общем, всё будет так, как будто этого сообщения не было вообще.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;a href=&quot;https://github.com/clericJ/callme-notifications&quot; target=&quot;_blank&quot;&gt;Код на&amp;nbsp; github&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;</description><link>http://lazycleric.blogspot.com/2012/06/callmenotifications.html</link><author>noreply@blogger.com (clericJ)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIlp2BC_YdEqF4Gx9jiOqhz7K5_XNlQYUzvoe1HBbVdJjai9uMgS_Sp7ESyXHxcz_63Ns0qmdruo9CDhCkWoKXi6J6LRZwq4Qv4hpDXCP4Q-ub2osBku5d7BBXeXn7TbOxeR65gBgH8r1y/s72-c/screenshot.png" height="72" width="72"/><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-3956945027065686446</guid><pubDate>Tue, 19 Jun 2012 20:08:00 +0000</pubDate><atom:updated>2012-06-27T07:23:59.035+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">vim</category><category domain="http://www.blogger.com/atom/ns#">инструменты</category><title>Плагин pyinteractive-vim</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Удобно ли вам работать во встроенном интерпретаторе &lt;code&gt;python&lt;/code&gt; в &lt;code&gt;vim`e&lt;/code&gt;? (для тех кто не в курсе команда &lt;code&gt;:python&lt;/code&gt;) Не думаю. Ведь там нет многого, к чему мы привыкли в нормальных интерактивных консолях, например авто-завершения или авто-отступов. Так же всё время писать &lt;code&gt;:py&lt;/code&gt; для ввода кода, несколько утомляет. Тут мне могут возразить, мол лучше пользоваться полноценными шелами вроде &lt;code&gt;ipython&lt;/code&gt;. Но тогда вы не получите доступа к внутренностям &lt;code&gt;vim&lt;/code&gt; с помощью одноимённого модуля, да и переключать всё время окошки тоже занятие не из весёлых.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;Руководствуясь всеми этими причинами, я решил упростить себе жизнь и написать плагин к &lt;code&gt;vim&lt;/code&gt;, для более комфортной работы со встроенным интерпретатором.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;












&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;И так что же умеет мой плагин:&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;авто-завершение кода&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;авто-отступы при написании многострочного кода&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;расширенный синтаксис (похожий на  &lt;code&gt;ipython&lt;/code&gt;, например &lt;code&gt;max?&lt;/code&gt; выведет справку)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;сохранение истории сессии &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Для того чтобы вызвать интерпретатор, нужно выполнить команду&amp;nbsp; &lt;span class=&quot;typ&quot;&gt; &lt;code&gt;PyInteractiveREPL.&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span class=&quot;typ&quot;&gt;После чего появится стандартное приветствие python ( &lt;code&gt;&#39;&amp;gt;&amp;gt;&amp;gt;&#39; &lt;/code&gt;). Всё, теперь командное окно &lt;code&gt;vim&lt;/code&gt; переключилось в режим &lt;code&gt;python&lt;/code&gt; шелла. Для того чтобы закончить сеанс жмём &lt;code&gt;&amp;lt;ESC&amp;gt;&lt;/code&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span class=&quot;typ&quot;&gt;Важное примечание, всё что вы вводили в сеансах, сохраняется между ними.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span class=&quot;typ&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span class=&quot;typ&quot;&gt;Для авто-завершения используется  &lt;code&gt;&amp;lt;TAB&amp;gt;&lt;/code&gt;.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class=&quot;typ&quot;&gt;Совет, если вы ходите чтобы вывод вариантов авто-завершения был более информативным, советую прописать в &lt;code&gt;vimrc&lt;/code&gt; следующее:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span class=&quot;typ&quot;&gt;&lt;code&gt;set wildmode=list:longest,full&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span class=&quot;typ&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span class=&quot;typ&quot;&gt;Для того чтобы отобразить историю общения с шеллом, используется команда &lt;/span&gt;&lt;span class=&quot;typ&quot;&gt; &lt;code&gt;PyInteractiveHistory&lt;/code&gt;. она поддерживает множество ключей, о которых можно узнать из &lt;a href=&quot;https://github.com/clericJ/pyinteractive-vim/blob/master/doc/pyinteractive.rux&quot; target=&quot;_blank&quot;&gt;документации&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;




Пример работы с pyinteractive:&lt;/h4&gt;
&lt;code&gt;&lt;/code&gt;&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;:PyInteractiveREPL
&amp;gt;&amp;gt;&amp;gt; def inc_10(x):
...     return x+10
...
&amp;gt;&amp;gt;&amp;gt; inc_10(7)
17
&amp;gt;&amp;gt;&amp;gt; import sys
&amp;gt;&amp;gt;&amp;gt; sys.ex&amp;lt;tab&amp;gt; # (see pyinteractive-autocompletion)
&amp;lt;built-in function exit&amp;gt;

&amp;lt;ESC&amp;gt;

:PyInteractiveEval inc_10(11) +1
22
:PyInteractiveHistory
 in[1]: def inc_10(x):
 in[2]:     return x+10
 in[3]:
 in[4]: inc_10(7)
out[1]: 17
 in[5]: import sys
 in[6]: sys.exit
out[2]: &amp;lt;built-in function exit&amp;gt;
 in[7]: inc_10(11) +1
out[3]: 22
&lt;/pre&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;



Видео, демонстрирующее работу плагина (старая версия)&amp;nbsp;&lt;/h4&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/oy9Cv3eKy-0?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;a href=&quot;https://github.com/clericJ/pyinteractive-vim/blob/master/doc/pyinteractive.rux&quot; target=&quot;_blank&quot;&gt;Документация на русском&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Репозиторий&amp;nbsp; плагина на &lt;a href=&quot;https://github.com/clericJ/pyinteractive-vim&quot; target=&quot;_blank&quot;&gt;github&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description><link>http://lazycleric.blogspot.com/2012/06/pyinteractive-vim.html</link><author>noreply@blogger.com (clericJ)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-8366786641936047337</guid><pubDate>Tue, 19 Jun 2012 11:07:00 +0000</pubDate><atom:updated>2012-07-19T01:55:05.692+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">vim</category><category domain="http://www.blogger.com/atom/ns#">инструменты</category><title>vimrc 2.0</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgytGhDGo6b0oUANZrBbhLeeylDaYHof2_MNRDIzN9BsB7ma8emD0OuhnLEj6KTyHsd41Ha6fQRy8E8Gh3wHwhoIzgDDzMhqHGPozlrYGJVYm5aNRAcAmINSq61trPF6I1LBeYanlykyq_j/s1600/Screenshot-150.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;128&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgytGhDGo6b0oUANZrBbhLeeylDaYHof2_MNRDIzN9BsB7ma8emD0OuhnLEj6KTyHsd41Ha6fQRy8E8Gh3wHwhoIzgDDzMhqHGPozlrYGJVYm5aNRAcAmINSq61trPF6I1LBeYanlykyq_j/s200/Screenshot-150.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Года два назад я уже постил свой vimrc, думаю пришло время сказать что в нём изменилось за это время. Собственно &lt;a href=&quot;https://github.com/clericJ/vim-dist&quot; target=&quot;_blank&quot;&gt;вот&lt;/a&gt; актуальный vimrc.&lt;br /&gt;
&lt;br /&gt;
И так, что в нём нового?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;














&lt;span style=&quot;font-size: large;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;

&lt;span style=&quot;font-size: large;&quot;&gt;Пару слов о VIM&lt;/span&gt;&lt;/h4&gt;
Моя основная платформа Windows, соответственно пользуюсь я графической версией vim`а, а именно gvim`ом. Думаю это и так будет заметно при просмотре конфига. Познакомился я с этим редактором, около пяти лет назад. С тех пор постоянно дописываю в конфиг что-либо новое и удаляю устаревшее, с плагинами та-же история. Я никогда не пытался сделать из vim`а IDE, как бы он не был наворочен, это всё же текстовый редактор. Он проектировался для редактирования текста и НЕ понимает контекст программы. Те кто пишет на java работая в netbeans или eclipse думаю меня поймут. Есть конечно исключения в виде плагинов, например ropevim заставляет vim понимать контекст python`а. Но это выглядит скорее как &quot;костыль&quot; (хоть и очень хороший) а не глубоко интегрированная возможность. Всё это нужно понимать при использовании и не пытаться сделать из скальпеля, швейцарский нож.&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;














&lt;span style=&quot;font-size: large;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;

&lt;span style=&quot;font-size: large;&quot;&gt;Организация плагинов &lt;/span&gt;&lt;/h4&gt;
Во первых теперь я пользуюсь &lt;a href=&quot;https://github.com/gmarik/vundle&quot;&gt;vundle&lt;/a&gt; (аналог pathogen, написанный на vimscript), очень удобная штука для структурирования всех плагинов, те кто еще держит плагины в plugin/autoload/ftplugin очень советую, реально избавляет от бардака в директориях и от головной боли при удалении плагинов. Про pathogen на русском можно почитать на &lt;a href=&quot;http://habrahabr.ru/post/116523/&quot;&gt;хабре&lt;/a&gt;, но советую выбрать всё же vundle, как лучший из аналогов.&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;

&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;

&lt;span style=&quot;font-size: large;&quot;&gt;&amp;nbsp;Настройки для плагинов &lt;/span&gt;&lt;/h4&gt;
Все настройки плагинов я перенёс из _vimrc в отдельные файлы, которые лежат в папке plugin для каждого плагина. Например есть у нас пакет (bundle в терминологии vundle) tagbar, для того чтобы посмотреть/изменить настройки этого плагина идём в $VIM/bundle/tagbar/_vimrc.vim. Теперь пару слов для чего всё это нужно, во первых чтобы не захламлять основной vimrc(он у меня и так под 40кб), и во вторых такая локализация настроек очень удобна, тут нужно просто попробовать и вы поймёте что к чему.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Один нюанс: файл с настройками должен загружаться первее самого плагина (например для того чтобы определить глобальные переменные). Для того чтобы это было так, я начинаю имя файла со знака _.&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;






























&lt;span style=&quot;font-size: large;&quot;&gt;А теперь, что умеет мой vim:&lt;/span&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;

&amp;nbsp;&lt;/h4&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;






























Общее&lt;/h3&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;навигация по коду для многих языков (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=3465&quot; target=&quot;_blank&quot;&gt;tagbar&lt;/a&gt;) (лучшая замена &lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=273&quot; target=&quot;_blank&quot;&gt;taglist&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;навигация по файлам проекта (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=1658&quot; target=&quot;_blank&quot;&gt;nerdtree&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;нечёткий поиск по файлам и буферам (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=3736&quot; target=&quot;_blank&quot;&gt;ctrlp&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;удобные Textmate-like сниппеты (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=4043&quot; target=&quot;_blank&quot;&gt;neocomplcache-snippets-complete&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;улучшенное авто-завершение (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2620&quot; target=&quot;_blank&quot;&gt;neocomplcache&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;визуальные маркеры для слов и строк (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=1026&quot; target=&quot;_blank&quot;&gt;visualmark&lt;/a&gt;, &lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2666&quot; target=&quot;_blank&quot;&gt;markword&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;интеграция с системами контроля версий (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=90&quot; target=&quot;_blank&quot;&gt;vcscommand&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;комментирование/раскомментирование всего и вся (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=1218&quot; target=&quot;_blank&quot;&gt;nerdcommenter&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;автозакрытие скобок (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2754&quot; target=&quot;_blank&quot;&gt;delimitMate&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;подсветка ошибок на JavaScript (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=4057&quot; target=&quot;_blank&quot;&gt;jsflakes&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;шаблоны для новых файлов (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2834&quot; target=&quot;_blank&quot;&gt;vim-template&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;проверка правописания одновременно для русского и английского языка&lt;/li&gt;
&lt;li&gt;много чего еще по мелоч&lt;span style=&quot;font-size: small;&quot;&gt;и &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;






























&lt;span style=&quot;font-size: small;&quot;&gt;Для python &lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&quot;умное&quot; авто-завершение кода (&lt;a href=&quot;http://rope.sourceforge.net/ropevim.html&quot; target=&quot;_blank&quot;&gt;ropevim&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;рефакторинг кода&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;a href=&quot;http://rope.sourceforge.net/ropevim.html&quot; target=&quot;_blank&quot;&gt;ropevim&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;шелл питона с авто-завершением и прочими плюшками&lt;/span&gt; (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=3231&quot; target=&quot;_blank&quot;&gt;pyinteractive&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;подсветка ошибок, неиспользуемых переменных и пр. в коде (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2441&quot; target=&quot;_blank&quot;&gt;pyflakes&lt;/a&gt;)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;визуальный показ уровней отступов (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=3361&quot; target=&quot;_blank&quot;&gt;vim-indent-guides&lt;/a&gt;) &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;






























Для C/C++&lt;/h3&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&quot;умное&quot; авто-завершение кода &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;(&lt;a href=&quot;https://github.com/Shougo/neocomplcache-clang&quot; target=&quot;_blank&quot;&gt;neocomplcache-clang&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;переключение от заголовочного файла к реализации и обратно (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2590&quot; target=&quot;_blank&quot;&gt;FSwitch&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;проверка ошибок в коде (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2736&quot; target=&quot;_blank&quot;&gt;syntastic&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;компиляция и запуск (&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=3115&quot; target=&quot;_blank&quot;&gt;SingleCompile&lt;/a&gt;) &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;



&lt;ul&gt;




&lt;/ul&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Репозиротий на &lt;a href=&quot;https://github.com/clericJ/vim-dist&quot; target=&quot;_blank&quot;&gt;github&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;a href=&quot;http://clck.ru/d/eFKzUJeN1CzRq&quot; target=&quot;_blank&quot;&gt;Дистрибутив для Windows&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;(Лучший способ попробовать всё это. Требует наличия в системе установленного python 2.7)&lt;/span&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;







&amp;nbsp;&lt;/h2&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Плюс несколько скриншотов:&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: left;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY_mQijYg6RwkTsqMAUa4br0XWT-PpxUO6gE481FM62HB75p3wbnjEDSSMA4AsxGxqWSuEcT3k0FdUWQvhSnxbHaZGYO5rnrs0jkxShDJWA8ZXCWLKHiB-b-EUqf17w_rDnOMlOGy7zDjC/s1600/Screenshot-149.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;209&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY_mQijYg6RwkTsqMAUa4br0XWT-PpxUO6gE481FM62HB75p3wbnjEDSSMA4AsxGxqWSuEcT3k0FdUWQvhSnxbHaZGYO5rnrs0jkxShDJWA8ZXCWLKHiB-b-EUqf17w_rDnOMlOGy7zDjC/s320/Screenshot-149.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgytGhDGo6b0oUANZrBbhLeeylDaYHof2_MNRDIzN9BsB7ma8emD0OuhnLEj6KTyHsd41Ha6fQRy8E8Gh3wHwhoIzgDDzMhqHGPozlrYGJVYm5aNRAcAmINSq61trPF6I1LBeYanlykyq_j/s1600/Screenshot-150.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;206&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgytGhDGo6b0oUANZrBbhLeeylDaYHof2_MNRDIzN9BsB7ma8emD0OuhnLEj6KTyHsd41Ha6fQRy8E8Gh3wHwhoIzgDDzMhqHGPozlrYGJVYm5aNRAcAmINSq61trPF6I1LBeYanlykyq_j/s320/Screenshot-150.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmtvI1P9ZeUmUT3MY0rmtT38M7QIDWq2NkzKnCjn72N0zKi_svqsrPBVKgeDNtYvRk4L3SYfOxB8oJ76QeoqLOmUVzLxGWx7xzJNbkdoiT9vTysEBujZPuBBbSqISLd8hyphenhypheniN0KCIbfWSNM/s1600/Screenshot-151.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;208&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmtvI1P9ZeUmUT3MY0rmtT38M7QIDWq2NkzKnCjn72N0zKi_svqsrPBVKgeDNtYvRk4L3SYfOxB8oJ76QeoqLOmUVzLxGWx7xzJNbkdoiT9vTysEBujZPuBBbSqISLd8hyphenhypheniN0KCIbfWSNM/s320/Screenshot-151.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaq3pWLY0Ils0Jd25STh-2dTIroBWIjROGIqaRgLIGAMvPQ00n-jz17U7Otl-mbdgVR_As6tpq-tOvcCw2QgU45Wg0xTrB4RMiG2KEc0J9EkNeDvmHAMloW2qjvFzZ8NYF4M-LBURxPYhE/s1600/Screenshot-154.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;209&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaq3pWLY0Ils0Jd25STh-2dTIroBWIjROGIqaRgLIGAMvPQ00n-jz17U7Otl-mbdgVR_As6tpq-tOvcCw2QgU45Wg0xTrB4RMiG2KEc0J9EkNeDvmHAMloW2qjvFzZ8NYF4M-LBURxPYhE/s320/Screenshot-154.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDnXWqe8eOqEjKOLCcTfNn9_iADCvepOiKbTrYebp7yQL86v4G2iFP45btV6gm1d2W_aifA52tufEDYLLrZP-3m7H0OftA2XLkjgsHpuPQ9cCKnz9BQ_TPTrO-t_9MBM4dvz7IbdRlBTNk/s1600/Screenshot-153.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;206&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDnXWqe8eOqEjKOLCcTfNn9_iADCvepOiKbTrYebp7yQL86v4G2iFP45btV6gm1d2W_aifA52tufEDYLLrZP-3m7H0OftA2XLkjgsHpuPQ9cCKnz9BQ_TPTrO-t_9MBM4dvz7IbdRlBTNk/s320/Screenshot-153.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhWDqDdK0N1GMLRf06aLQQ5j5B-sVJLJTl2A5CypnZOZQlldz3GCvDlvYIkLj1rPujx4u2LfenZQz_5ChF3L03tD5Fdb9IdPJQqNEr80w8Dfjb4rtm8i0fRYhDYDnJsh19IiAK-gdof30s/s1600/Screenshot-152.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;209&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhWDqDdK0N1GMLRf06aLQQ5j5B-sVJLJTl2A5CypnZOZQlldz3GCvDlvYIkLj1rPujx4u2LfenZQz_5ChF3L03tD5Fdb9IdPJQqNEr80w8Dfjb4rtm8i0fRYhDYDnJsh19IiAK-gdof30s/s320/Screenshot-152.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8EAD9sQpgw1wSvnY2kgTyiP6LaweciBciWHQRkzYUW7ePhyyUGUaHYTsY_t3OpWpo0z2XVXstK-PzmG1g_apOU9MdZzVBWTs0kekLjecBrrjExJNY9b3Jgq5yBM2WwF3QgmJpu0AtQxcF/s1600/Screenshot-156.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;210&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8EAD9sQpgw1wSvnY2kgTyiP6LaweciBciWHQRkzYUW7ePhyyUGUaHYTsY_t3OpWpo0z2XVXstK-PzmG1g_apOU9MdZzVBWTs0kekLjecBrrjExJNY9b3Jgq5yBM2WwF3QgmJpu0AtQxcF/s320/Screenshot-156.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaq3pWLY0Ils0Jd25STh-2dTIroBWIjROGIqaRgLIGAMvPQ00n-jz17U7Otl-mbdgVR_As6tpq-tOvcCw2QgU45Wg0xTrB4RMiG2KEc0J9EkNeDvmHAMloW2qjvFzZ8NYF4M-LBURxPYhE/s1600/Screenshot-154.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8EAD9sQpgw1wSvnY2kgTyiP6LaweciBciWHQRkzYUW7ePhyyUGUaHYTsY_t3OpWpo0z2XVXstK-PzmG1g_apOU9MdZzVBWTs0kekLjecBrrjExJNY9b3Jgq5yBM2WwF3QgmJpu0AtQxcF/s1600/Screenshot-156.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;</description><link>http://lazycleric.blogspot.com/2012/06/vimrc.html</link><author>noreply@blogger.com (clericJ)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgytGhDGo6b0oUANZrBbhLeeylDaYHof2_MNRDIzN9BsB7ma8emD0OuhnLEj6KTyHsd41Ha6fQRy8E8Gh3wHwhoIzgDDzMhqHGPozlrYGJVYm5aNRAcAmINSq61trPF6I1LBeYanlykyq_j/s72-c/Screenshot-150.png" height="72" width="72"/><thr:total>8</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-6784312509695137743</guid><pubDate>Thu, 10 Nov 2011 12:38:00 +0000</pubDate><atom:updated>2012-06-19T22:23:20.561+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">программирование</category><title>Учим змею разговаривать</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Читая хабр, наткнулся на интересную &lt;a href=&quot;http://habrahabr.ru/blogs/powershell/60965/&quot;&gt;статью&lt;/a&gt;, рассказывающую о том, как научить PowerShell разговаривать с помощью Microsoft`овского Speech API (там же есть ссылка на отличную замену старому доброму Сэму). Так как ставить и осваивать PowerShell только для того чтобы побаловаться, было лениво, я занялся поисками модулей с нужным мне функционалом, под python.

В итоге наткнулся на отличную библиотеку под названием &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=65529&amp;amp;package_id=74248&quot;&gt;pyTTS&lt;/a&gt;.
И так приступим.

&lt;span style=&quot;font-style: italic;&quot;&gt;Для работы нам так же понадобится:
&lt;a href=&quot;http://www.cs.unc.edu/Research/assist/packages/SAPI5SpeechInstaller.msi&quot;&gt;Microsoft SAPI 5.0 or 5.1 redistributable&lt;/a&gt;
&lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=78018&quot;&gt;win32all Python Extensions&lt;/a&gt;
Советую так-же скачать голос &lt;a href=&quot;http://www.acapela-group.com/downloads.php&quot;&gt;Алёна&lt;/a&gt;, фирмы Acapela, распространяющийся по 30-ти дневной триал лицензии
&lt;/span&gt;
Начнём с простого:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;import pyTTS
tts = pyTTS.Create()&amp;nbsp;
tts.Speak(&quot;Hello World&quot;)&amp;nbsp;
&lt;/pre&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;Кто произнесёт сакраментальную фразу, будет зависеть от установленного по умолчанию в системе голоса, для Windows XP это небезызвестный Microsoft Sam, которым я пугал детей моих друзей.

Список всех установленных в системе голосов можно вывести так:
&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;print tts.voices
&lt;/pre&gt;
Вот например, что напечаталось у меня:
&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;{u&#39;Alyona22k&#39;: &amp;lt;win32com.gen_py.Microsoft Speech Object Library.ISpeechObjectToken instance at 0x15286320&amp;gt;,
u&#39;MSSam&#39;: &amp;lt;win32com.gen_py.Microsoft Speech Object Library.ISpeechObjectToken instance at 0x15286224&amp;gt;}
&lt;/pre&gt;
Видно что &lt;code&gt;tts.voices&lt;/code&gt; это просто словарь, ключами к которому являются названия голосов.
Попробуем сменить железного Сэма, на кого то с более приятным голосом:
&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;tts.SetVoiceByName(u&quot;Alyona22k&quot;)
tts.Speak(u&quot;Привет мир&quot;)
&lt;/pre&gt;
Так же с помощью методов &lt;code&gt;SetVolume&lt;/code&gt; и &lt;code&gt;SetRate&lt;/code&gt; можно изменять громкость и скорость произношения.

Поковырявшись в библиотеке, я решил написать что то, хоть мало мальски полезное, а именно, скрипт произносящий заголовки новостных лент. За основу был взят &lt;a href=&quot;http://bir2su.blogspot.com/2008/09/simple-rss-feed-reader-in-python.html&quot;&gt;этот&lt;/a&gt; код. Вот что в итоге получилось:
&lt;code&gt;&lt;/code&gt;&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;# -*- coding: utf-8 -*-

from urllib2 import urlopen
from xml.sax import make_parser, ContentHandler
import sys
import pyTTS


class RSSHandler(ContentHandler):

    def __init__(self, tts):
        ContentHandler.__init__(self)
        self._tts = tts
        self.__initem_flag = False
        self.__intitle_flag = False


    def characters(self, data):
        if self.__intitle_flag:
            self._tts.Speak(data)
            sys.stdout.write(data.encode(sys.stdout.encoding))


    def startElement(self, tag, attrs):
        if tag == &quot;item&quot;:
            self.__initem_flag = True

        if tag == &quot;title&quot; and self.__initem_flag:
            self.__intitle_flag = True


    def endElement(self, tag):
        if tag == &quot;title&quot; and self.__intitle_flag:
            sys.stdout.write(&quot;\n&quot;)
            self.__intitle_flag = False

        if tag == &quot;item&quot;:
            self.__initem_flag = False


def readFeedTitle(url, tts):
    infile = urlopen(url)
    parser = make_parser()

    parser.setContentHandler(RSSHandler(tts))
    parser.parse(infile)


def main():
    tts = pyTTS.Create()

    # Если установлен голос Алёна, используем его
    # если в вашей системе есть другие русские голоса, просто поменяйте имя
    if u&quot;Alyona22k&quot; in tts.voices:
        tts.SetVoiceByName(u&quot;Alyona22k&quot;)

        # прочитаем заголовки новостей с python.su на русском
        readFeedTitle(&quot;http://python.su/feeds/blog/&quot;, tts)

    # или новости с python.org голосом утстановленным по умолчанию в системе
    else:
        readFeedTitle(&quot;http://python.su/feeds/blog/&quot;, tts)


if(__name__ == &#39;__main__&#39;):
    main()
&lt;/pre&gt;
&lt;/div&gt;</description><link>http://lazycleric.blogspot.com/2012/06/blog-post.html</link><author>noreply@blogger.com (clericJ)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-8801145287269826719</guid><pubDate>Mon, 29 Mar 2010 19:20:00 +0000</pubDate><atom:updated>2012-07-04T00:59:05.617+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">vim</category><title>Tesla theme for gvim</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtKk1NnlCXAJVy03YsNzBUR1HbzWF9QAv_mJAz7N7L7k-IhhhORf9o9Wx_kINkwgBodqBT4a8YkT20Py6LVujk5QGoP7VV0hLeVmyFyxSIaGvb8hZLYqhEuu0LUciMsJ9TJ0sAomxaC3Ve/s1600/Screenshot-167.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;150&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtKk1NnlCXAJVy03YsNzBUR1HbzWF9QAv_mJAz7N7L7k-IhhhORf9o9Wx_kINkwgBodqBT4a8YkT20Py6LVujk5QGoP7VV0hLeVmyFyxSIaGvb8hZLYqhEuu0LUciMsJ9TJ0sAomxaC3Ve/s200/Screenshot-167.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class=&quot;cut&quot;&gt;Не так давно я делился своим &lt;a href=&quot;http://lazycleric.blogspot.com/2009/11/vimrc.html&quot;&gt;конфигом &lt;/a&gt;для vim. Сейчас же я решил показать, тему которой пользуюсь. Подбирая цвета, я прежде всего думал о комфорте глаз.&lt;br /&gt;Скачать можно &lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=3035&quot;&gt;отсюда&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;cut&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;cut&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;cut&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;cut&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;cut&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;





&lt;span class=&quot;cut&quot;&gt;С++ tagbar:&lt;/span&gt;&lt;/h4&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtKk1NnlCXAJVy03YsNzBUR1HbzWF9QAv_mJAz7N7L7k-IhhhORf9o9Wx_kINkwgBodqBT4a8YkT20Py6LVujk5QGoP7VV0hLeVmyFyxSIaGvb8hZLYqhEuu0LUciMsJ9TJ0sAomxaC3Ve/s1600/Screenshot-167.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtKk1NnlCXAJVy03YsNzBUR1HbzWF9QAv_mJAz7N7L7k-IhhhORf9o9Wx_kINkwgBodqBT4a8YkT20Py6LVujk5QGoP7VV0hLeVmyFyxSIaGvb8hZLYqhEuu0LUciMsJ9TJ0sAomxaC3Ve/s320/Screenshot-167.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNW-SXhyaTSJSi8OrzDNqu6ltwrVPr9rsnOzWhL6a3EOZ67yLRgI6-Q4TlKuMsiuCyg3UcqGC_k_M2iiXgbqiwGsRVYNYUOyoiB96Q7sEqePfZejdh_tLiQesp9AI2FNgs0edAUeKFrTCH/s1600/Screenshot-157.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;





&amp;nbsp;C++, autocomplete window:&lt;/h4&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilNQX-GdOuYysDm0q3jLFM6g9XAn0Ba__tUwqvVAlAtOCeXfCZD0lwrts-EV6gBsMpzECT8IQqefSNw0jiEuPJcgQnSDBpCc23Qm5hXpcKaMZs_8vMUl5jLgGq8AxK_AD2-LnW3DVplUdf/s1600/Screenshot-166.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilNQX-GdOuYysDm0q3jLFM6g9XAn0Ba__tUwqvVAlAtOCeXfCZD0lwrts-EV6gBsMpzECT8IQqefSNw0jiEuPJcgQnSDBpCc23Qm5hXpcKaMZs_8vMUl5jLgGq8AxK_AD2-LnW3DVplUdf/s320/Screenshot-166.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOZzkQFa1lWIrOc3CJ8-oMTCYxGO5MZ7-CcV6F7p1_Tyu9HNfhYvh02Mg-TXXUYgQWy07UViUvrE_gsmUp27XaRuO6VEp9FJQgdn3AojFJl0RHK1J4p7LVTj02DLLllyEyCUPHZ5EDsAr8/s1600/Screenshot-160.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;





&amp;nbsp;Python, nerdtree:&lt;/h4&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLiAIcMgBx1D24g63LLl-hBtWRONW0Ch2Zny9c1JsNuSEPv9nd3F2Or14S_ls1fm2tF1HmzQMjPG4L4CO8OXMiiUdPFunMNjIRzHqP7iU4U8uFFVEKp_0Pl-uCPLV8ShGJvaMZGTathoTl/s1600/Screenshot-170.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLiAIcMgBx1D24g63LLl-hBtWRONW0Ch2Zny9c1JsNuSEPv9nd3F2Or14S_ls1fm2tF1HmzQMjPG4L4CO8OXMiiUdPFunMNjIRzHqP7iU4U8uFFVEKp_0Pl-uCPLV8ShGJvaMZGTathoTl/s320/Screenshot-170.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1OM1xIB5kFvj8l3Rb2CbceHSRXwlZ6A59HVWNsxPqXCj1KIpqBXSk4jcX5Z_EqExHTJgkc_b2YnzvZCPMExkro_BoRXnJv0dtM4skUg2PQDIojwtLn82kGcK34WRsqsLHI3twHCM7rXC0/s1600/Screenshot-161.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;b&gt;Html:&lt;/b&gt;&lt;/h4&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEGIm1gngXzeaSOH-nQtezyg-LzQXiu8ehhrQjccDQSN0tlj7Tt3w6Rqcn_7pDn7dRq9iB5De2OlFlqbLJiGr2Nni46HFNfLGei-ua0cFNZCwVqrnQiP6ig60w2GBcXt0aaZkGiNih7Cdc/s1600/Screenshot-171.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEGIm1gngXzeaSOH-nQtezyg-LzQXiu8ehhrQjccDQSN0tlj7Tt3w6Rqcn_7pDn7dRq9iB5De2OlFlqbLJiGr2Nni46HFNfLGei-ua0cFNZCwVqrnQiP6ig60w2GBcXt0aaZkGiNih7Cdc/s320/Screenshot-171.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;</description><link>http://lazycleric.blogspot.com/2010/03/vim.html</link><author>noreply@blogger.com (clericJ)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtKk1NnlCXAJVy03YsNzBUR1HbzWF9QAv_mJAz7N7L7k-IhhhORf9o9Wx_kINkwgBodqBT4a8YkT20Py6LVujk5QGoP7VV0hLeVmyFyxSIaGvb8hZLYqhEuu0LUciMsJ9TJ0sAomxaC3Ve/s72-c/Screenshot-167.png" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-6959762241196487677</guid><pubDate>Tue, 09 Mar 2010 23:45:00 +0000</pubDate><atom:updated>2012-06-19T21:16:36.042+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">программирование</category><title>О Ruby и блоках кода</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span class=&quot;cut&quot;&gt;&lt;br /&gt;Нашёл сегодня любопытную &lt;a href=&quot;http://habrahabr.ru/blogs/ruby/86882/&quot;&gt;статью&lt;/a&gt; на хабре. Прочитав её, лишний раз убедился что для объективного сравнения двух языков, знать нужно оба...&lt;/span&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;Пример исключительности блоков кода Ruby был такой:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;
&lt;pre class=&quot;brush: ruby&quot;&gt;
class Example
  @@lock = Mutex.new
 
  def example
    @@lock.synchronize do
      # разные опасные штуки
    end
  end
end
&lt;/pre&gt;
&lt;br /&gt;Цитата:&lt;br /&gt;&quot;Важно отметить, что synchronize — это нормальный Ruby-метод. Оригинальная версия, написанная на чистом Ruby, выглядит следующим образом:&quot;&lt;br /&gt;
&lt;pre class=&quot;brush: ruby&quot;&gt;
def synchronize
  lock
  begin
    yield
  ensure
    unlock
  end
end
&lt;/pre&gt;
&lt;br /&gt;Тут же утверждалось что:&lt;br /&gt;&quot;Аналогично, Python требовал использование try/finally до версии Python 2.5, когда была добавлена специальная языковая функция для обработки идиомы try/finally. В случае 2.5, объект, переданный в with, должен реализовать специальный протокол (включая методы __enter__ и __exit__), поэтому выражение with не может быть использовано как общецелевые и легковесные блоки Ruby.&quot;&lt;br /&gt;&lt;br /&gt;Вот тут то и сказывается неосведомлённость автора о библиотеке contextmanagerlib, входящей stdlib Python&#39;а. С её помощью synchronize будет выглядеть как обычная функция:&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;
@contextmanager
def synchronize():
    lock()
    try:
        yield
    finally:
        unlock()
&lt;/pre&gt;
&lt;br /&gt;Использование тривиально:&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;
with synchronize():
    # some code
&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;К чему я всё это? Python и Ruby два отличных языка, с своими достоинствами и недостатками, однако незнание некоторых вещей о языке при сравнении, не должно быть его недостатком.&lt;/div&gt;</description><link>http://lazycleric.blogspot.com/2010/03/ruby.html</link><author>noreply@blogger.com (clericJ)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-2634545659118138743</guid><pubDate>Thu, 05 Nov 2009 00:50:00 +0000</pubDate><atom:updated>2012-06-20T00:31:45.563+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">vim</category><title>Мой vimrc</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span class=&quot;cut&quot;&gt;&lt;br /&gt;Решил выложить свои настройки vim&#39;а, возможно кому то будет интересно.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;cut&quot;&gt;&lt;i&gt;Примечание: данный конфиг не является актуальным,&amp;nbsp; свежий можете посмотреть &lt;a href=&quot;http://lazycleric.blogspot.com/2012/06/vimrc.html&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt;.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span bgcolor=&quot;#192636&quot; text=&quot;#a4d3ee&quot;&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;span bgcolor=&quot;#192636&quot; text=&quot;#a4d3ee&quot;&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span bgcolor=&quot;#192636&quot; text=&quot;#a4d3ee&quot;&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; vim: fdm=marker fdc=2 foldlevelstart=0 sts=4 sw=4 tw=64 fileencoding=utf-8:&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Файл пользовательских настроек vim (7.3)&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Maintrainer:&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; clericJ&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot;Text/Code Navigation&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    F1  Help&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    F2  Code Explorer&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    F3  Find Next&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    F4  &lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot;Explore Buffers and Files&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    F5  Execute buffer&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    F6  Buffer Explorer&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    F7  List of Files in Directory&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    F8  File Explorer&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot;Manipulate Windows and Buffers&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    F9  Restore Last Session&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    F10 Toggle Fullscreen&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    F11 Close Current Window&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    F12 Delete Current Buffer&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Установленные плагины и их зависимости {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;taglist&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;           просмотр списка тегов/навигатор по коду&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=273&quot;&gt;http://www.vim.org/scripts/script.php?script_id=273&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   util: ctags.exe&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;themes&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; дополнительные темы&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;matrix&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; для входа в матрицу ввести команду :Matrix&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=1189&quot;&gt;http://www.vim.org/scripts/script.php?script_id=1189&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;fencview&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; работа с кодировками/авто-определение кодировок&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=1708&quot;&gt;http://www.vim.org/scripts/script.php?script_id=1708&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   util: iconv.dll&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;NERD_commenter&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; работа с комментариями в коде&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=1218&quot;&gt;http://www.vim.org/scripts/script.php?script_id=1218&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;NERD_Tree&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; просмотр файловой системы&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=1658&quot;&gt;http://www.vim.org/scripts/script.php?script_id=1658&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;matchit&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; расширенная команда % для HTML, LaTX, ...&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=39&quot;&gt;http://www.vim.org/scripts/script.php?script_id=39&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;mru&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; показ последних открытых файлов&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=521&quot;&gt;http://www.vim.org/scripts/script.php?script_id=521&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;sessionman&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; удобное управление сессиями&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2010&quot;&gt;http://www.vim.org/scripts/script.php?script_id=2010&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;pyflakes&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; подсветка ошибок в коде на python на &#39;лету&#39;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2441&quot;&gt;http://www.vim.org/scripts/script.php?script_id=2441&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; requires: python+&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;calendar&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; удобный календарь&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=52&quot;&gt;http://www.vim.org/scripts/script.php?script_id=52&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;fuzzyfinder&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; быстрый доступ к многим возможностям&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=1984&quot;&gt;http://www.vim.org/scripts/script.php?script_id=1984&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;neocomplcache&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; улучшенное авто-завершение,&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; авто-открытие списка авто-завершения, TextMate-like сниппеты&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2620&quot;&gt;http://www.vim.org/scripts/script.php?script_id=2620&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   util: ctags.exe &lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;ropevim&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; утилита для рефакторинга кода на python&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; так-же включающая функции Code assist&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://rope.sourceforge.net/ropevim.html&quot;&gt;http://rope.sourceforge.net/ropevim.html&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; requires: python+&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;vcscommand&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; интеграция с системами контроля версий&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=90&quot;&gt;http://www.vim.org/scripts/script.php?script_id=90&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;css_color&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Предпросмотр цветов в css файлах&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2150&quot;&gt;http://www.vim.org/scripts/script.php?script_id=2150&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Mark&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Подсветка всех слов в файле, которые совпадают с словом под курсором&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2666&quot;&gt;http://www.vim.org/scripts/script.php?script_id=2666&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;visualmark&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Визуальная подсветка отметок в файле&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=1026&quot;&gt;http://www.vim.org/scripts/script.php?script_id=1026&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;prettyprint&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Печать переменных vim в более презентативном виде&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2860&quot;&gt;http://www.vim.org/scripts/script.php?script_id=2860&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;easytags&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Автоматическая генерация и поддержание в актуальном состоянии&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; файла с тэгами для ctags&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=3114&quot;&gt;http://www.vim.org/scripts/script.php?script_id=3114&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;vimshell&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Лучшая интеграция vim с системой (полноэкранный режим,&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; открытие URL, фоновое выполнение системных команд)&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=3123&quot;&gt;http://www.vim.org/scripts/script.php?script_id=3123&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; }}}&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Замены стандартных файлов {{{&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; syntax/python.vim     заменен&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;}}}&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Изменения стандартных файлов {{{&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;plugin/sourceExplorer.vim&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; - В нескольких местах в функции SrcExpl_UpdateTags изменён формат команды exe,&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   вызывающий g:SrcExpl_updateTagsCmd:&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   было&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;       exe &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;!&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; . g:SrcExpl_updateTagsCmd&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   стало&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;       exe &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;silent!&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; . g:SrcExpl_updateTagsCmd&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   Изменение нужно для того чтобы команда выполнялась без&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   открытия окна терминала и не требовала нажатий Enter после&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   выполнения, т.е. выполнялась в silent режиме&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; - В функции SrcExpl_ColorExpr заменена строка:&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;       hi link SrcExpl_HighLight term=bold guifg=Black guibg=Magenta ctermfg=Black ctermbg=Magenta&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   на&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;       hi link SrcExpl_HighLight Search&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   замена нужна для нормального отображения подсвечиваемого&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   слова в окне SourceExplorer&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;syntax/css.vim&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; В файл добавлен код плагина css_color&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ( &lt;/span&gt;&lt;span class=&quot;Underlined&quot;&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2150&quot;&gt;http://www.vim.org/scripts/script.php?script_id=2150&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; )&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Primary&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;                 Приоритетные настройки {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; s:iswin &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&#39;win32&#39;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&#39;win64&#39;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; s:lastsession_file &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;~/lastsession.vim&#39;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Отключение совместимости с vi&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;nocompatible&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Использовать англоязычное меню&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;langmenu&lt;/span&gt;=en

&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; !&lt;span class=&quot;Function&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&#39;python&#39;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Не загружать плагин, если в системе не установлен python&lt;/span&gt;
&lt;span class=&quot;Type&quot;&gt;python&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; EOF
import &lt;span class=&quot;Statement&quot;&gt;vim&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;try&lt;/span&gt;:
    import os
except ImportError:
    &lt;span class=&quot;Normal&quot;&gt;vim.command&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&#39;let let g:loaded_PyInteractive = 1&#39;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
EOF
&lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Quick&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;                   Быстрые настройки {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; (0 - откл. 1 - вкл.)&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; us - USer option&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; s:us_folding        &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;     &lt;span class=&quot;Comment&quot;&gt;&quot; Свертывание участков кода&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; s:us_autosaveses    &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;     &lt;span class=&quot;Comment&quot;&gt;&quot; Авто-сохранение сессий (загрузка посл. F6)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; s:us_linewrap       &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;     &lt;span class=&quot;Comment&quot;&gt;&quot; Перенос длинных строк&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; s:us_scratch_buffer &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;     &lt;span class=&quot;Comment&quot;&gt;&quot; Сделать из безымянного буфера scratch буфер&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Includes&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;                Подключение доп.файлов настроек {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;$VIMRUNTIME&lt;/span&gt;/mswin&lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;vim&lt;/span&gt;            &lt;span class=&quot;Comment&quot;&gt;&quot; Windows-like настройки&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;behave&lt;/span&gt; &lt;span class=&quot;Statement&quot;&gt;mswin&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Basic&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;                   Базовые настройки {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Включение подсветки синтаксиса&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;syntax&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;on&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Включение определения типов файлов&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;filetype&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;on&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;filetype&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;plugin&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;on&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;filetype&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;indent&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;on&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Отключение оповещения морганием и звуком&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;novisualbell&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;t_vb&lt;/span&gt;=

&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;helplang&lt;/span&gt;=en&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;ru

&lt;span class=&quot;Comment&quot;&gt;&quot; Переход на предыдущую/следующую строку&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;backspace&lt;/span&gt;=indent&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;eol&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;start

&lt;span class=&quot;Comment&quot;&gt;&quot; Перемещать курсор на следующую строку при нажатии на клавиши вправо-влево и пр.&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;whichwrap&lt;/span&gt;+=&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;[&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;]

&lt;span class=&quot;Comment&quot;&gt;&quot; История команд&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;history&lt;/span&gt;=150

&lt;span class=&quot;Comment&quot;&gt;&quot; Максимальное количество изменений, которые могут быть отменены&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;undolevels&lt;/span&gt;=5000

&lt;span class=&quot;Comment&quot;&gt;&quot; Не создавать резервные копии файлов&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;nobackup&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Кодировка по умолчанию&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;encoding&lt;/span&gt;=utf-8
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;fileencoding&lt;/span&gt;=utf-8

&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;fileencodings&lt;/span&gt;=utf-8&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;cp1251&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;cp866&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;koi8-r

&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;fileformat&lt;/span&gt;=unix          &lt;span class=&quot;Comment&quot;&gt;&quot; Формат файла по умолчанию&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;fileformats&lt;/span&gt;=unix&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;dos&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;mac

&lt;span class=&quot;Comment&quot;&gt;&quot; Не выгружать буфер, при переключении на другой&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Это позволяет редактировать несколько файлов в один и тот же момент без&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; необходимости сохранения каждый раз когда переключаешься между ними&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;hidden&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;autoread&lt;/span&gt;            &lt;span class=&quot;Comment&quot;&gt;&quot; Включение автоматического перечтения файла при изменении&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;autochdir&lt;/span&gt;           &lt;span class=&quot;Comment&quot;&gt;&quot; Автоматически устанавливать текущей, директорию отрытого файла&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;browsedir&lt;/span&gt;=buffer    &lt;span class=&quot;Comment&quot;&gt;&quot; Начинать обзор с каталога текущего буфера&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;confirm&lt;/span&gt;             &lt;span class=&quot;Comment&quot;&gt;&quot; Включение диалогов с запросами&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Опции авто-дополнения&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;completeopt&lt;/span&gt;=longest&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;menuone

&lt;span class=&quot;Comment&quot;&gt;&quot; Показывать все возможные кандидаты при авто-завершении команд&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;set nowildmenu&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;wildmode&lt;/span&gt;=list&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;longest&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;full

&lt;span class=&quot;Comment&quot;&gt;&quot; Включение проверки орфографии, для русского и английского&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;spelllang&lt;/span&gt;=ru_yo&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;en_us
&lt;span class=&quot;Comment&quot;&gt;&quot;set spell&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Раскладка по умолчанию - английская&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;iminsert&lt;/span&gt;=0

&lt;span class=&quot;Comment&quot;&gt;&quot; Не перерисовывать окно при работе макросов&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;lazyredraw&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;View&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;                    Вид {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;ruler&lt;/span&gt;       &lt;span class=&quot;Comment&quot;&gt;&quot; Включение отображения позиции курсора (всё время)&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;mouse&lt;/span&gt;=a     &lt;span class=&quot;Comment&quot;&gt;&quot; Подключение мыши&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;mousehide&lt;/span&gt;   &lt;span class=&quot;Comment&quot;&gt;&quot; Прятать указатель во время набора текста&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;cursorline&lt;/span&gt;  &lt;span class=&quot;Comment&quot;&gt;&quot; Включить подсветку текущей позиции курсора&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;mousemodel&lt;/span&gt;=popup

&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&#39;gui_running&#39;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;    &quot; Шрифт по умолчанию&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; s:iswin
    &lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;gfn&lt;/span&gt;=DejaVu_Sans_Mono&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;h10&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;cRUSSIAN&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;consolas&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;h11

    &lt;span class=&quot;Statement&quot;&gt;elseif&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;gui_gtk2&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;gfn&lt;/span&gt;=DejaVu\ Sans\ Mono\ 10
    &lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;    &quot; Цветовая схема по умолчанию&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;colorscheme&lt;/span&gt; lucius

&lt;span class=&quot;Statement&quot;&gt;elseif&lt;/span&gt; s:iswin
    &lt;span class=&quot;Statement&quot;&gt;colorscheme&lt;/span&gt; desert
&lt;span class=&quot;Statement&quot;&gt;else&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;colorscheme&lt;/span&gt; wombat256
&lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; s:iswin
&lt;span class=&quot;Comment&quot;&gt;    &quot; Установка высоты и ширины окна&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;winsize&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;90&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;30&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;guioptions&lt;/span&gt;+=b   &lt;span class=&quot;Comment&quot;&gt;&quot; Включение горизонтального скролл-бара&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;guioptions&lt;/span&gt;-=T   &lt;span class=&quot;Comment&quot;&gt;&quot; Убрать toolbar&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;set guioptions+=c   &quot; Отключение графических диалогов&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;set guioptions-=e   &quot; Замена графических табов, текстовыми&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;number&lt;/span&gt;          &lt;span class=&quot;Comment&quot;&gt;&quot; Включение отображения номеров строк&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;shortmess&lt;/span&gt;+=I    &lt;span class=&quot;Comment&quot;&gt;&quot; Отключение приветственного сообщения&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;showtabline&lt;/span&gt;=2   &lt;span class=&quot;Comment&quot;&gt;&quot; Показывать по умлочанию строку со вкладками&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;wildmenu&lt;/span&gt;        &lt;span class=&quot;Comment&quot;&gt;&quot; Показывать меню в командной строке&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;                    &quot; для выбора вариантов авто-дополнения&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;showmatch&lt;/span&gt;       &lt;span class=&quot;Comment&quot;&gt;&quot; Довсвечивать совпадающую скобку&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;list&lt;/span&gt;            &lt;span class=&quot;Comment&quot;&gt;&quot; Подсвечивать некоторые символы&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Установка символов для подсветки&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;listchars&lt;/span&gt;=tab&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;▹·&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;trail&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;·&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;extends&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;»&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;precedes&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;«&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;nbsp&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;×

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Statusline&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;               Статусная строка {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Включение отображения незавершенных команд в статусной строке&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;showcmd&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Всегда отображать статусную строку&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;laststatus&lt;/span&gt;=2

&lt;span class=&quot;Statement&quot;&gt;hi&lt;/span&gt; StatusLineBufferNumber &lt;span class=&quot;Type&quot;&gt;guifg&lt;/span&gt;=&lt;span class=&quot;PreProc&quot;&gt;fg&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;guibg&lt;/span&gt;=&lt;span class=&quot;PreProc&quot;&gt;bg&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;gui&lt;/span&gt;=&lt;span class=&quot;PreProc&quot;&gt;bold&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Формат статусной строки&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=\ %#StatusLineBufferNumber#
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=[%n]    &lt;span class=&quot;Comment&quot;&gt;&quot; Номер буфера&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; stl&lt;span class=&quot;Operator&quot;&gt;+=&lt;/span&gt;%*\
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=%&lt;span class=&quot;PreProc&quot;&gt;&amp;lt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=%f      &lt;span class=&quot;Comment&quot;&gt;&quot; Имя файла загруженного в буфер&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; stl&lt;span class=&quot;Operator&quot;&gt;+=&lt;/span&gt;%*\
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=[%{&amp;amp;ft} &lt;span class=&quot;Comment&quot;&gt;&quot; Тип файла, загруженного в буфер, например [cpp]&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; stl&lt;span class=&quot;Operator&quot;&gt;+=&lt;/span&gt;\ \|\
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=%{&amp;amp;fileencoding} &lt;span class=&quot;Comment&quot;&gt;&quot; Кодировка файла&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; stl&lt;span class=&quot;Operator&quot;&gt;+=&lt;/span&gt;\ \|\
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=%{&amp;amp;ff}] &lt;span class=&quot;Comment&quot;&gt;&quot; Формат файла&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=%=      &lt;span class=&quot;Comment&quot;&gt;&quot; Выравнивание по правому краю&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; stl&lt;span class=&quot;Operator&quot;&gt;+=&lt;/span&gt;\
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=Line&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=\ %l/   &lt;span class=&quot;Comment&quot;&gt;&quot; Номер строки&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=%L      &lt;span class=&quot;Comment&quot;&gt;&quot; Количество строк в буфере&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; stl&lt;span class=&quot;Operator&quot;&gt;+=&lt;/span&gt;\
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=Col&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=\ %3v   &lt;span class=&quot;Comment&quot;&gt;&quot; Номер колонки&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; stl&lt;span class=&quot;Operator&quot;&gt;+=&lt;/span&gt;\
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=[%P]    &lt;span class=&quot;Comment&quot;&gt;&quot; Позиция текста, отображаемого в окне&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;                 &quot; по отношению к началу файла в процентах&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=%#error#%m%*       &lt;span class=&quot;Comment&quot;&gt;&quot; Флаг состояния несохранённых изменений&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;stl&lt;/span&gt;+=%#warningmsg#%r%*  &lt;span class=&quot;Comment&quot;&gt;&quot; Флаг состояния &#39;только для чтения&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Показ нескольких типов предупреждений связанных с некорректной работой с&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; отступами:&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;[mixed-indenting]&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; - В случае если в файле для задания отступов совместно&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; используются пробелы и символы табуляции&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;[expandtab-disabled]&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; - Если опция expandtab отключена, но в файле для&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; задания отступов применяются пробелы&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;[expandtab-enabled]&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; - Если опция expandtab активна, но для задания&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; отступов используются символы табуляции&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;statusline&lt;/span&gt;+=%#error#
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;statusline&lt;/span&gt;+=%{&lt;span class=&quot;Function&quot;&gt;StatuslineTabWarning&lt;/span&gt;()}
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;statusline&lt;/span&gt;+=%*

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Indent&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;                  Отступы и табуляция {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;autoindent&lt;/span&gt;                          &lt;span class=&quot;Comment&quot;&gt;&quot; Наследовать отступы предыдущей строки&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;set smartindent                         &quot; Включить &#39;умные&#39; отступы&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;expandtab&lt;/span&gt;                           &lt;span class=&quot;Comment&quot;&gt;&quot; Преобразование таба в пробелы&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;shiftwidth&lt;/span&gt;=4                        &lt;span class=&quot;Comment&quot;&gt;&quot; Размер табуляции по умолчанию&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;softtabstop&lt;/span&gt;=4
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;tabstop&lt;/span&gt;=4

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Search&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;                  Поиск текста {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;hlsearch&lt;/span&gt;        &lt;span class=&quot;Comment&quot;&gt;&quot; Включение подсветки слов при поиске&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;incsearch&lt;/span&gt;       &lt;span class=&quot;Comment&quot;&gt;&quot; Использовать поиск по мере набора&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Использовать регистра-зависимый поиск (для &lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; регистра-независимого использовать \с в конце строки шаблона)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;noignorecase&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; В режиме поиска используется раскладка, заданная по умолчанию&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;imsearch&lt;/span&gt;=-1

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Folding&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;                 Свертывание блоков текста {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; s:us_folding
&lt;span class=&quot;Comment&quot;&gt;    &quot; Включение складок&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;foldenable&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;    &quot; Ширина колонки&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot;set foldcolumn=4&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;    &quot; Опция задаёт значение опции &#39;foldlevel&#39; в начале редактирования нового&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot; буфера в окне. Её полезно использовать для закрытия всех складок в&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot; файле в начале редактирования (при значении 0), закрытия некоторых&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot; складок (при значении от 1) или открывания всех складок (при значении 99)&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;foldlevelstart&lt;/span&gt;=99

&lt;span class=&quot;Comment&quot;&gt;    &quot; Опция задаёт метод образования складок для текущего окна.&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot; Список возможных значений:&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot;   manual  Складки создаются вручную.&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot;   indent  Складка формируется строками с одинаковыми отступами.&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot;   expr    Уровень складки для строки задаётся значением опции &#39;foldexpr&#39;.&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot;   marker  Складки задаются с использованием маркеров.&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot;   syntax  Складки задаются в соответствии с правилами подсветки синтаксиса.&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot;   diff    В складки помещаются неизменённые фрагменты текста&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;foldmethod&lt;/span&gt;=indent

&lt;span class=&quot;Comment&quot;&gt;    &quot; Опция назначает максимальное количество вложений складок для методов&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;indent&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; и &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;syntax&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;. Опция позволяет избежать создания слишком&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot; большого количества складок. Использование значения, большего, чем 20,&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot; не работает, поскольку встроенное ограничение количества вложений в&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot; складках соответствует 20&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;foldnestmax&lt;/span&gt;=3

&lt;span class=&quot;Statement&quot;&gt;else&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;foldmethod&lt;/span&gt;=manual

&lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Sessions&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;                Сессии {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Опции сессий&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;sessionoptions&lt;/span&gt;=curdir&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;buffers&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;folds&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;tabpages&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;winpos&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;help

&lt;span class=&quot;Comment&quot;&gt;&quot; Опции помогают переносить файлы сессий с *nix`ов в ms-windows и наоборот&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;sessionoptions&lt;/span&gt;+=unix&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;slash

&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; s:us_autosaveses
&lt;span class=&quot;Comment&quot;&gt;    &quot; Авто-сохранение сессии при закрытии vim`a (загрузка F6 в норм. режиме)&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;autocmd VimLeavePre * silent mksession!&#39;&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; s:lastsession_file
&lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;LineWrap&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;                Перенос длинных строк {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; s:us_linewrap
&lt;span class=&quot;Comment&quot;&gt;    &quot; Задать ширину строки&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot;set textwidth=79&lt;/span&gt;

    &lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; v:version &lt;span class=&quot;Operator&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;703&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;        &quot; Подсвечивать границы&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;colorcolumn&lt;/span&gt;=80
    &lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot; Перенос по словам&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;linebreak&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;else&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot; Запретить перенос строк&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;nowrap&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;    &quot; показывать символы &amp;gt; или &amp;lt; если есть, что слева/справа строки&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;listchars&lt;/span&gt;+=precedes&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;&amp;lt;&lt;span class=&quot;Statement&quot;&gt;,&lt;/span&gt;extends&lt;span class=&quot;Statement&quot;&gt;:&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;User Shortcuts&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;          Горячие клавиши {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Открытие командной строки помощи (plugin-FuzzyFinder)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-F1&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :FufHelp&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-F1&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:FufHelp&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-F1&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:FufHelp&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Список тегов (plugin-taglist)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F2&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;Esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:TlistToggle&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F2&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:TlistToggle&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F2&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:TlistToggle&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Найти следующее соответствие, все остальные так же подсвечиваются &lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F3&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :set hlsearch&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;CR&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;n
&lt;span class=&quot;Statement&quot;&gt;vmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F3&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :set hlsearch&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;CR&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;n i
&lt;span class=&quot;Statement&quot;&gt;imap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F3&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :set hlsearch&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;CR&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;n i

&lt;span class=&quot;Comment&quot;&gt;&quot; Отключение подсведки найденных выражений&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-F3&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :nohlsearch&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;CR&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-F3&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;Esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:nohlsearch&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;CR&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-F3&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;Esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:nohlsearchi&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;CR&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;gv

&lt;span class=&quot;Comment&quot;&gt;&quot; Выполнение/Открытие файла&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F5&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:call &lt;span class=&quot;Function&quot;&gt;&amp;lt;SID&amp;gt;OpenFileInDefaultApp&lt;/span&gt;()&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F5&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:call &lt;span class=&quot;Function&quot;&gt;&amp;lt;SID&amp;gt;OpenFileInDefaultApp&lt;/span&gt;()&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;i
&lt;span class=&quot;Statement&quot;&gt;imap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F5&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:call &lt;span class=&quot;Function&quot;&gt;&amp;lt;SID&amp;gt;OpenFileInDefaultApp&lt;/span&gt;()&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;i

&lt;span class=&quot;Comment&quot;&gt;&quot; Просмотр списка буферов (plugin-fuzzyfinder)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F6&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :FufBuffer&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F6&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:FufBuffer&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F6&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:FufBuffer&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;


&lt;span class=&quot;Comment&quot;&gt;&quot; Список файлов в текущей директории (plugin-fuzzyfinder)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F7&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:FufFile&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F7&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:FufFile&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F7&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:FufFile&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot;&quot; Навигатор по коду (plugin-sourceExplorer)&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;map &amp;lt;F8&amp;gt; :SrcExplToggle&amp;lt;cr&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;vmap &amp;lt;F8&amp;gt; &amp;lt;esc&amp;gt;:SrcExplToggle&amp;lt;cr&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;imap &amp;lt;F8&amp;gt; &amp;lt;esc&amp;gt;:SrcExplToggle&amp;lt;cr&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot;&quot; Обновление файла тегов для CodeExplorer (plugin-sourceExplorer)&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;map &amp;lt;C-F8&amp;gt; :call g:SrcExpl_UpdateTags()&amp;lt;cr&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;vmap &amp;lt;C-F8&amp;gt; &amp;lt;esc&amp;gt;:call g:SrcExpl_UpdateTags()&amp;lt;cr&amp;gt;i&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;imap &amp;lt;C-F8&amp;gt; &amp;lt;esc&amp;gt;:call g:SrcExpl_UpdateTags()&amp;lt;cr&amp;gt;i&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Обозреватель файлов (plugin-NERD_Tree)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F8&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :NERDTreeToggle&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F8&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:NERDTreeToggle&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F8&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:NERDTreeToggle&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Загрузка последней сессии (работает если в&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; секции &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Сессии&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; определена команда авто-сохранения)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; s:us_autosaveses
    &lt;span class=&quot;Statement&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;nmap &amp;lt;F9&amp;gt; &amp;lt;esc&amp;gt;:source &#39;&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; s:lastsession_file &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;&amp;lt;cr&amp;gt;&#39;&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;vmap &amp;lt;F9&amp;gt; &amp;lt;esc&amp;gt;:source &#39;&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; s:lastsession_file &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;&amp;lt;cr&amp;gt;&#39;&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;imap &amp;lt;F9&amp;gt; &amp;lt;esc&amp;gt;:source &#39;&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; s:lastsession_file &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;&amp;lt;cr&amp;gt;i&#39;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Полноэкранный режим (plugin-vimshell)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;inoremap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F10&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-o&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:Fullscreen&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;CR&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nnoremap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F10&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :Fullscreen&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;CR&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Закрыть окно&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F11&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :close&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F11&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:close&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;i
&lt;span class=&quot;Statement&quot;&gt;imap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F11&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:close&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;i

&lt;span class=&quot;Comment&quot;&gt;&quot; Удалить буфер&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F12&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :bdelete&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F12&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:bdelete&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F12&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:bdelete&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;


&lt;span class=&quot;Comment&quot;&gt;&quot; Создать базу данных для файлов в текущей директории&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-F12&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;CR&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; CTRL+Space для автозавершения (plugin-neocomplcache)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-Space&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-X&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-U&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Использование rope code assist, вместо omni completion&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; для файлов python при нажатии CTRL+Space&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; (plugin-ropevim)&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&quot;au FileType python imap &amp;lt;buffer&amp;gt; &amp;lt;C-space&amp;gt; &amp;lt;C-R&amp;gt;=RopeCodeAssistInsertMode()&amp;lt;cr&amp;gt;&lt;/span&gt;


&lt;span class=&quot;Comment&quot;&gt;&quot; Добавление(Ctrl+Tab)/удаление(Ctrl+Shift+Tab) отступов&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; работает только если выделить текст&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;map&lt;/span&gt;  ]v          [[V]]
&lt;span class=&quot;Comment&quot;&gt;&quot;map  &amp;lt;C-S-tab&amp;gt;   [[V]]&amp;lt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-S-tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;   &amp;lt;
&lt;span class=&quot;Comment&quot;&gt;&quot;map  &amp;lt;C-tab&amp;gt;     [[V]]&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;     &amp;gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Раскрыть сниппет/переход по сниппету (plugin-neocomplcache)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-j&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;Plug&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;(neocomplcache_snippets_expand)
&lt;span class=&quot;Statement&quot;&gt;smap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-j&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;Plug&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;(neocomplcache_snippets_expand)

&lt;span class=&quot;Comment&quot;&gt;&quot; Поставить/убрать отметку перейти к следующей/предыдущей&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; отметке (plugin-visualmark)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmap&lt;/span&gt; mm &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;Plug&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;Vm_toggle_sign
&lt;span class=&quot;Statement&quot;&gt;nmap&lt;/span&gt; mn &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;Plug&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;Vm_goto_next_sign
&lt;span class=&quot;Statement&quot;&gt;nmap&lt;/span&gt; mp &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;Plug&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;Vm_goto_prev_sign

&lt;span class=&quot;Comment&quot;&gt;&quot; Пометить/убрать все слова совподающие со словом под курсором (plugin-Mark)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;mw :call mark#MarkCurrentWord()&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;CR&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Установка быстрой помощи по K для слова под курсором с помощью pydoc&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; для файлов python (plugin-ropevim)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;au&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;FileType&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;python&lt;/span&gt; &lt;span class=&quot;Statement&quot;&gt;nmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;buffer&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;S-K&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :call RopeShowDoc()&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;CR&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Переход к определению для файлов python по gd выполняется с&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; помощью rope (Plugin-ropevim)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;au&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;FileType&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;python&lt;/span&gt; &lt;span class=&quot;Statement&quot;&gt;nmap&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;buffer&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; gd :call RopeGotoDefinition()&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;CR&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Комбинации оставленные по умолчанию:&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;vis \cc    комментирование выделенного участка кода (plugin-NERD_commenter)&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;vis \cu    разкомментирование выделенного участка кода (plugin-NERD_commenter)&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Menu&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;                    Меню {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Работа с макросами&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Tools.Macro.Record&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;qm&lt;/span&gt; qm
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Tools.Macro.Record&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;qm&lt;/span&gt; &amp;lt;esc&amp;gt;qm

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Tools.Macro.Stop&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;Statement&quot;&gt;q&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Tools.Macro.Stop&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;q&lt;/span&gt; &amp;lt;esc&amp;gt;&lt;span class=&quot;Statement&quot;&gt;q&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Tools.Macro.Run&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Last&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;@m&lt;/span&gt; &amp;lt;esc&amp;gt;@&lt;span class=&quot;Statement&quot;&gt;m&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Tools.Macro.Run&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Last&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;@m&lt;/span&gt; &amp;lt;esc&amp;gt;@&lt;span class=&quot;Statement&quot;&gt;m&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Открытие файла программой связанной с файлом&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Run.Run&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;\&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F5&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;&amp;lt;SID&amp;gt;OpenFileInDefaultApp&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Run.Run&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;\&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F5&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;&amp;lt;SID&amp;gt;OpenFileInDefaultApp&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;i

&lt;span class=&quot;Comment&quot;&gt;&quot; Получение командной строки&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Run.Command&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Line&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Parameters&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ \.\.\.&lt;/span&gt; :&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;&amp;lt;SID&amp;gt;GetCmdline&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Run.Command&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Line&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Parameters&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ \.\.\.&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;ESC&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;&amp;lt;SID&amp;gt;GetCmdline&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;i

&lt;span class=&quot;Comment&quot;&gt;&quot;Открытие/закрытие окна taglist (plugin-taglist)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Tag&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F2&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :TlistToggle&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Tag&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F2&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;ESC&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:TlistToggle&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;i

&lt;span class=&quot;Comment&quot;&gt;&quot; Открытие/закрытие окна NERD_Tree (plugin-NERD_Tree)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.File&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Explorer&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F8&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; :NERDTreeToggle&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.File&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Explorer&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F8&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;ESC&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:NERDTreeToggle&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Меню плагина Fuzzy Finder (plugin-fuzzyFinder)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Buffer&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F6&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;ESC&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:FufBuffer&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Buffer&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F6&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;ESC&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:FufBuffer&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.File&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F7&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;ESC&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:FufFile&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.File&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;F7&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;ESC&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;:FufFile&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Dir&lt;/span&gt;  &amp;lt;esc&amp;gt;:FufDir&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Dir&lt;/span&gt; &amp;lt;esc&amp;gt;:FufDir&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.MRU-File&lt;/span&gt; &amp;lt;esc&amp;gt;:FufMruFile&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.MRU-File&lt;/span&gt; &amp;lt;esc&amp;gt;:FufMruFile&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.MRU-Command&lt;/span&gt; &amp;lt;esc&amp;gt;:FufMruCmd&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.MRU-Command&lt;/span&gt; &amp;lt;esc&amp;gt;:FufMruCmd&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Bookmark&lt;/span&gt; &amp;lt;esc&amp;gt;:FufBookmark&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Bookmark&lt;/span&gt; &amp;lt;esc&amp;gt;:FufBookmark&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Tag&lt;/span&gt; &amp;lt;esc&amp;gt;:FufTag&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Tag&lt;/span&gt; &amp;lt;esc&amp;gt;:FufTag&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Tagged&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;File&lt;/span&gt; &amp;lt;esc&amp;gt;:FufTaggedFile&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Tagged&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;File&lt;/span&gt; &amp;lt;esc&amp;gt;:FufTaggedFile&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Jump&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;List&lt;/span&gt; &amp;lt;esc&amp;gt;: FufJumpList&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Jump&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;List&lt;/span&gt; &amp;lt;esc&amp;gt;: FufJumpList&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Change&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;List&lt;/span&gt; &amp;lt;esc&amp;gt;: FufChangeList&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Change&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;List&lt;/span&gt; &amp;lt;esc&amp;gt;: FufChangeList&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Quickfix&lt;/span&gt; &amp;lt;esc&amp;gt;: FufQuickfix&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Quickfix&lt;/span&gt; &amp;lt;esc&amp;gt;: FufQuickfix&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Line&lt;/span&gt; &amp;lt;esc&amp;gt;: FufLine&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Line&lt;/span&gt; &amp;lt;esc&amp;gt;: FufLine&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Help&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;&amp;lt;&lt;/span&gt;Ctrl&lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;F1&lt;span class=&quot;Operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;ESC&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;: FufHelp&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;Plugin.Fuzzy&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Finder.Help&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;&amp;lt;&lt;/span&gt;Ctrl&lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;F1&lt;span class=&quot;Operator&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;ESC&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;: FufHelp&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;cr&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Загрузка последней сессии&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; (работает если в секции &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Сессии&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; определена команда авто-сохранения)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; s:us_autosaveses
    &lt;span class=&quot;Statement&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;menu File.Load\ Last\ Session&amp;lt;tab&amp;gt;&amp;lt;F6&amp;gt; :source&#39;&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;s:lastsession_file&lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&#39;&amp;lt;cr&amp;gt;&#39;&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;exec&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;imenu File.Load\ Last\ Session&amp;lt;tab&amp;gt;&amp;lt;F6&amp;gt; :source&#39;&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;s:lastsession_file&lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&#39;&amp;lt;cr&amp;gt;&#39;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Переключение окна календаря (plugin-calendar)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;.990&lt;/span&gt; Plugin.Calendar &amp;lt;esc&amp;gt;:Calendar&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;.990&lt;/span&gt; Plugin.Calendar &amp;lt;esc&amp;gt;:Calendar&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;menu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;.998&lt;/span&gt; Plugin.-usrsep99- :

&lt;span class=&quot;Comment&quot;&gt;&quot; Обновление плагинов (plugin-getscript)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;amenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;.999&lt;/span&gt; Plugin.Check\ Updates &amp;lt;esc&amp;gt;:GetLatestVimScripts&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Полноэкранный режим (plugin-vimshell)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;amenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;.998&lt;/span&gt; Window.-usrsep99- :
&lt;span class=&quot;Statement&quot;&gt;amenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;.999&lt;/span&gt; Window.&lt;span class=&quot;Function&quot;&gt;Toggle&lt;/span&gt;\ Fullscreen&amp;lt;&lt;span class=&quot;Statement&quot;&gt;tab&lt;/span&gt;&amp;gt;&amp;lt;F10&amp;gt; &amp;lt;esc&amp;gt;:Fullscreen&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;


&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Popup-menu&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;              Всплывающее меню {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ( plugin-vimshell )&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;.1&lt;/span&gt; PopUp.Open &amp;lt;esc&amp;gt; :&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; xolox#shell#open_cmd(&lt;span class=&quot;Function&quot;&gt;GetSelection&lt;/span&gt;())&amp;lt;&lt;span class=&quot;Statement&quot;&gt;cr&lt;/span&gt;&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;.1&lt;/span&gt; PopUp.-Usrsep1- :

&lt;span class=&quot;Statement&quot;&gt;amenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.-Usrsep1-&lt;/span&gt; :

&lt;span class=&quot;Comment&quot;&gt;&quot; Работа с метками (plugin-visualmark)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Mark.Set&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Mark&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;mm&lt;/span&gt; &amp;lt;esc&amp;gt;mm

&lt;span class=&quot;Comment&quot;&gt;&quot; Перемещение по меткам (plugin-visualmark)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Mark.Next&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Mark&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;mn&lt;/span&gt; &amp;lt;esc&amp;gt;mn
&lt;span class=&quot;Statement&quot;&gt;nmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Mark.Prev&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Mark&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;mp&lt;/span&gt; &amp;lt;esc&amp;gt;mp

&lt;span class=&quot;Statement&quot;&gt;amenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Mark.-Usrsep1-&lt;/span&gt; :

&lt;span class=&quot;Comment&quot;&gt;&quot; Пометить/убрать все слова совподающие со словом под курсором (plugin-Mark)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Mark.Mark&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Words&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;mw&lt;/span&gt; &amp;lt;esc&amp;gt;mw
&lt;span class=&quot;Statement&quot;&gt;nmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Mark.Mark&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Words&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;mw&lt;/span&gt; &amp;lt;esc&amp;gt;mw

&lt;span class=&quot;Comment&quot;&gt;&quot; Перемещение по меткам (plugin-Mark)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Mark.Next&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Word&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;\\* &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;\*
&lt;span class=&quot;Statement&quot;&gt;imenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Mark.Next&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Word&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;\\* &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;\*

&lt;span class=&quot;Comment&quot;&gt;&quot; Переключение всплывающего меню neocomplcache&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; (plugin-neocomplcache)&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;nmenu PopUp.Toggle\ Neo\ PopUp\ menu :NeoComplCacheToggle&amp;lt;cr&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;imenu PopUp.Toggle\ Neo\ PopUp\ menu &amp;lt;esc&amp;gt;:NeoComplCacheToggle&amp;lt;cr&amp;gt;i&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Комментирование/раз комментирование участков текста&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; (plugin-NERDCommenter)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Source&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Code.Comment&lt;/span&gt; :&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; NERDComment(0,  &lt;span class=&quot;String&quot;&gt;&quot;alignLeft&quot;&lt;/span&gt;)&amp;lt;CR&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Source&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Code.Comment&lt;/span&gt; &amp;lt;ESC&amp;gt;:&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; NERDComment(1, &lt;span class=&quot;String&quot;&gt;&quot;alignLeft&quot;&lt;/span&gt;)&amp;lt;CR&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;nmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Source&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Code.Uncomment&lt;/span&gt; :&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; NERDComment(0, &lt;span class=&quot;String&quot;&gt;&quot;uncomment&quot;&lt;/span&gt;)&amp;lt;CR&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Source&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Code.Uncomment&lt;/span&gt; &amp;lt;ESC&amp;gt;:&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; NERDComment(1,  &lt;span class=&quot;String&quot;&gt;&quot;uncomment&quot;&lt;/span&gt;)&amp;lt;CR&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;nmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Source&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Code.&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;Toggle&lt;/span&gt; :&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; NERDComment(0, &lt;span class=&quot;String&quot;&gt;&quot;toggle&quot;&lt;/span&gt;)&amp;lt;CR&amp;gt;
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Source&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Code.&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;Toggle&lt;/span&gt; &amp;lt;ESC&amp;gt;:&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; NERDComment(1,  &lt;span class=&quot;String&quot;&gt;&quot;toggle&quot;&lt;/span&gt;)&amp;lt;CR&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Source&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Code.-Usrsep1-&lt;/span&gt; :

&lt;span class=&quot;Comment&quot;&gt;&quot; Добавление/удаление отступов к участкам кода&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; (соотв. горячие клавиши клавиши должны быть определенны)&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;nmenu &amp;lt;silent&amp;gt; PopUp.Source\ Code.Indent\ Block&amp;lt;tab&amp;gt;&amp;lt;Ctrl-Tab&amp;gt; &amp;lt;C-tab&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Source&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Code.Indent&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Block&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-Tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot;nmenu &amp;lt;silent&amp;gt;  PopUp.Source\ Code.Dedent\ Block&amp;lt;tab&amp;gt;&amp;lt;C-S-Tab&amp;gt; &amp;lt;C-S-tab&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;  &lt;span class=&quot;PreProc&quot;&gt;PopUp.Source&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Code.Dedent&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Block&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-S-Tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-S-tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;nmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Util.Context&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Help&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;S-k&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;S-k&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Util.Context&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Help&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;S-k&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;esc&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;S-k&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Открыть файл, в качестве имени используется слово под курсором&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Util.Open&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Under&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Cursor&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;gf&lt;/span&gt; gf
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Util.Open&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Under&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Cursor&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;gf&lt;/span&gt; gf

&lt;span class=&quot;Statement&quot;&gt;nmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Util.Jump&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Tag&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Under&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Cursor&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-]&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; g&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-]&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Util.Jump&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Tag&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Under&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Cursor&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-]&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt; g&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;-]&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Удалить лишние пробельные символы&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;nmenu&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;silent&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;  &lt;span class=&quot;PreProc&quot;&gt;PopUp.Util.Clean&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Extra&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Spaces&lt;/span&gt; :&lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;&amp;lt;SID&amp;gt;TrimWhiteSpace&lt;/span&gt;()&amp;lt;CR&amp;gt;

&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Util.-Usrsep3-&lt;/span&gt; :

&lt;span class=&quot;Comment&quot;&gt;&quot; Изменение регистра символов&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Util.Upper&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Case&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;U&lt;/span&gt; U
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Util.Lower&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Case&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;Statement&quot;&gt;u&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;vmenu&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;PopUp.Util.Swap&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;\ &lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;Case&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;tab&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;~&lt;/span&gt; ~

&lt;span class=&quot;Statement&quot;&gt;au&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;MenuPopup&lt;/span&gt; * &lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;ToggleFTContextMenu&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;python&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;menu&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;PopUp.-Usrsep4-&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;:&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Показ документации по объекту python над которым находится курсор&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; (plugin-ropevim)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;au&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;MenuPopup&lt;/span&gt; * &lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;ToggleFTContextMenu&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;python&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;nmenu&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;PopUp.Show&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;String&quot;&gt; Documentation&amp;lt;tab&amp;gt;&amp;lt;S-k&amp;gt;&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;RopeShowDoc()&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;au&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;MenuPopup&lt;/span&gt; * &lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;ToggleFTContextMenu&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;python&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;imenu&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;PopUp.Show&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;String&quot;&gt; Documentation&amp;gt;&amp;lt;S-k&amp;gt;&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;RopeShowDoc()&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Поиск места определения объекта под курсором (plugin-ropevim)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;au&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;MenuPopup&lt;/span&gt; * &lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;ToggleFTContextMenu&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;python&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;imenu&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;PopUp.Goto&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;String&quot;&gt; Definition&amp;lt;tab&amp;gt;gd&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;RopeGotoDefinition()&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;au&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;MenuPopup&lt;/span&gt; * &lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;ToggleFTContextMenu&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;python&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;nmenu&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;PopUp.Goto&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;String&quot;&gt; Definition&amp;lt;tab&amp;gt;gd&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;RopeGotoDefinition()&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Поиск всех мест где используется объект, находящийся под&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; курсором (plugin-ropevim)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;au&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;MenuPopup&lt;/span&gt; * &lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;ToggleFTContextMenu&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;python&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;imenu&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;PopUp.Find&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;String&quot;&gt; Occurrences&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;RopeFindOccurrences()&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;au&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;MenuPopup&lt;/span&gt; * &lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;ToggleFTContextMenu&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;python&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;nmenu&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;PopUp.Find&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;String&quot;&gt; Occurrences&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;RopeFindOccurrences()&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Выполнить выделенный код (plugin-pyinteractive)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;au&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;MenuPopup&lt;/span&gt; * &lt;span class=&quot;Statement&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;ToggleFTContextMenu&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;python&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;vmenu&quot;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&quot;PopUp.Evaluate&quot;&lt;/span&gt;, &lt;span class=&quot;String&quot;&gt;&quot;pyinteractive#EvaluateSelected(visualmode())&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Plugin.TList&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;            {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:Tlist_Show_Menu &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;           &lt;span class=&quot;Comment&quot;&gt;&quot; Показывать меню (0-выкл/1-вкл)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:Tlist_Show_One_File &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;       &lt;span class=&quot;Comment&quot;&gt;&quot; Показывать список тегов только из текущего файла&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:Tlist_Enable_Fold_Column &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;  &lt;span class=&quot;Comment&quot;&gt;&quot; Показывать колонку свёртки (folding)&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Plugin.NERDTree&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;         {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Установить положение окна NERDTree, &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;left&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; или &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;right&quot;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; NERDTreeWinPos &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;right&#39;&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; NERDTreeShowBookmarks &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; NERDTreeIgnore &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; [&lt;span class=&quot;String&quot;&gt;&#39;\~$&#39;&lt;/span&gt;, &lt;span class=&quot;String&quot;&gt;&#39;*.pyc&#39;&lt;/span&gt;, &lt;span class=&quot;String&quot;&gt;&#39;*.pyo&#39;&lt;/span&gt;]
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; NERDChristmasTree &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Plugin.SourceExplorer&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;   {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Установка ширины окна SourceExplorer&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:SrcExpl_winHeight &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;8&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Интервал в миллисекундах (ms) для следующего обновления окна&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:SrcExpl_refreshTime &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;100&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Установка клавиши отвечающей за переход&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; определению, по умолчанию &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Enter&quot;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:SrcExpl_jumpKey &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot;&amp;lt;ENTER&amp;gt;&quot;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Установка клавиши отвечающий за обратный переход от&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; определения, назад к коду, по умолчанию &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Space&quot;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:SrcExpl_gobackKey &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot;&amp;lt;SPACE&amp;gt;&quot;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; // In order to Avoid conflicts, the Source Explorer should know what plugins&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; // are using buffers. And you need add their bufname into the list below&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; // according to the command &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;:buffers!&quot;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:SrcExpl_pluginList &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; [
&lt;span class=&quot;Special&quot;&gt;        \&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot;__Tag_List__&quot;&lt;/span&gt;,
&lt;span class=&quot;Special&quot;&gt;        \&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot;_NERD_tree_&quot;&lt;/span&gt;,
&lt;span class=&quot;Special&quot;&gt;        \&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot;Source_Explorer&quot;&lt;/span&gt;
&lt;span class=&quot;Special&quot;&gt;    \&lt;/span&gt; ]
&lt;span class=&quot;Comment&quot;&gt;&quot; // Enable/Disable the local definition searching, and note that this is not&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; // guaranteed to work, the Source Explorer doesn&#39;t check the syntax for now.&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; // It only searches for a match with the keyword according to command &#39;gd&#39;&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:SrcExpl_searchLocalDef &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Включение опции обновления файла тегов во время открытия окна&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Source Explorer&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:SrcExpl_isUpdateTags &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Параметры вызова ctags&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:SrcExpl_updateTagsCmd &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot;ctags --sort=foldcase -R .&quot;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Автоматическое обновление файла тегов, после сохранения текущего файла&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;autocmd&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;BufWritePost&lt;/span&gt; * :&lt;span class=&quot;Statement&quot;&gt;execute&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot;silent!&quot;&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; g:SrcExpl_updateTagsCmd

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Plugin.MRU&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Задание количества отображаемых в меню файлов&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:MRU_Max_Entries &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;10&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Plugin.GetLastestVimScripts&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Отключение авто-инсталляции скачанных скриптов&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:GetLatestVimScripts_allowautoinstall&lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Plugin.neocomplcache&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:neocomplcache_enable_at_startup &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:neocomplcache_min_syntax_length &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:neocomplcache_enable_ignore_case &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Если не выставить эту опцию то вырезание а затем вставка (в insert mode)&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; через виндовые хоткеи страшно глючит&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:neocomplcache_disable_select_mode_mappings &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Включение/отключение автоматики Активация по Ctrl+Space&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:neocomplcache_disable_auto_complete &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Plugin.ropevim&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:ropevim_vim_completion &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Plugin.pythoncyntax&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Настройка подсветки синтаксиса для python (работает для&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; расширенного syntax файла python)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:python_highlight_all &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:python_highlight_indent_errors &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:python_highlight_space_errors &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:python_highlight_doctests &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Plugin.tohtml&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:html_use_css &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;      &lt;span class=&quot;Comment&quot;&gt;&quot; Использовать CSS1&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:html_number_lines &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;Comment&quot;&gt;&quot; При генерации не добавлять номера строк&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:use_xhtml &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;         &lt;span class=&quot;Comment&quot;&gt;&quot; Использовать XHTML&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Plugin.Calendar&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:calendar_monday &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;   &lt;span class=&quot;Comment&quot;&gt;&quot; Неделя начинается с понедельника&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Plugin.vimshell&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Отключение клавиатурных привязок плагина&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; g:shell_mappings_enabled &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Functions&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;               Пользовательские функции {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; s:cmdline &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot;&quot;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Открытие файла приложением определённым по умолчанию&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;function&lt;/span&gt;! &lt;span class=&quot;Function&quot;&gt;s:OpenFileInDefaultApp&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; s:cmdline &lt;span class=&quot;Operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot;&quot;&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;execute&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;!&quot;%&quot;&#39;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;        &quot;execute &#39;call system(shellescape(expand(&quot;&amp;lt;cfile&amp;gt;&quot;) &#39; . s:cmdline . &#39;))&#39;&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;else&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;execute&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;!&quot;% &#39;&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; s:cmdline &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;&quot;&#39;&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;endfunction&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Получение от пользователя командной строки с которой будет запускаться&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; скрипт&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;function&lt;/span&gt;! &lt;span class=&quot;Function&quot;&gt;&amp;lt;SID&amp;gt;GetCmdline&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; s:cmdline&lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Function&quot;&gt;inputdialog&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Enter command line parameters:&quot;&lt;/span&gt;, s:cmdline, s:cmdline&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;endfunction&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Регистрация\удаление контекстного меню для конкретного типа файла&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; lang (str)            - тип файла (например xml)&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; menucommand (str)     - команда меню (например imenu)&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; menuitem (str)        - название пункта меню&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; action (str)          - функция выполняющая действие при&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;                         активации пункта меню&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;function&lt;/span&gt;! &lt;span class=&quot;Function&quot;&gt;ToggleFTContextMenu&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;lang, menucommand, menuitem, action&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; command &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;a:menucommand&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot; &quot;&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;a:menuitem&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot; &amp;lt;ESC&amp;gt;:call &quot;&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;a:action&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot;&amp;lt;CR&amp;gt;&quot;&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; &amp;amp;&lt;span class=&quot;Statement&quot;&gt;filetype&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;a:lang&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;execute&lt;/span&gt; command
    &lt;span class=&quot;Statement&quot;&gt;else&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;execute&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&quot;silent! aunmenu &quot;&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;a:menuitem&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;endfunction&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Удаление лишних пробелов в файле&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;function&lt;/span&gt;! &lt;span class=&quot;Function&quot;&gt;&amp;lt;SID&amp;gt;TrimWhiteSpace&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;normal&lt;/span&gt; ma
    :&lt;span class=&quot;Statement&quot;&gt;retab&lt;/span&gt;
    :&lt;span class=&quot;Number&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;/&lt;/span&gt;\s\+$&lt;span class=&quot;Delimiter&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;eg&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;normal&lt;/span&gt; &#39;a
&lt;span class=&quot;Statement&quot;&gt;endfunction&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Функция возвращает выделенный текст&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;function&lt;/span&gt;! &lt;span class=&quot;Function&quot;&gt;GetSelection&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;    &quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;unused&quot;&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; l:line &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;getline&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;&#39;&amp;lt;&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; l:line &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;strpart&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;l:line, &lt;span class=&quot;Function&quot;&gt;col&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;&#39;&amp;lt;&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;Function&quot;&gt;col&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;&#39;&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;col&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;&#39;&amp;lt;&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt; l:line
&lt;span class=&quot;Statement&quot;&gt;endfunction&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot;recalculate the tab warning flag when idle and after writing&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;autocmd&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;cursorhold&lt;/span&gt;,&lt;span class=&quot;Type&quot;&gt;bufwritepost&lt;/span&gt; * &lt;span class=&quot;Statement&quot;&gt;unlet&lt;/span&gt;! b:statusline_tab_warning

&lt;span class=&quot;Comment&quot;&gt;&quot; Функция возвращает &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;[mixed-indenting]&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; если для отступов в&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; файле совместно используются пробелы и символы табуляции.&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Если же выставлена опция &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;expandtab&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; и в файле присутствуют&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; символы табуляции то возвращаемое значение будет &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;[expandtab-enabled]&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Так же в противоположном случае: если опция &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;expandtab&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt; не задана&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; но в файле для отступов используются пробелы возвращаемым&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; значением будет &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;[expandtab-disabled]&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;. В остальных случаях&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; результатом функции будет пустая строка&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;function&lt;/span&gt;! &lt;span class=&quot;Function&quot;&gt;StatuslineTabWarning&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; !&lt;span class=&quot;Function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;b:statusline_tab_warning&quot;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; b:statusline_tab_warning &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;&#39;&lt;/span&gt;

        &lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; !&amp;amp;modifiable
            &lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt; b:statusline_tab_warning
        &lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;

        &lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; tabs &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;search&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&#39;^\t&#39;&lt;/span&gt;, &lt;span class=&quot;String&quot;&gt;&#39;nw&#39;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;        &quot;find spaces that arent used as alignment in the first indent column&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; spaces &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;search&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&#39;^ \{&#39;&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &amp;amp;ts &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;,}[^\t]&#39;&lt;/span&gt;, &lt;span class=&quot;String&quot;&gt;&#39;nw&#39;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;

        &lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;Statement&quot;&gt;tabs&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; spaces
            &lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; b:statusline_tab_warning &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;[mixed-indenting]&#39;&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;elseif&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;spaces &lt;span class=&quot;Operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; !&amp;amp;expandtab&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; b:statusline_tab_warning &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;[expandtab-disabled]&#39;&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;elseif&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;tabs &lt;span class=&quot;Operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &amp;amp;expandtab&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; b:statusline_tab_warning &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;[expandtab-enabled]&#39;&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;else&lt;/span&gt;
            &lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; b:statusline_tab_warning &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;&#39;&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;
    &lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt; b:statusline_tab_warning
&lt;span class=&quot;Statement&quot;&gt;endfunction&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; Сделать из безымянного буфера scratch буфер&lt;/span&gt;
&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; s:us_scratch_buffer
    &lt;span class=&quot;Statement&quot;&gt;augroup&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;vimrc&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;scratch&lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;buffer&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;autocmd&lt;/span&gt;!
        &lt;span class=&quot;Statement&quot;&gt;autocmd&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;BufEnter&lt;/span&gt; * &lt;span class=&quot;Function&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;s:scratch_buffer&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;autocmd&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;FileType&lt;/span&gt; qfreplace &lt;span class=&quot;Statement&quot;&gt;autocmd&lt;/span&gt;! &lt;span class=&quot;Type&quot;&gt;vimrc&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;scratch * &lt;span class=&quot;Operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;buffer&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;&amp;gt;&lt;/span&gt;

        &lt;span class=&quot;Function&quot;&gt;function&lt;/span&gt;! &lt;span class=&quot;Function&quot;&gt;s:scratch_buffer&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&#39;b:scratch_buffer&#39;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;bufname&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&#39;%&#39;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt; != &#39;&#39; || &amp;amp;&lt;span class=&quot;Statement&quot;&gt;l&lt;/span&gt;:buftype != &#39;&#39;
                &lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;
            &lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;
            &lt;span class=&quot;Statement&quot;&gt;let&lt;/span&gt; b:scratch_buffer &lt;span class=&quot;Operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Number&quot;&gt;1&lt;/span&gt;
            &lt;span class=&quot;Statement&quot;&gt;setlocal&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;buftype&lt;/span&gt;=nofile &lt;span class=&quot;PreProc&quot;&gt;nobuflisted&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;noswapfile&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;bufhidden&lt;/span&gt;=hide

            &lt;span class=&quot;Statement&quot;&gt;augroup&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;vimrc&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;scratch
                &lt;span class=&quot;Statement&quot;&gt;autocmd&lt;/span&gt;! * &lt;span class=&quot;Operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;buffer&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;Statement&quot;&gt;autocmd&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;BufWriteCmd&lt;/span&gt; &amp;lt;buffer&amp;gt; &lt;span class=&quot;Function&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;Function&quot;&gt;s:scratch_on_BufWriteCmd&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;Statement&quot;&gt;augroup&lt;/span&gt; END
        &lt;span class=&quot;Statement&quot;&gt;endfunction&lt;/span&gt;

        &lt;span class=&quot;Statement&quot;&gt;function&lt;/span&gt;! &lt;span class=&quot;Function&quot;&gt;s:scratch_on_BufWriteCmd&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;Statement&quot;&gt;silent&lt;/span&gt;! &lt;span class=&quot;Statement&quot;&gt;setl&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;buftype&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;buflisted&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;swapfile&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;bufhidden&lt;/span&gt;&lt;span class=&quot;PreProc&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;PreProc&quot;&gt;nomodified&lt;/span&gt;
            &lt;span class=&quot;Statement&quot;&gt;autocmd&lt;/span&gt;! &lt;span class=&quot;Type&quot;&gt;vimrc&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;-&lt;/span&gt;scratch * &lt;span class=&quot;Operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;buffer&lt;/span&gt;&lt;span class=&quot;Operator&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;Statement&quot;&gt;unlet&lt;/span&gt;! b:scratch_buffer
            &lt;span class=&quot;Statement&quot;&gt;execute&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39;saveas&#39;&lt;/span&gt; &lt;span class=&quot;Operator&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;Delimiter&quot;&gt;(&lt;/span&gt;v:cmdbang ? &lt;span class=&quot;String&quot;&gt;&#39;!&#39;&lt;/span&gt; : &lt;span class=&quot;String&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;Delimiter&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&#39; &amp;lt;afile&amp;gt;&#39;&lt;/span&gt;
            &lt;span class=&quot;Statement&quot;&gt;filetype&lt;/span&gt; detect
        &lt;span class=&quot;Statement&quot;&gt;endfunction&lt;/span&gt;
    augroup END
&lt;span class=&quot;Statement&quot;&gt;endif&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;function! PythonVarInfoBalloonExpr()&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    if &amp;amp;filetype!=&quot;python&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;        return &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    endif&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;    v:beval_text&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;endfunction&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot;set bexpr=PythonVarInfoBalloonExpr()&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;set ballooneval&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; &lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&quot;Fix&quot;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;                     Способы устранения непоняток с настройками {{{1&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Узнать из какого файла переменная была установлена посл. раз&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   :verbose set переменная&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Список всех переменных&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   :let&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Список всех пользовательских функций&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   :function&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Список всех привязок&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   :map&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; Показывает значения всех опций, которые отличаются от настроек по умолчанию.&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;   :set&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot; ==============================================================================&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&quot;}}}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;</description><link>http://lazycleric.blogspot.com/2009/11/vimrc.html</link><author>noreply@blogger.com (clericJ)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-1058805655348606764</guid><pubDate>Fri, 12 Jun 2009 08:53:00 +0000</pubDate><atom:updated>2012-06-19T15:48:55.569+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">vim</category><category domain="http://www.blogger.com/atom/ns#">инструменты</category><title>Vim-SnippetsEmu автоматический выбор файла со сниппетами</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Работая в Vim, я активно пользуюсь замечательным плагином &lt;a href=&quot;http://www.blogger.com/%20http://www.vim.org/scripts/script.php?script_id=1318&quot;&gt;SnippetsEmu&lt;/a&gt; позволяющим вставлять шаблоны кода. Но одно меня всегда раздражало, файл со сниппетами для определённого языка, приходиться выбирать вручную, делается это командой :source &amp;lt;путь к файлу со сниппетами&amp;gt; или из меню.&lt;br /&gt;
Те кто пользуется этим редактором, знают на сколько он расширяем, поэтому данная проблема решается кодом в .vimrc:&lt;br /&gt;
&lt;code&gt;&lt;/code&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&quot; Автоматический выбор подходящего файла со сниппетами (plugin-snippetsEmu)
function &lt;sid&gt;LoadFileTypeSnippets(ftype)
    for def_file in split(globpath(&amp;amp;rtp, &quot;after/ftplugin/*_snippets.vim&quot;), &#39;\n&#39;)
        let snip = substitute(def_file, &#39;.*[\\/]\(.*\)_snippets.vim&#39;, &#39;\1&#39;, &#39;&#39;)
        if a:ftype == snip
            exec &quot;:source &quot;.def_file
            break
        endif
    endfor
endfunction

&quot; Регистрация вызова функции при смене типа файла
autocmd FileType * :call &lt;sid&gt;LoadFileTypeSnippets(expand(&quot;&lt;amatch&gt;&quot;))&lt;/amatch&gt;&lt;/sid&gt;&lt;/sid&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description><link>http://lazycleric.blogspot.com/2009/06/vim-snippetsemu.html</link><author>noreply@blogger.com (clericJ)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-1711434354555714881</guid><pubDate>Tue, 19 May 2009 08:54:00 +0000</pubDate><atom:updated>2012-06-19T21:18:36.588+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">программирование</category><title>Перегрузка функций в python</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span class=&quot;cut&quot;&gt;Так уж случилось что пришел я к python&#39;у из мира С++, Как и многие &quot;эмигранты&quot; в начале своего изучения языка, я пытался писать на нем как на С++. Именно тогда мне не хватало перегрузки функций, особенно это чувствовалось в конструкторах. Позже, освоившись с дизайном языка, в таких случаях я стал использовать именованные параметры (keyword parameters) или просто начал давать разные имена функциям. Разберёмся с ситуацией на примере.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;cut&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;span class=&quot;cut&quot;&gt;&amp;nbsp;&lt;/span&gt;Задача - нам нужно написать функцию &lt;code&gt;inspect_object&lt;/code&gt;, которая бы печатала различные данные об объекте переданном ей в первом аргументе. Например, если мы знаем, что аргументом является функция, дополнительно мы можем вывести её сигнатуру. У нас есть 2 очевидных варианта реализации, засунуть проверку на тип внутрь функции (куча &lt;code&gt;if&lt;/code&gt;`ов) или же написать по функции на объект.&lt;br /&gt;
&lt;br /&gt;
1-вый вариант:&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;import types, inspect

def inspect_object(obj):
   print &quot;repr:&quot;, repr(obj)

   if isinstance(obj, types.FunctionType):
       print &quot;sign:&quot;, (obj.__name__ + inspect.formatargspec(
                       *inspect.getargspec(obj)))

   elif isinstance(obj, types.ModuleType):
       print &quot;file:&quot;, obj.__file__
&lt;/pre&gt;
&lt;br /&gt;
И 2-ой:&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;import inspect

def inspect_object(obj):
   print &quot;repr:&quot;, repr(obj)

def inspect_func(obj):
   print &quot;repr:&quot;, repr(obj)
   print &quot;sign:&quot;, (obj.__name__ + inspect.formatargspec(
                   *inspect.getargspec(obj)))

def inspect_module(obj):
   print &quot;repr:&quot;, repr(obj)
   print &quot;file:&quot;, obj.__file__
   
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Сразу скажу, оба они ужасны. Но первый хоть и плохо расширяем, но всё же более предпочтителен, так как не требует знания типа объекта при вызове функции.&lt;br /&gt;
Вот тут то и не хватает перегрузки функций, которая элегантным образом решила бы проблему. В Python 3.0 собирались ввести стандартный модуль &lt;a href=&quot;http://www.python.org/dev/peps/pep-3124/&quot;&gt;overloading&lt;/a&gt; но дело не заладилось (&lt;a href=&quot;http://mail.python.org/pipermail/python-3000/2007-July/008784.html&quot;&gt;подробности&lt;/a&gt;). Судя по PEP`у, в модуле должно было быть реализовано много вкусностей (обобщенные функции, перегрузка, интерфейсы и т.д.). Библиотека должна была использовать &lt;a href=&quot;http://www.python.org/dev/peps/pep-3107/&quot;&gt;аннотации функций&lt;/a&gt; появившиеся в новой версии python&#39;а, а смотрелось бы это на нашем примере так:&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;import types, inspect
from overloading import overload

# обобщенная функция
def inspect_object(obj):
   print &quot;repr:&quot;, repr(obj)

@overload
def inspect_object(module: types.ModuleType):
   print &quot;repr:&quot;, repr(module)
   print &quot;file:&quot;, module.__file__

@overload
def inspect_object(function: types.FunctionType):
   print &quot;repr:&quot;, repr(function)
   print &quot;sign:&quot;, (function.__name__ + inspect.formatargspec(
       *inspect.getargspec(function)))
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Этот код понятен и легко расширяем, ведь легче написать новую специализированную функцию чем рыться во всех этих &lt;code&gt;if&lt;/code&gt;`ах. (более аргументированные объяснения, чем подход с специализированными функциями лучше, ручного выбора с помощью &lt;code&gt;if&lt;/code&gt;`ов, можно почитать в любой хорошей книжке по C++ или в том же &lt;a href=&quot;http://www.python.org/dev/peps/pep-3107/&quot;&gt;PEP-3107&lt;/a&gt;)&lt;br /&gt;
Но к сожалению библиотеку так и не реализовали до базового функционала.&lt;br /&gt;
&lt;br /&gt;
Мне давно была интересна эта тема и после того как я узнал что PEP всё таки отложили на неопределённое время, я решился на написание собственного &lt;s&gt;велосипеда&lt;/s&gt; реализации. В ней нет и половины возможностей и расширяемости первоисточника, но я писал её скорее для фана. В моём представлении она должна выполнять свою основную задачу, добавлять в язык перегрузку функций, основанную на типах аргументов, максимально близкую к реализации оной из C++. Т.е. от идеи включения в библиотеку реализации интерфейсов и прочего функционала, я отказался, сосредоточившись на перегрузке. Так как писал я библиотеку на чистом python`е и поиск функций происходит в runtime, то старался максимально сократить время поиска среди кандидатов, подходящей функции (Phillip J. Eby, автор PEP`а и библиотеки &lt;a href=&quot;http://peak.telecommunity.com/&quot;&gt;PEAK&lt;/a&gt; для оптимизации использовал &lt;a href=&quot;http://pypi.python.org/pypi/BytecodeAssembler&quot;&gt;Bytecode Assembler&lt;/a&gt;, а это сильная магия:)). Всё таки Python 3.0 еще будущее, а настоящим сейчас является ветка 2.x, в которой нет аннотаций для функций. Так что синтаксис немного видоизменился, тип аргумента передаётся декоратору &lt;code&gt;overload&lt;/code&gt; в качестве параметра, первый тип ассоциируется с первым параметром декорируемой функции, второй со вторым, и т.д.&lt;br /&gt;
Наш пример, использующий библиотеку, выглядит так:&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;import types, inspect
from overloading import overload

# обобщенная функция
def inspect_object(obj):
    print &quot;repr:&quot;, repr(obj)

@overload(types.ModuleType)
def inspect_object(module):
    print &quot;repr:&quot;, repr(module)
    print &quot;file:&quot;, module.__file__

@overload(types.FunctionType)
def inspect_object(function):
    print &quot;repr:&quot;, repr(function)
    print &quot;sign:&quot;, (function.__name__ + inspect.formatargspec(
        *inspect.getargspec(function)))
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
В случае если вы не хотите типизировать один из параметров функции, можно поставить в место типа &lt;code&gt;object&lt;/code&gt;, ведь библиотека поддерживает полиморфизм.&lt;br /&gt;
&lt;br /&gt;
Не буду пересказывать все достоинства и недостатки библиотеки, так как всё это разжевано в документации, для заинтересовавшихся ссылка на &lt;a href=&quot;http://code.google.com/p/overloading-lib/&quot;&gt;страницу проекта&lt;/a&gt;&lt;/div&gt;</description><link>http://lazycleric.blogspot.com/2009/05/python.html</link><author>noreply@blogger.com (clericJ)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2623496709141658829.post-8929123175627229690</guid><pubDate>Wed, 22 Apr 2009 13:03:00 +0000</pubDate><atom:updated>2012-06-20T00:20:59.717+04:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">декораторы</category><category domain="http://www.blogger.com/atom/ns#">дескрипторы</category><category domain="http://www.blogger.com/atom/ns#">метаклассы</category><category domain="http://www.blogger.com/atom/ns#">программирование</category><title>А что если не было бы таких вещей как instancemethod...</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span class=&quot;cut&quot;&gt;&lt;br /&gt;Иногда мне в голову приходят бредовые идеи, которые однако помогают мне отдыхать от реальных задач, и одна из таких идей - а что если в python`е не было бы таких вещей как &lt;code&gt;instancemethod&lt;/code&gt;? И пришлось бы писать примерно в таком духе:&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;
class A(object):

  def hello(self):
       print self, &quot;hello&quot;

a=A()
a.hello(a)&lt;/pre&gt;
&lt;span class=&quot;cut&quot;&gt;&lt;/span&gt;Я понимаю что всемогущий Гвидо может покарать меня молнией за богохульство:), но всё же, это интересная практика (оговорюсь, на конструкторы и дескрипторы сие ужасающее правило не действует).&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;Шаг первый, напишем дескриптор &lt;code&gt;method&lt;/code&gt;, по семантике схожий с &lt;code&gt;instancemethod&lt;/code&gt;, который будет оборачивать все методы, объявленные в классе.&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;
import functools

class method(object):

   def __init__(self, func):
       self.func =  func

   def __get__(self, instance, owner):
       return functools.partial(self.func, instance)
&lt;/pre&gt;
&lt;br /&gt;тут в методе &lt;code&gt;__get__&lt;/code&gt;, мы используем реализацию карринга, из модуля &lt;code&gt;functools&lt;/code&gt; (по другому это можно записать так, &lt;code&gt;lambda *args, **kwargs: instance, *args, **kwargs&lt;/code&gt;) для связывания первого аргумента с экземпляром класса (тот самый &lt;code&gt;self&lt;/code&gt;), и возвращаем уже связанную функцию.&lt;br /&gt;&lt;br /&gt;Второе, нам нужна тестовая функция, давайте же напишем её:&lt;br /&gt;&lt;pre class=&quot;brush: python&quot;&gt;
def hello(self):
     print self, &quot;hello&quot;
&lt;/pre&gt;
&lt;br /&gt;Шаг третий, определить класс в котором с помощью дескриптора объявить наш новый метод:
&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;
class A(object):

   hm = method(hello)&lt;/pre&gt;
&lt;br /&gt;попробуем:&lt;br /&gt;&lt;pre class=&quot;brush: python&quot;&gt;
&amp;gt;&amp;gt; a=A()
&amp;gt;&amp;gt; a.hello() # и вауля, работает!
&amp;lt;__main__.A object at 0x00......&amp;gt; hello
   
&lt;/pre&gt;

&lt;br /&gt;однако с помощью декораторов можно сделать так чтобы метод определялся на месте, а не заворачивался потом:&lt;br /&gt;&lt;pre class=&quot;brush: python&quot;&gt;
class A(object):
   @method
   def hello(self):
       print self, &quot;hello&quot;
&lt;/pre&gt;
&lt;br /&gt;тут важно понять что &lt;code&gt;method&lt;/code&gt; не декоратор в привычном его понимании, в качестве декораторов часто служат функции или классы с методом &lt;code&gt;__call__&lt;/code&gt;. Однако python динамический язык, поэтому декоратором может быть всё что отвечает простому требованию - это что-то можно вызвать (для &lt;code&gt;method&lt;/code&gt;, это конструктор в который и передаётся функция &lt;code&gt;hello&lt;/code&gt;), при декорировании и оно должно вернуть некий результат при вызове - тут происходит вот что, &lt;code&gt;hello&lt;/code&gt; заворачивается в дескриптор &lt;code&gt;method&lt;/code&gt;, а когда происходит вызов &lt;code&gt;hello&lt;/code&gt; срабатывает метод &lt;code&gt;__get__&lt;/code&gt; дескриптора, который в свою очередь возвращает функцию, первый параметр которой уже предопределен. Кстати декораторы &lt;code&gt;classmethod&lt;/code&gt; и &lt;code&gt;staticmethod&lt;/code&gt; тоже являются дескрипторами.&lt;br /&gt;&lt;br /&gt;И так, этот вариант почти идеален, однако нет предела совершенству, для того чтобы всё смотрелось как в настоящем python`е, а не в том что я себе выдумал, осталось только избавится от декоратора, и запись станет привычной. Добиться этого можно с помощью метакласса, который автоматически будет заворачивать все функции определенные в классе в дескриптор &lt;code&gt;method&lt;/code&gt;, реализация тривиальна:&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;
import types

class NewObjectMeta(type):

   def __init__(cls, clsname, bases, namespace):
       for name, attr in namespace.iteritems():
           if not issubclass(type(name), types.FunctionType):
               continue
     
           setattr(cls, name, method(attr))

# Для удобства определим класс с уже определенным метаклассом
class NewObject(object):
     __metaclass__ = NewObjectMeta
   
&lt;/pre&gt;
&lt;br /&gt;проверим:&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;
class A(NewObject):

   def hello(self):
       print self, &quot;hello&quot;


&amp;gt;&amp;gt; a=A()
&amp;gt;&amp;gt; a.hello()
&amp;lt;__main__.A object hello at 0x00......&amp;gt;
   
&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;всё работает как и ожидалось, хотя если вы замените &lt;code&gt;NewObject&lt;/code&gt;, на стандартный &lt;code&gt;object&lt;/code&gt;, в своём нормальном питоне, вывод на консоль будет одним и тем же&lt;br /&gt;&lt;br /&gt;p.s: Задача разумеется бредовая, но с её помощью можно показать такие вещи как дескритпоры, декораторы и метаклассы, да и практиковатся нужно, как можно чаще :)&lt;/div&gt;</description><link>http://lazycleric.blogspot.com/2009/01/instancemethod.html</link><author>noreply@blogger.com (clericJ)</author><thr:total>1</thr:total></item></channel></rss>