<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-2141445677437943011</id><updated>2010-01-06T01:07:08.061+03:00</updated><title type='text'>KonishchevDmitry's small blog</title><subtitle type='html'>С Linux так всегда - сколько не копай вглубь и вширь, всегда найдется что-то новое...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default?orderby=updated'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default?start-index=26&amp;max-results=25&amp;orderby=updated'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-2249608551973158055</id><published>2009-10-17T17:59:00.004+04:00</published><updated>2009-12-09T20:37:16.194+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='vcs'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Git: так ли хорош Subversion?</title><content type='html'>Subversion я пользуюсь уже около года. До этого был CVS, но преимущества SVN перед CVS'ом были настолько очевидны, что я нераздумывая перевел все свои репозитории на Subversion. С тех пор я как-то больше не оглядывался на другие системы контроля версий, но вот недавно на Хабрахабре наткнулся на &lt;a href="http://habrahabr.ru/blogs/development_tools/71115/"&gt;пост&lt;/a&gt; с переводом выступления Линуса Торвальдса, посвященного Git - системе контроля версий, которую он написал, чтобы использовать при разработке ядра.&lt;br /&gt;&lt;br /&gt;Не буду перечислять недостатки/достоинства Git - все это уже давно написано/сказано за меня, но скажу лишь, что теперь я начал переводить свои SVN-репозитории на Git. В связи с этим я предлагаю вам ознакомиться с данным видеовыступлением - наверняка многие из вас сочтут очень привлекательной идею распределенных систем контроля версий. В таком случае вы не пожалеете.&lt;br /&gt;&lt;br /&gt;Цель данной заметки - заставить вас усомниться в вашем выборе системы контроля версий и подкинуть несколько ссылок, чтобы сэкономить вам время на поиске необходимой информации. Правда, сам я тоже особо время на поиск не тратил, т. к. довольно быстро нашел несколько статей, которые предоставили мне всю необходимую для ознакомления с Git информацию. На начальном этапе, я думаю, их будет вполне достаточно. Прочитав/прослушав/просмотрев данную информацию вы получите достаточно знаний, чтобы более или менее уверенно работать в Git. И лишь поработав с ней хотя бы месяц, поняв, что именно вам от нее нужно и в каком виде, можно будет приступить к чтению более обширной официальной документации. А пока...&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Чтобы понять, зачем оно вам вообще надо:&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=BtAlN4MaBr8&amp;feature=PlayList&amp;p=F9F847AC0AAA6735&amp;index=0&amp;playnext=1"&gt;Выступление Линуса Торвальдса&lt;/a&gt;&lt;br /&gt;&lt;a href="http://utp.umputun.com/podcast/utp-1/"&gt;UTP - Выпуск 1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://utp.umputun.com/podcast/utp-2/"&gt;UTP - Выпуск 2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://habrahabr.ru/blogs/Git/60030/"&gt;Git Workflow&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://los-t.livejournal.com/tag/git+guts"&gt;Git Guts&lt;/a&gt; - данный цикл статей, описывающий внутреннее устройство Git, просто заставит вас его полюбить.&lt;br /&gt;&lt;br /&gt;Базовые навыки работы с Git:&lt;br /&gt;&lt;a href="http://habrahabr.ru/blogs/Git/60347/"&gt;Git Wizardry&lt;/a&gt;&lt;br /&gt;&lt;a href="http://book.git-scm.com/"&gt;Git Community Book&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.zorched.net/2008/04/14/start-a-new-branch-on-your-remote-git-repository/"&gt;Start a New Branch on your Remote Git Repository&lt;/a&gt;&lt;br /&gt;&lt;a href="http://gq.net.ru/2008/11/19/some-more-words-about-git/"&gt;Еще немножко про git&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://leonid.shevtsov.me/22-07-2009/perenos-svn-repozitariya-v-git/"&gt;Перенос SVN-репозитария в git&lt;/a&gt;&lt;br /&gt;&lt;a href="http://m-ivanov.livejournal.com/7988.html"&gt;Командная работа в Git&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Удачи. Надеюсь, он вам понравится так же, как и мне.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-2249608551973158055?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/2249608551973158055/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=2249608551973158055' title='Комментарии: 11'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/2249608551973158055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/2249608551973158055'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2009/10/git-subversion.html' title='Git: так ли хорош Subversion?'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-8151597290487957999</id><published>2009-11-08T21:00:00.003+03:00</published><updated>2009-11-19T23:58:38.441+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='автоматизация'/><category scheme='http://www.blogger.com/atom/ns#' term='subdownloader'/><category scheme='http://www.blogger.com/atom/ns#' term='субтитры'/><title type='text'>Автоматическое скачивание субтитров</title><content type='html'>Недавно, скачивая субтитры к очередной серии Lie To Me, я задумался, нельзя ли как-нибудь автоматизировать эти довольно нудные действия (поиск субтитров для конкретной серии конкретного сериала, скачивание и переименование, чтобы файл с субтитрами имел такое же имя, как и видеофайл). Оказалось, что можно.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Специально для этого существует &lt;a href="http://subdownloader.net/"&gt;SubDownloader&lt;/a&gt;. Программа имеет графический интерфейс и интерфейс командной строки и полностью автоматически выкачивает субтитры для всех видеофайлов в указанной вами директории (или для одного видеофайла).&lt;br /&gt;&lt;br /&gt;Правда, мне показалось неудобным использовать ее графический интерфейс, и я решил пойти дальше, интегрировав запуск SubDownloader в меню Nautilus, чтобы для скачивания всех нужных мне субтитров мне было необходимо только два раза щелкнуть мышью. :)&lt;br /&gt;&lt;br /&gt;Т. к. программа имеет CLI-интерфейс, то сделать это было предельно просто. Я написал небольшой скрипт:&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;#!/bin/bash&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Скачивает субтитры для всех файлов, находящихся в папке, путь к которой&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# передан в качестве параметра.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#008b8b"&gt;video_dir&lt;/font&gt;=&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;$1&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008b8b"&gt;script_pid&lt;/font&gt;=&lt;font color="#a020f0"&gt;$BASHPID&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;if &lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;!&lt;/b&gt;&lt;/font&gt;&amp;nbsp;which zenity &lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;/dev/null &lt;font color="#ff00ff"&gt;2&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;amp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;then&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;echo&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;Error! zenity must be installed.&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;amp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;2&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;exit&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;fi&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;if &lt;/b&gt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;[[&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;$#&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;-ne&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;||&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;!&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;-d&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;$video_dir&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;]]&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;then&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;zenity --error --&lt;font color="#008b8b"&gt;title&lt;/font&gt;=&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;Subtitle downloader usage error&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;\&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--&lt;font color="#008b8b"&gt;text&lt;/font&gt;=&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;Subtitle downloader usage error. Program takes a path to a directory with video files as a parameter.&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;exit&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;fi&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;if &lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;!&lt;/b&gt;&lt;/font&gt;&amp;nbsp;which subdownloader &lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;/dev/null &lt;font color="#ff00ff"&gt;2&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;amp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;then&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;zenity --error --&lt;font color="#008b8b"&gt;title&lt;/font&gt;=&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;Subtitle downloader error&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;\&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--&lt;font color="#008b8b"&gt;text&lt;/font&gt;=&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;SubDownloader (&lt;a href="http://subdownloader.net/)"&gt;http://subdownloader.net/)&lt;/a&gt; must be installed.&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;exit&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;fi&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;subdownloader &lt;font color="#6a5acd"&gt;--cli&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;--lang=en&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;--rename-subs&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;--video=&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;$video_dir&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;2&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;gt;&amp;amp;1&lt;/b&gt;&lt;/font&gt;&amp;nbsp;| &lt;font color="#6a5acd"&gt;{&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;while &lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;read&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;nbsp;line&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;echo&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;$line&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;echo&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;$line&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;nbsp;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;amp;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;2&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;done&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#6a5acd"&gt;}&lt;/font&gt;&amp;nbsp;| &lt;font color="#6a5acd"&gt;{&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if &lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;!&lt;/b&gt;&lt;/font&gt;&amp;nbsp;zenity --progress --pulsate --auto-close \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--&lt;font color="#008b8b"&gt;title&lt;/font&gt;=&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;Subtitle downloader&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;\&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--&lt;font color="#008b8b"&gt;text&lt;/font&gt;=&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;Downloading subtitles for the '&lt;/font&gt;&lt;font color="#a020f0"&gt;$video_dir&lt;/font&gt;&lt;font color="#ff00ff"&gt;'...&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;then&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;kill&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;$script_pid&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;fi&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#6a5acd"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;и добавил в &lt;a href="http://www.nautilus-actions.org/"&gt;Nautilus-Actions&lt;/a&gt; следующее действие:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dWRCmLfFFN0/SvbultEE5oI/AAAAAAAAAQo/m7yXPU00x5k/s1600-h/nautilus_actions_action.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 291px;" src="http://3.bp.blogspot.com/_dWRCmLfFFN0/SvbultEE5oI/AAAAAAAAAQo/m7yXPU00x5k/s320/nautilus_actions_action.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5401767134596753026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dWRCmLfFFN0/Svbur66ZZzI/AAAAAAAAAQw/F4fLjhn_JUU/s1600-h/nautilus_actions_conditions.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 291px;" src="http://1.bp.blogspot.com/_dWRCmLfFFN0/Svbur66ZZzI/AAAAAAAAAQw/F4fLjhn_JUU/s320/nautilus_actions_conditions.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5401767241393465138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Все. Теперь я в Nautilus перехожу в любую директорию, содержащую видеофайлы, для которых необходимо скачать субтитры:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dWRCmLfFFN0/SvbuV-XUOxI/AAAAAAAAAQY/r8HoLW5dLYE/s1600-h/files_without_subtitles.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 96px;" src="http://4.bp.blogspot.com/_dWRCmLfFFN0/SvbuV-XUOxI/AAAAAAAAAQY/r8HoLW5dLYE/s320/files_without_subtitles.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5401766864362945298" /&gt;&lt;/a&gt;&lt;br /&gt;кликаю по элементу меню File-&gt;Download subtitles:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dWRCmLfFFN0/SvbuMg7hLBI/AAAAAAAAAQQ/kXv-Iv-60qU/s1600-h/download_subtitles_in_menu.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 294px; height: 320px;" src="http://4.bp.blogspot.com/_dWRCmLfFFN0/SvbuMg7hLBI/AAAAAAAAAQQ/kXv-Iv-60qU/s320/download_subtitles_in_menu.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5401766701842902034" /&gt;&lt;/a&gt;&lt;br /&gt;жду, пока субтитры скачаются:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dWRCmLfFFN0/Svbux4yyNEI/AAAAAAAAAQ4/dcUn-8hZb2Y/s1600-h/subtitles_downloading_in_process.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 98px;" src="http://2.bp.blogspot.com/_dWRCmLfFFN0/Svbux4yyNEI/AAAAAAAAAQ4/dcUn-8hZb2Y/s320/subtitles_downloading_in_process.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5401767343903880258" /&gt;&lt;/a&gt;&lt;br /&gt;и получаю то, что мне нужно:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dWRCmLfFFN0/SvbucOSFi2I/AAAAAAAAAQg/sPPxA9HkWCE/s1600-h/files_with_subtitles.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 143px;" src="http://2.bp.blogspot.com/_dWRCmLfFFN0/SvbucOSFi2I/AAAAAAAAAQg/sPPxA9HkWCE/s320/files_with_subtitles.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5401766971715193698" /&gt;&lt;/a&gt;&lt;br /&gt;Теперь можно смотреть эти серии при помощи &lt;a href="http://konishchevdmitry.blogspot.com/2009/05/blog-post.html"&gt;submplayer&lt;/a&gt;. :)&lt;br /&gt;&lt;br /&gt;Единственное, что надо отметить, SubDownloader 2.0.9.3 который был у меня в Ubuntu 9.10 почему-то отказывался переименовывать субтитры, чтобы их имена совпадали с именами видеофайлов (с GUI-интерфейсом таких проблем не было). Поэтому я установил SubDownloader 2.0.10~beta1+bzr483 из &lt;a href="https://edge.launchpad.net/~subdownloader-developers/+archive/ppa"&gt;PPA разработчиков&lt;/a&gt;, в которой эта ошибка уже устранена.&lt;br /&gt;&lt;br /&gt;Удачи, надеюсь мой совет вам пригодится.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-8151597290487957999?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/8151597290487957999/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=8151597290487957999' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/8151597290487957999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/8151597290487957999'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2009/11/blog-post.html' title='Автоматическое скачивание субтитров'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dWRCmLfFFN0/SvbultEE5oI/AAAAAAAAAQo/m7yXPU00x5k/s72-c/nautilus_actions_action.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-4685329408581888271</id><published>2009-11-19T23:15:00.002+03:00</published><updated>2009-11-19T23:50:48.006+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='stardict'/><title type='text'>StarDict: пропадание всплывающего окна с переводом</title><content type='html'>Всем хорош StarDict, но есть одна мелочь, которая порой раздражает. Выделяю какое-либо слово, нажимаю горячую клавишу - появляется плавающее окошко с переводом этого слова. Если теперь слегка отодвинуть мышку в сторону, то плавающее окошко пропадет и больше не появится до тех пор, пока я не выделю другое слово, несмотря на последующие нажатия горячей клавиши.&lt;br /&gt;&lt;br /&gt;Мне это надоело, и я не поленился залезть в исходники StarDict, чтобы сделать так, как мне хочется. :)&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;В результате получился вот такой вот небольшой патч:&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;diff -rc stardict-3.0.1/src/selection.cpp stardict-3.0.1.patched/src/selection.cpp&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;*** stardict-3.0.1/src/selection.cpp 2007-09-04 12:47:10.000000000 +0400&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;--- stardict-3.0.1.patched/src/selection.cpp 2009-11-18 20:03:40.000000000 +0300&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;***************&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;*** 179,185 ****&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp;if (LastClipWord != sToken) { // not equal&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LastClipWord = sToken;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(bIsPureEnglish(sToken))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;--- 179,201 ----&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;font color="#a020f0"&gt;! &lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;! &lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp;bool only_scan_while_modifier_key = conf-&amp;gt;get_bool_at(&amp;quot;dictionary/only_scan_while_modifier_key&amp;quot;);&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp;bool scan = false;&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;! &lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp;if(only_scan_while_modifier_key)&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp; if(!gpAppFrame-&amp;gt;oFloatWin.FloatWindow || !GTK_WIDGET_VISIBLE(gpAppFrame-&amp;gt;oFloatWin.FloatWindow))&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scan = true;&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp;else&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp; if(LastClipWord != sToken)&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scan = true;&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;! &lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;!&amp;nbsp;&amp;nbsp;if (scan) {&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LastClipWord = sToken;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(bIsPureEnglish(sToken))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;После применения данного патча StarDict будет отображать плавающее окошко вне зависимости от того, перевод какого слова отображался в прошлый раз.&lt;br /&gt;&lt;br /&gt;Пользователи Ubuntu 9.10 могут установить уже пропатченную версию из моего PPA:&lt;pre class="my_code_box"&gt;$ sudo add-apt-repository ppa:konishchevdmitry/public&lt;br /&gt;$ sudo apt-get update&lt;br /&gt;$ sudo apt-get install stardict-floatwin-fix&lt;/pre&gt;&lt;br /&gt;P.S.: Данный патч исправляет ошибку только в том случае, если у вас в настройках отмечен флажок "Only scan while the modifier key is being pressed". Другим режимом работы я не пользуюсь, поэтому лезть глубже в код и исправлять его было как-то лень. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-4685329408581888271?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/4685329408581888271/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=4685329408581888271' title='Комментарии: 9'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/4685329408581888271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/4685329408581888271'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2009/11/stardict.html' title='StarDict: пропадание всплывающего окна с переводом'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-2111017575219499635</id><published>2007-08-18T17:18:00.002+04:00</published><updated>2009-11-19T23:41:10.983+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='информация'/><category scheme='http://www.blogger.com/atom/ns#' term='qframecatcher'/><category scheme='http://www.blogger.com/atom/ns#' term='mediainfo'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='bittorrent'/><category scheme='http://www.blogger.com/atom/ns#' term='видеофайлы'/><category scheme='http://www.blogger.com/atom/ns#' term='скриншоты'/><title type='text'>Получение информации о видеофайле</title><content type='html'>Сегодня очень большое количество пользователей интернета регулярно скачивают фильмы с Bittorrent трекеров. Есть также люди (их гораздо меньше), которые эти фильмы на трекеры выкладывают. Эта статья, для тех, кто выкладывает. :)&lt;br /&gt;&lt;br /&gt;Когда вы в очередной раз хотите что-нибудь зарелизить на трекер, перед вами непременно встает проблема оформления раздачи, т. к. по-моему на всех трекерах администрация требует, как минимум, добавить в описание раздачи информацию о файле и серию скриншотов из выкладываемого видеофайла.&lt;br /&gt;&lt;br /&gt;Если вы очень редко релизите что-либо на трекер, то в таком случае можно вручную наделать скриншотов, посмотреть в своем любимом плеере информацию о видеофайле во время его проигрывания и переписать ее в форму создания раздачи на трекере.&lt;br /&gt;&lt;br /&gt;Если же вы создаете раздачи довольно часто, как, например, это делаю я, то, скорее всего, у вас возникнет мысль о том, что неплохо было бы этот процесс хотя бы немного автоматизировать. Я попробовал задаться такой целью. Вот что из этого вышло.&lt;br /&gt;&lt;span class=fullpost&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Создание серии скриншотов из видеофайла&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;При всех моих стараниях, прочесывая Интернет, мне удалось найти только одну программу, которая позволяла бы это сделать (если вы знаете другие программы подобного рода - отпишитесь, буду благодарен), хотя с того момента прошло довольно много времени, так что, возможно, уже появились аналоги.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dWRCmLfFFN0/RsdFWd1ixwI/AAAAAAAAABU/BwBar4x-iJk/s1600-h/qframecatcher.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: none; cursor: pointer;" src="http://1.bp.blogspot.com/_dWRCmLfFFN0/RsdFWd1ixwI/AAAAAAAAABU/BwBar4x-iJk/s320/qframecatcher.jpg" alt="" id="BLOGGER_PHOTO_ID_5100121355289020162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;А называется найденная мной программа QFrameCatcher. Написана она на Qt, так что поклонникам GTK в этот раз не повезло. :)&lt;br /&gt;&lt;br /&gt;К моей огромной радости, она умеет все, что мне от нее могло бы понадобиться - настройка количества захватываемых кадров, их размер, возможность сохранить каждый кадр в отдельный файл, или все кадры разместить в одном графическом файле, задав количество строк и столбцов. Единственный недостаток, который я бы мог по отношению к ней назвать - это то, что с ней никак нельзя работать из консоли.&lt;br /&gt;&lt;br /&gt;Во всем остальном я ей очень доволен. Так что, если не брезгуете Qt приложениями, бегом на &lt;a href="http://developer.berlios.de/projects/qframecatcher/"&gt;сайт производителя&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Получение информации о видеофайле&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Когда я приступил к поиску программы для решения данной задачи, я подумал: "Ну уж тут то проблем точно не должно быть. Раз уж нашел программу, которая умеет делать скриншоты видеофайлов, то уж найти программу для отображения информации о них не составит труда." Естественно, я ошибся. :) Поиск не дал вообще никаких результатов. Тогда я пошел на форумы.&lt;br /&gt;&lt;br /&gt;Поначалу там советовали что-нибудь вроде "запусти mplayer -v videofile и ищи там нужную тебе информацию". :) Такой вариант меня совсем не устраивал, т. к. обработать эту информацию каким-нибудь awk и вывести в более удобочитаемом виде практически не представлялась возможной, т. к. формат вывода этой информации менялся в зависимости от типа видеофайла.&lt;br /&gt;&lt;br /&gt;Но в конце концов удача улыбнулась мне, и товарищ &lt;a href="http://linuxforum.ru/index.php?showuser=4211"&gt;minder&lt;/a&gt; на &lt;a href="http://linuxforum.ru/"&gt;Linuxforum.ru&lt;/a&gt; посоветовал мне программу MediaInfo, которая выдавала информацию во вполне удобочитаемом виде. Прочитав вывод mediainfo --Help я к своей необычайной радости узнал, что она, оказывается, может выдавать информацию на основании заданного вами шаблона. Как только я это узнал, то сразу же сел за написание скрипта, который выдавал бы мне только то, что я хочу, и так, как я хочу. А написание этого скрипта послужило поводом для данной статьи.&lt;br /&gt;&lt;br /&gt;Вот собственно и сам скрипт:&lt;br /&gt;&lt;pre class="my_code_box"&gt;#!/bin/bash&lt;br /&gt;#***************************************************************************&lt;br /&gt;#*   Copyright (C) 2007, Konishchev Dmitry                                 *&lt;br /&gt;#*   http://konishchevdmitry.blogspot.com/                                 *&lt;br /&gt;#*                                                                         *&lt;br /&gt;#*   This program is free software; you can redistribute it and/or modify  *&lt;br /&gt;#*   it under the terms of the GNU General Public License as published by  *&lt;br /&gt;#*   the Free Software Foundation; either version 3 of the License, or     *&lt;br /&gt;#*   (at your option) any later version.                                   *&lt;br /&gt;#*                                                                         *&lt;br /&gt;#*   This program is distributed in the hope that it will be useful,       *&lt;br /&gt;#*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *&lt;br /&gt;#*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *&lt;br /&gt;#*   GNU General Public License for more details.                          *&lt;br /&gt;#**************************************************************************/&lt;br /&gt;&lt;br /&gt;# Скрипт получения информации о видеофайле&lt;br /&gt;# Использование: get_video_info video_file1 video_file2 ...&lt;br /&gt;&lt;br /&gt;for file in "$@"&lt;br /&gt;do&lt;br /&gt; if [ -f "$file" ]&lt;br /&gt; then&lt;br /&gt;  {&lt;br /&gt;   echo "[b]Файл:[/b] $file"&lt;br /&gt;   mediainfo "$file" --Inform="General;FILE_SIZE: %FileSize/String4%\nTIME: %PlayTime/String%" \&lt;br /&gt;    | sed '&lt;br /&gt;    /FILE_SIZE/ s/Gib/Гб/&lt;br /&gt;    /FILE_SIZE/ s/MiB/Мб/&lt;br /&gt;    /FILE_SIZE/ s/KiB/Кб/&lt;br /&gt;    s/FILE_SIZE:/[b]Размер:[\/b]/&lt;br /&gt;    /TIME/ s/h/ ч/&lt;br /&gt;    /TIME/ s/mn/ мин/&lt;br /&gt;    /TIME/ s/s/ сек/&lt;br /&gt;    s/TIME:/[b]Продолжительность:[\/b]/'&lt;br /&gt;&lt;br /&gt;   mediainfo "$file" --Inform="Video;\nVIDEO: %Codec/String%, %Width%x%Height% (%AspectRatio%:1), %FrameRate/String%, %BitRate/String%" \&lt;br /&gt;    | sed 's/VIDEO:/[b]Видео:[\/b]/; s/Kbps/Кбит\/с/'&lt;br /&gt;&lt;br /&gt;   mediainfo "$file" --Inform="Audio;\nAUDIO: %Codec/String%, %SamplingRate% Hz, %BitRate_Mode% %BitRate/String%" \&lt;br /&gt;    | sed 's/AUDIO:/[b]Аудио:[\/b]/; s/Kbps/Кбит\/с/'&lt;br /&gt;  } | sed -r '/^\s*$/ d'&lt;br /&gt; else&lt;br /&gt;  echo "Bad file: $file"&lt;br /&gt; fi&lt;br /&gt;done&lt;/pre&gt;Применив данный скрипт к одному или нескольким файлам, вы увидите примерно следующий результат:&lt;br /&gt;&lt;pre class="my_code_box"&gt;Файл: Shpionka_V_1(17)_DVDRip_[torrents.ru].avi&lt;br /&gt;Размер: 388.7 Мб&lt;br /&gt;Продолжительность: 41 мин 24 сек&lt;br /&gt;Видео: XviD, 720x400 (1.800:1), 25.000 fps, 1104 Кбит/с&lt;br /&gt;Аудио: AC3, 48000 Hz, CBR 192 Кбит/с&lt;/pre&gt;Естественно, та информация, которую он выдает, далеко не предел для MediaInfo. Так что, если кому-то чего-то не хватает, смотрите mediainfo --Help. Данный скрипт - просто демонстрация работы программы.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Примечание:&lt;/span&gt; при написании скрипта использовалась MediaInfo версии 0.7.7.7. С остальными ее версиями я правильной работы гарантировать не могу (практика показывает, что некоторые версии работают некорректно).&lt;br /&gt;&lt;br /&gt;Получить MediaInfo можно &lt;a href="http://mediainfo.sourceforge.net/ru/"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;На этом считаю данную тему освещенной. Надеюсь, что кому-нибудь эта информация пригодится.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-2111017575219499635?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/2111017575219499635/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=2111017575219499635' title='Комментарии: 11'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/2111017575219499635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/2111017575219499635'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2007/08/blog-post_18.html' title='Получение информации о видеофайле'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dWRCmLfFFN0/RsdFWd1ixwI/AAAAAAAAABU/BwBar4x-iJk/s72-c/qframecatcher.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-5828759196594954137</id><published>2007-09-02T12:48:00.002+04:00</published><updated>2009-11-19T23:40:52.424+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='скрипт'/><category scheme='http://www.blogger.com/atom/ns#' term='видеофайлы'/><category scheme='http://www.blogger.com/atom/ns#' term='скриншоты'/><title type='text'>Скрипт для получения серии скриншотов к видеофайлу</title><content type='html'>Недавно я &lt;a href="http://konishchevdmitry.blogspot.com/2007/08/blog-post_18.html"&gt;писал&lt;/a&gt;, как получить серию скриншотов для видеофайла при помощи программы QFrameCatcher. Там же я жаловался на то, что с ней совершенно невозможно работать из консоли. Т. е., к примеру, если мне необходимо получить кучу скриншотов для большого количества видеофайлов, то придется все это делать вручную  при помощи мыши.&lt;br /&gt;&lt;br /&gt;Но вчера один мой друг &lt;a href="http://damnsmallblog.blogspot.com/2007/09/image-grabber-linux.html"&gt;разместил&lt;/a&gt; у себя в блоге скрипт, который выполняет ту же задачу при помощи mplayer'а и ImageMagick.&lt;br /&gt;&lt;br /&gt;Идея, с помощью которой реализуется данная задача, мне очень понравилась, но реализована она в этом скрипте, на мой взгляд, довольно криво. Вот недостатки, которые я заметил, натравив данный скрипт на несколько файлов:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Некорректно работает со многими wmv и HDTVRip видеофайлами (создает серию скриншотов из одного и того же кадра).&lt;/li&gt;&lt;li&gt;Иногда захватывает на 2 кадра больше, чем нужно.&lt;/li&gt;&lt;li&gt;Не умеет обрабатывать сразу несколько файлов.&lt;/li&gt;&lt;li&gt;Выводит кадры так, что в одной строке всегда находятся 4 кадра, и если задать вывод нечетного числа кадров, то в конечном изображении появляются дыры.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Нет возможности создавать скриншоты размером с кадр в фильме (на некоторых трекерах предъявляется такое требование).&lt;/li&gt;&lt;/ul&gt;Поэтому я решил полностью переписать скрипт так, чтобы он удовлетворял всем моим требованиям. При написании скрипта я старался добавлять по-больше комментариев, чтобы помочь людям, которые плохо разбираются в программировании на bash, но хотят что-нибудь исправить в моем скрипте под себя.&lt;br /&gt;&lt;span class=fullpost&gt;&lt;br /&gt;Синтаксис запуска скрипта таков:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;framegrabber [-n stills] [-s size] files...&lt;/span&gt;&lt;br /&gt;где n - количество захватываемых кадров (по умолчанию 20), s - ширина каждого кадра в пикселях (по умолчанию равна ширине кадра в фильме). При формировании конечного изображения количество кадров в строке (2, 3 или 4) выбирается в зависимости от параметра s.&lt;br /&gt;&lt;br /&gt;После запуска &lt;span style="font-family:courier new;"&gt;framegrabber -n8 -s 300 video_file&lt;/span&gt; вы получите примерно такой результат:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dWRCmLfFFN0/RtqLO91ixxI/AAAAAAAAABg/qXLBSAqBryY/s1600-h/Alias.4x06.dvdrip.rus.%5BKvadratMalevicha.ru%5D.avi.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_dWRCmLfFFN0/RtqLO91ixxI/AAAAAAAAABg/qXLBSAqBryY/s320/Alias.4x06.dvdrip.rus.%5BKvadratMalevicha.ru%5D.avi.jpg" alt="" id="BLOGGER_PHOTO_ID_5105546216811448082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;А вот собственно и сам скрипт:&lt;pre class="my_code_box"&gt;#!/bin/bash&lt;br /&gt;#***************************************************************************&lt;br /&gt;#*   Copyright (C) 2007, Konishchev Dmitry                                 *&lt;br /&gt;#*   http://konishchevdmitry.blogspot.com/                                 *&lt;br /&gt;#*                                                                         *&lt;br /&gt;#*   Special thanks to Sergey Volkhin                                      *&lt;br /&gt;#*   http://damnsmallblog.blogspot.com/                                    *&lt;br /&gt;#*                                                                         *&lt;br /&gt;#*   This program is free software; you can redistribute it and/or modify  *&lt;br /&gt;#*   it under the terms of the GNU General Public License as published by  *&lt;br /&gt;#*   the Free Software Foundation; either version 3 of the License, or     *&lt;br /&gt;#*   (at your option) any later version.                                   *&lt;br /&gt;#*                                                                         *&lt;br /&gt;#*   This program is distributed in the hope that it will be useful,       *&lt;br /&gt;#*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *&lt;br /&gt;#*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *&lt;br /&gt;#*   GNU General Public License for more details.                          *&lt;br /&gt;#**************************************************************************/&lt;br /&gt;&lt;br /&gt;usage=" framegrabber -h for help"&lt;br /&gt;usage_describe="\n&lt;br /&gt;Usage : framegrabber [-n stills] [-s size] files...\n&lt;br /&gt;\n&lt;br /&gt;Framegrabber is designed to extract stills from a video that is seekable and supported by Mplayer. Framegrabber then combine them in a mosaic image allowing preview of the movie. Number of frames to extract and size of the frames can be modified via options.\n&lt;br /&gt;\n&lt;br /&gt;Framegrabber depends on Mplayer and Imagemagick\n&lt;br /&gt;\n&lt;br /&gt;Options:\n&lt;br /&gt;-h : print this help message\n&lt;br /&gt;-n : number of stills to extract (default : 20)\n&lt;br /&gt;-s : size of each stills (default: same as video frame size)\n&lt;br /&gt;\n&lt;br /&gt;framegrabber -n 20 -s 100 my_video will create a mosaic of 20 stills of 100 pixels each."&lt;br /&gt;&lt;br /&gt;# Выводит страницу помощи&lt;br /&gt;print_help()&lt;br /&gt;{&lt;br /&gt; echo -e $usage_describe&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Удаляет временные файлы&lt;br /&gt;cleanup()&lt;br /&gt;{&lt;br /&gt; rm $temp_dir/*.jpg 2&gt;/dev/null&lt;br /&gt; rmdir $temp_dir&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Получаем параметры, заданные пользователем --&gt;&lt;br /&gt; while getopts ":n:s:h" option&lt;br /&gt; do&lt;br /&gt;  case $option in&lt;br /&gt;   n ) n=$OPTARG;;&lt;br /&gt;   s ) s=$OPTARG;;&lt;br /&gt;   h ) print_help; exit 0;;&lt;br /&gt;   \? ) echo "Unknown option"; echo $usage; exit 1;;&lt;br /&gt;   * ) echo "Unknown option"; echo $usage; exit 1;;&lt;br /&gt;  esac&lt;br /&gt; done&lt;br /&gt;# Получаем параметры, заданные пользователем &lt;--&lt;br /&gt;&lt;br /&gt;# Значения по умолчанию --&gt;&lt;br /&gt; ((!n)) &amp;&amp; n=20&lt;br /&gt; ((!s)) &amp;&amp; s=0&lt;br /&gt;# Значения по умолчанию &lt;--&lt;br /&gt;&lt;br /&gt;shift $(($OPTIND - 1))&lt;br /&gt;&lt;br /&gt;# Проверяем, передан ли хотя бы один файл --&gt;&lt;br /&gt; if [ "$1" == "" ]&lt;br /&gt; then&lt;br /&gt;  echo $usage&lt;br /&gt;  exit 1&lt;br /&gt; fi&lt;br /&gt;# Проверяем, передан ли хотя бы один файл &lt;--&lt;br /&gt;&lt;br /&gt;# Генерируем скриншоты для каждого переданного файла --&gt;&lt;br /&gt; while [ "$1" != "" ]&lt;br /&gt; do&lt;br /&gt;  temp_dir=/tmp/framegrabber_tmp_$$&lt;br /&gt;  old_dir=`pwd`&lt;br /&gt;  file_path="$1"&lt;br /&gt;  frames_num=$n&lt;br /&gt;  frame_size=$s&lt;br /&gt;  file_name=${file_path##*/}&lt;br /&gt;&lt;br /&gt;  mkdir $temp_dir || exit 1&lt;br /&gt;  cd "$temp_dir" || exit 1&lt;br /&gt;&lt;br /&gt;  echo "Processing file $file_path..."&lt;br /&gt;&lt;br /&gt;  # Получаем абсолютный путь --&gt;&lt;br /&gt;   echo "$file_path" | grep '^/' &gt; /dev/null&lt;br /&gt;   if [ $? -eq 1 ]&lt;br /&gt;   then&lt;br /&gt;    ab_file_path="$old_dir"/"$file_path"&lt;br /&gt;   else&lt;br /&gt;    ab_file_path="$file_path"&lt;br /&gt;   fi&lt;br /&gt;  # Получаем абсолютный путь &lt;--&lt;br /&gt;&lt;br /&gt;  # Получаем продолжительность видеофайла --&gt;&lt;br /&gt;   seconds=`mplayer -ao null -vo null -frames 1 -identify "$ab_file_path" 2&gt;/dev/null | \&lt;br /&gt;    grep ID_LENGTH= | cut -d "=" -f 2`&lt;br /&gt;   if [ "$seconds" == "" ]&lt;br /&gt;   then&lt;br /&gt;    echo "mplayer error! May be \"$file_path\" is not a video file?"&lt;br /&gt;    cleanup&lt;br /&gt;    cd "$old_dir"&lt;br /&gt;    shift&lt;br /&gt;    continue&lt;br /&gt;   fi&lt;br /&gt;   seconds=`awk -v var="$seconds" 'BEGIN { rounded = sprintf("%.0f", var); print rounded }'`&lt;br /&gt;  # Получаем продолжительность видеофайла &lt;--&lt;br /&gt;&lt;br /&gt;  # Количество секунд, через которое мы будем перепрыгивать для получения очередного скриншота --&gt;&lt;br /&gt;   step=`expr $frames_num + 1`&lt;br /&gt;   step=`expr $seconds / $step`&lt;br /&gt;   step=`awk -v var=$step 'BEGIN { rounded = sprintf("%.0f", var); print rounded }'`&lt;br /&gt;  # Количество секунд, через которое мы будем перепрыгивать для получения очередного скриншота &lt;--&lt;br /&gt;&lt;br /&gt;  # Генерируем необходимое количество скриншотов --&gt;&lt;br /&gt;   is_error=0&lt;br /&gt;   cur_sec=$step&lt;br /&gt;   max_image_file_name=`expr 100 + $frames_num - 1`&lt;br /&gt;   for image_file_name in `seq 100 $max_image_file_name`&lt;br /&gt;   do&lt;br /&gt;    mplayer -ao null -ss $cur_sec -vo jpeg -frames 30 "$ab_file_path" &gt; /dev/null 2&gt;&amp;1&lt;br /&gt;    mv 00000007.jpg $image_file_name.jpg 2&gt;/dev/null&lt;br /&gt;    if [ $? -ne 0 ]&lt;br /&gt;    then&lt;br /&gt;     is_error=1&lt;br /&gt;     break&lt;br /&gt;    fi&lt;br /&gt;    rm 000000??.jpg&lt;br /&gt;    cur_sec=`expr $cur_sec + $step`&lt;br /&gt;   done&lt;br /&gt;   &lt;br /&gt;   if [ $is_error -ne 0 ]&lt;br /&gt;   then&lt;br /&gt;    echo "mplayer error! May be \"$file_path\" is not a video file?"&lt;br /&gt;    cleanup&lt;br /&gt;    cd "$old_dir"&lt;br /&gt;    shift&lt;br /&gt;    continue&lt;br /&gt;   fi&lt;br /&gt;  # Генерируем необходимое количество скриншотов &lt;--&lt;br /&gt;&lt;br /&gt;  cd "$old_dir"&lt;br /&gt;&lt;br /&gt;  # Подбираем оптимальное количество кадров в строке --&gt;&lt;br /&gt;   if [ `expr $frames_num % 4` -eq 0 ]&lt;br /&gt;   then&lt;br /&gt;    hor_frames_num=4&lt;br /&gt;   else&lt;br /&gt;    if [ `expr $frames_num % 3` -eq 0 ]&lt;br /&gt;    then&lt;br /&gt;     hor_frames_num=3&lt;br /&gt;    else&lt;br /&gt;     if [ `expr $frames_num % 2` -eq 0 ]&lt;br /&gt;     then&lt;br /&gt;      hor_frames_num=2&lt;br /&gt;     else&lt;br /&gt;      hor_frames_num=4&lt;br /&gt;     fi&lt;br /&gt;    fi&lt;br /&gt;   fi&lt;br /&gt;  # Подбираем оптимальное количество кадров в строке &lt;--&lt;br /&gt;&lt;br /&gt;  # Упаковываем все захваченные кадры в один файл --&gt;&lt;br /&gt;   if [ $frame_size -ne 0 ]&lt;br /&gt;   then&lt;br /&gt;    resize_option="-resize $frame_size"&lt;br /&gt;   else&lt;br /&gt;    resize_option=""&lt;br /&gt;   fi&lt;br /&gt;   montage $resize_option -geometry +2+2 -tile $hor_frames_num -quality 100 $temp_dir/*.jpg "$file_name".jpg&lt;br /&gt;  # Упаковываем все захваченные кадры в один файл &lt;--&lt;br /&gt;&lt;br /&gt;  cleanup&lt;br /&gt;  &lt;br /&gt;  # Прыгаем на следующий в списке файл&lt;br /&gt;  shift&lt;br /&gt; done&lt;br /&gt;# Генерируем скриншоты для каждого переданного файла &lt;--&lt;br /&gt;&lt;br /&gt;echo "Finished"&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-5828759196594954137?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/5828759196594954137/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=5828759196594954137' title='Комментарии: 7'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/5828759196594954137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/5828759196594954137'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2007/09/blog-post.html' title='Скрипт для получения серии скриншотов к видеофайлу'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dWRCmLfFFN0/RtqLO91ixxI/AAAAAAAAABg/qXLBSAqBryY/s72-c/Alias.4x06.dvdrip.rus.%5BKvadratMalevicha.ru%5D.avi.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-8003362133072049035</id><published>2009-11-17T20:45:00.000+03:00</published><updated>2009-11-17T20:45:00.286+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bittorrent'/><category scheme='http://www.blogger.com/atom/ns#' term='автоматизация'/><category scheme='http://www.blogger.com/atom/ns#' term='the pirate bay'/><category scheme='http://www.blogger.com/atom/ns#' term='сериалы'/><category scheme='http://www.blogger.com/atom/ns#' term='rss'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo pipes'/><title type='text'>The Pirate Bay RSS</title><content type='html'>В последнее время я скачиваю довольно много сериалов в английской озвучке с &lt;a href="http://thepiratebay.org/"&gt;The Pirate Bay&lt;/a&gt;, и отсутствие RSS-каналов на нем начало порядком надоедать. Поэтому я создал простенький &lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=74ba9c45dcdf676a7d3866c21723e1a6"&gt;Pipe&lt;/a&gt;, выдающий RSS-поток с последними раздачами нужного мне сериала.&lt;br /&gt;&lt;br /&gt;Пользоваться им предельно просто: заходите на &lt;a href="http://thepiratebay.org/tv/all/"&gt;http://thepiratebay.org/tv/all/&lt;/a&gt;, выбираете интересующий вас сериал и смотрите его идентификатор. К примеру, у сериала Lie To Me (&lt;a href="http://thepiratebay.org/tv/34512/"&gt;http://thepiratebay.org/tv/34512/&lt;/a&gt;) идентификатор будет 34512. Вбиваете его в поле ввода моего &lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=74ba9c45dcdf676a7d3866c21723e1a6"&gt;Pipe'а&lt;/a&gt;, нажимаете кнопку "Run Pipe" и щелкаете по появившейся ссылке "Get as RSS".&lt;br /&gt;&lt;br /&gt;Вообщем, пользуйтесь, если у кого есть необходимость. При желании можно добавить дополнительные фильтры по качеству релизов (TV Rip, 720p) или автору, которому вы больше всего доверяете. Я, например, создал для себя еще один Pipe, который собирает через данный Pipe раздачи всех интересующих меня сериалов и отбрасывает 720p-релизы, которые мне вообщем-то ни к чему.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-8003362133072049035?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/8003362133072049035/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=8003362133072049035' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/8003362133072049035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/8003362133072049035'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2009/11/pirate-bay-rss.html' title='The Pirate Bay RSS'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-8163600194830643810</id><published>2009-05-26T21:38:00.008+04:00</published><updated>2009-05-26T22:46:30.691+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='видео'/><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='submplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='subtitles'/><category scheme='http://www.blogger.com/atom/ns#' term='субтитры'/><category scheme='http://www.blogger.com/atom/ns#' term='mplayer'/><title type='text'>Просмотр одновременно нескольких субтитров при проигрывании фильма</title><content type='html'>Недавно решил попробовать подтянуть свои знания английского языка общеизвестным методом просмотра зарубежных сериалов в оригинальной озвучке с английскими и русскими субтитрами. Полез в Synaptic и стал искать там подходящий для этого плеер. Собственно что хотелось:&lt;ul&gt;&lt;li&gt;Возможность одновременного просмотра нескольких субтитров на разных языках;&lt;/li&gt;&lt;li&gt;Возможность выделять текст субтитров, чтобы вставить его в словарь.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;К моему удивлению, ничего подходящего мне найти не удалось. Да, есть, например, gnome-subtitles, который позволяет это сделать, но почему-то разработчики не добавили в него такую вроде-бы совершенно необходимую функциональность, как прокручивание текста субтитров при воспроизведении фильма. Т. е. в gnome-subtitles следить за тем, какие субтитры должны быть активны в данный момент, приходится самому.&lt;br /&gt;&lt;br /&gt;В итоге, не долго думая, я сел и написал собственный велосипед, благо мой любимый MPlayer довольно дружественен к пользователю тем, что не стесняясь выдает на свой стандартный вывод все, что в нем происходит. Поэтому все, что мне было нужно - это написать обертку над MPlayer'ом, которая будет подглядывать за его выводом и отображать нужные мне субтитры так, как я этого хочу.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Получилось вот что:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dWRCmLfFFN0/Shwq59V_ptI/AAAAAAAAAOQ/v9g0_6z0tiI/s1600-h/submplayer.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 257px;" src="http://1.bp.blogspot.com/_dWRCmLfFFN0/Shwq59V_ptI/AAAAAAAAAOQ/v9g0_6z0tiI/s320/submplayer.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340190433362290386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;submplayer работает в точности как MPlayer, разве что путь к видеофайлу лучше передавать в командной строке первым аргументом, т. к. при запуске он просматривает список переданных аргументов и принимает в качестве пути к файлу, который необходимо воспроизвести, первый встретившийся аргумент, начинающийся не на "-". Определив путь к видеофайлу, как ${parent_directory}/${file_name}.${file_ext}, submplayer ищет и открывает все найденные субтитры вида ${parent_directory}/${file_name}*.srt.&lt;br /&gt;&lt;br /&gt;Программа из серии "покодил на выходных" - писал для себя на скорую руку и поэтому сделал ее очень простой: в случае ошибок выводит их на консоль, а не с помощью диалоговых окон, поддерживает работу только с одним видеофайлом и т. д. Кроме того, обладает довольно большим количеством зависимостей для такой небольшой программы - я просто не стал париться и взял библиотеку, которую писал для &lt;a href="http://konishchevdmitry.blogspot.com/2009/03/flush-04-released-gtk-based-bittorrent.html"&gt;Flush&lt;/a&gt;, чтобы лишний раз не писать то, что уже давно написано.&lt;br /&gt;&lt;br /&gt;Вообщем, результат меня устроил. :) Ну и как всегда, выкладываю сие творение в общий доступ на случай, если она пригодится кому-то кроме меня: &lt;a href="https://sourceforge.net/projects/submplayer/"&gt;submplayer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;P.S.: Субтитры беру с &lt;a href="http://www.tvsubtitles.net/"&gt;www.tvsubtitles.net&lt;/a&gt;, но, честно говоря, их качество меня не очень устраивает, к тому же, если говорить о сериале Scrubs, то русские субтитры там есть только для 6-8 сезонов. Вообщем, если кто подскажет, где еще можно найти субтитры хорошего качества, буду очень благодарен. Или, может быть, существуют какие-либо релиз-группы вроде &lt;a href="http://lostfilm.tv/"&gt;lostfilm.tv&lt;/a&gt; и &lt;a href="http://novafilm.tv/"&gt;novafilm.tv&lt;/a&gt;, но выпускающие вместо озвучки профессионально составленные русские и английские субтитры?&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-8163600194830643810?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/8163600194830643810/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=8163600194830643810' title='Комментарии: 11'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/8163600194830643810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/8163600194830643810'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2009/05/blog-post.html' title='Просмотр одновременно нескольких субтитров при проигрывании фильма'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dWRCmLfFFN0/Shwq59V_ptI/AAAAAAAAAOQ/v9g0_6z0tiI/s72-c/submplayer.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-8461734305405706658</id><published>2009-01-15T00:06:00.001+03:00</published><updated>2009-05-21T17:18:00.176+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tar'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='передача файлов'/><category scheme='http://www.blogger.com/atom/ns#' term='netcat'/><title type='text'>Интересный способ передачи файлов с одного компьютера на другой</title><content type='html'>Вот за что я всегда любил Linux, так это за то, что он предоставляет возможность решать возникающие задачи невообразимым количеством различных и зачастую очень интересных способов. Я понимаю, что не открыл ничего нового, наверняка данный способ многим известен (особенно среди системных администраторов), но я почему-то о нем ни разу не слышал.&lt;br /&gt;&lt;br /&gt;Недавно мне потребовалось передать по локальной сети репозиторий Ubuntu 8.10 с одного компьютера на другой. 44000 файлов и папок - это довольно много. Заливать их, к примеру, по FTP - очень долго, т. к. для каждого файла будет открываться новое соединение. scp и rsync тоже, насколько я знаю, довольно медленно работают с большим количеством файлов.&lt;br /&gt;&lt;br /&gt;И я уже начал запаковывать его в tar архив, чтобы передать по FTP, как вспомнил, что есть такая вещь как netcat. Раньше я им никогда не пользовался - просто где-то слышал о нем и запомнил о его существовании, т. к. он может очень пригодиться при написании скриптов.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Открыл man, почитал и запустил на одной машине команду&lt;pre class="my_code_box"&gt;nc -q0 -l -p 6000 | tar -x&lt;/pre&gt;а на другой&lt;pre class="my_code_box"&gt;tar -c Ubuntu.8.10.i386.repository | nc -q0 192.168.0.1 6000&lt;/pre&gt;&lt;br /&gt;Все! Файлы потекли бурным потоком с одной машины на другую.&lt;br /&gt;&lt;br /&gt;Кстати, кроме красоты реализации и скорости работы он также имеет следующие преимущества перед остальными способами (FTP, scp, rsync):&lt;ul&gt;&lt;li&gt;Нет необходимости держать постоянно запущенный демон (FTP, SSH);&lt;/li&gt;&lt;li&gt;tar и netcat по умолчанию ставятся, наверное, практически во всех дистрибутивах, так что данный метод можно использовать "из коробки";&lt;/li&gt;&lt;li&gt;Если вы передаете, например, дерево исходников, которые очень хорошо сжимаются, то можно добавить к опциям tar флаг -z или -j, в результате чего передаваемые данные будут сжиматься на лету (ну ни красота ли? :) ), что может быть актуально, к примеру, при передаче файлов через Интернет.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-8461734305405706658?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/8461734305405706658/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=8461734305405706658' title='Комментарии: 13'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/8461734305405706658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/8461734305405706658'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2009/01/blog-post.html' title='Интересный способ передачи файлов с одного компьютера на другой'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-4899518707332345916</id><published>2009-03-29T11:49:00.005+04:00</published><updated>2009-03-29T12:05:31.759+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='bittorrent'/><category scheme='http://www.blogger.com/atom/ns#' term='flush'/><title type='text'>Flush 0.4 released (GTK-based BitTorrent клиент)</title><content type='html'>Несколько месяцев назад я &lt;a href="http://konishchevdmitry.blogspot.com/2009/01/flush-gtk-based-bittorrent.html"&gt;писал&lt;/a&gt; о выходе первой (0.1) версии своего BitTorrent клиента. С тех пор Flush дорос до версии 0.4. Т. к. первую версию, скорее всего, поставить решится далеко не каждый, да и в ней могло не быть каких-либо функций, отсутствие которых помешало бы использовать Flush, я решил, что настало время еще раз напомнить о существовании данного BitTorrent клиента. Я использую его с первой версии и сделал таким, каким, как я считаю, должен быть BitTorrent клиент. Если ваши предпочтения совпадают с моими, то, возможно, он вам придется по душе.&lt;br /&gt;&lt;br /&gt;Причины, которые заставили меня написать собственный BitTorrent клиент, я изложил &lt;a href="http://konishchevdmitry.blogspot.com/2009/01/flush-gtk-based-bittorrent.html"&gt;здесь&lt;/a&gt;, так что повторяться не буду. Думаю, лучше всего будет привести список изменений по сравнению с Flush 0.1 и скриншоты, которые зачастую могут сказать гораздо больше, чем любой Changelog. :)&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Основные изменения (с полным списком изменений можно ознакомиться, почитав Changelog):&lt;ul&gt;&lt;li&gt;Создание собственных торрентов;&lt;/li&gt;&lt;li&gt;Переименование как самого торрента, так и его файлов при добавлении;&lt;/li&gt;&lt;li&gt;Поддержка не-UTF-8 локалей (Т. к. libtorrent поддерживает только локаль UTF-8, то в первых версиях клиент мог корректно работать только ней. В более поздних версиях мне удалось "обмануть" libtorrent и заставить его работать с другими локалями.);&lt;/li&gt;&lt;li&gt;Вкладка "Детали", отображающая информацию о выбранном в данный момент торренте.&lt;/li&gt;&lt;li&gt;Вкладка "Опции", в которой можно изменить список трекеров торрента и включить режим последовательного скачивания (в данном режиме скачивание частей торрента происходит не вразнобой, а последовательно, начиная с первых байтов и заканчивая последними).&lt;/li&gt;&lt;li&gt;Включение/отключение DHT и восстановление при запуске прошлой DHT сессии.&lt;/li&gt;&lt;li&gt;Включение/отключение LSD, Peer exchange, UPnP, NAT-PMP и Smart ban.&lt;/li&gt;&lt;li&gt;Возможность задания приоритета на скачивание каждого файла торрента.&lt;/li&gt;&lt;li&gt;Пакет с исходными текстами теперь поставляется в двух версиях: обычной и bundle. Bundle отличается от обычной тем, что включает в себя библиотеки libconfig и libtorrent для статической линковки. Это сделано для упрощения компиляции на тех дистрибутивах, которые не содержат данных библиотек.&lt;/li&gt;&lt;li&gt;Статистика по текущей сессии и за все время.&lt;/li&gt;&lt;li&gt;Возможность задания команды, которая будет использоваться для открытия файлов торрента.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Скриншоты:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dWRCmLfFFN0/Sc8iRH_D3mI/AAAAAAAAANI/oosga_VCTJI/s1600-h/flush_1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 185px;" src="http://1.bp.blogspot.com/_dWRCmLfFFN0/Sc8iRH_D3mI/AAAAAAAAANI/oosga_VCTJI/s320/flush_1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5318507362544508514" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dWRCmLfFFN0/Sc8iR93tr2I/AAAAAAAAANQ/CAe02SVpCU8/s1600-h/flush_2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 145px;" src="http://2.bp.blogspot.com/_dWRCmLfFFN0/Sc8iR93tr2I/AAAAAAAAANQ/CAe02SVpCU8/s320/flush_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5318507377009209186" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dWRCmLfFFN0/Sc8iSaPeOCI/AAAAAAAAANY/qApF_HiijaY/s1600-h/flush_3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 185px;" src="http://1.bp.blogspot.com/_dWRCmLfFFN0/Sc8iSaPeOCI/AAAAAAAAANY/qApF_HiijaY/s320/flush_3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5318507384625051682" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dWRCmLfFFN0/Sc8iSlC94tI/AAAAAAAAANg/NJr7Tlgr37c/s1600-h/flush_4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 185px;" src="http://1.bp.blogspot.com/_dWRCmLfFFN0/Sc8iSlC94tI/AAAAAAAAANg/NJr7Tlgr37c/s320/flush_4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5318507387525391058" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dWRCmLfFFN0/Sc8iS8Mi2WI/AAAAAAAAANo/HLvMslaEIKw/s1600-h/flush_open_torrent.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 300px;" src="http://3.bp.blogspot.com/_dWRCmLfFFN0/Sc8iS8Mi2WI/AAAAAAAAANo/HLvMslaEIKw/s320/flush_open_torrent.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5318507393739577698" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dWRCmLfFFN0/Sc8intUNKcI/AAAAAAAAANw/TZ6nwCCBV7M/s1600-h/flush_settings.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 297px;" src="http://1.bp.blogspot.com/_dWRCmLfFFN0/Sc8intUNKcI/AAAAAAAAANw/TZ6nwCCBV7M/s320/flush_settings.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5318507750522431938" /&gt;&lt;/a&gt;&lt;br /&gt;Как и раньше, исходники и deb пакеты для Ubuntu-8.10-i386 и Ubuntu-8.10-x86-64 можно скачать здесь: &lt;a href="http://sourceforge.net/projects/flush/"&gt;http://sourceforge.net/projects/flush/&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-4899518707332345916?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/4899518707332345916/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=4899518707332345916' title='Комментарии: 83'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/4899518707332345916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/4899518707332345916'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2009/03/flush-04-released-gtk-based-bittorrent.html' title='Flush 0.4 released (GTK-based BitTorrent клиент)'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dWRCmLfFFN0/Sc8iRH_D3mI/AAAAAAAAANI/oosga_VCTJI/s72-c/flush_1.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>83</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-3949910047073870496</id><published>2009-03-17T18:55:00.000+03:00</published><updated>2009-03-17T18:50:04.572+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='c'/><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><title type='text'>Что почитать UNIX C/C++ программисту</title><content type='html'>Опыт программирования на C/C++ у меня относительно небольшой и, возможно, поэтому я еще помню, как в самом начале было тяжело определиться, с чего начинать свое изучение программирования под UNIX на C/C++. Поэтому попытаюсь слегка облегчить вам жизнь, приведя список книг (о которых удалось вспомнить), которые я прочитал, и какие впечатления у меня от них остались.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Хочу отметить, что книги - это не единственный источник информации. Если вы регулярно читаете различные статьи в Интернете, то у вас зачастую есть шанс найти в них что-то такое, о чем не напишут ни в одной книге и наоборот. Поэтому я бы советовал вам подписаться на RSS каких-нибудь новостных ресурсов, на которых время от времени пробегают интересные статьи. Например:&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/ru/views/rss/customrssatom.jsp?zone_by=Linux&amp;type_by=Articles&amp;type_by=Tutorials&amp;search_by=&amp;day=1&amp;month=01&amp;year=2004&amp;max_entries=20&amp;feed_by=rss&amp;isGUI=true&amp;Submit.x=43&amp;Submit.y=16"&gt;developerWorks Россия&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.linux.org.ru/rss.xml"&gt;Linux.org.ru&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.linux.org.ru/section-rss.jsp?section=2&amp;group=4066"&gt;Linux.org.ru: Development&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.opennet.ru/rss.shtml?last_docs"&gt;OpenNet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.opennet.ru/rss.shtml?all"&gt;OpenNet Articles&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.opennet.ru/rss.shtml?last_tips"&gt;OpenNet Tips&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.opennet.ru/opennews/opennews_mini.rss"&gt;OpenNet Mini News&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.opennet.ru/opennews/opennews_6.rss"&gt;OpenNet News&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rsdn.ru/Forum/RSS/cpp.aspx"&gt;Форум 'C/C++' на RSDN.RU&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://feeds.feedburner.com/rsdn/unix"&gt;Форум 'Unix' на RSDN.RU&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://habrahabr.ru/rss/"&gt;Хабрахабр&lt;/a&gt;&lt;/li&gt;&lt;/ul&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;&lt;span style="font-weight:bold;"&gt;Книги&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Б. Керниган, Д. Ритчи - Язык программирования Си.&lt;/span&gt;&lt;br /&gt;Эту книгу вам посоветуют на любом форуме, если вы спросите "Что почитать начинающему C программисту", и, пожалуй, будут правы. Для начинающего это, скорее всего, лучший вариант.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Х.М. Дейтел, П.Дж. Дейтел - Как программировать на C++.&lt;/span&gt;&lt;br /&gt;Так получилось, что "Язык программирования Си" - это, если не ошибаюсь, единственная книга по С (не C++), которую я прочитал. После нее я продолжил свое обучение с "Как программировать на C++", в которой узнал много нового о C, о чем не говорилось в "Языке программирования Си" и основные возможности C++. На мой взгляд, очень неплохая книга для начинающих. Авторы постепенно вводят читателя в мир C/C++, не забывая при этом останавливаться на вопросах совместимости, быстродействия и хорошего стиля программирования, что является несомненным плюсом данной книги.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Андрей Робачевский - Операционная система UNIX.&lt;/span&gt;&lt;br /&gt;Читал довольно давно, так что уже и не помню насколько это стоящая книга, но в целом впечатления от нее остались хорошие.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Эрик С. Реймонд - Искусство программирования для UNIX.&lt;/span&gt;&lt;br /&gt;Если не ошибаюсь, данная книга не содержит ни одной строчки кода, но это не делает ее менее интересной. Автор анализирует философию UNIX и основные принципы написания программ. Читается на одном дыхании. Очень советую.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;С. Макконнелл - Совершенный код.&lt;/span&gt;&lt;br /&gt;Совершенный код мне не понравился. Обычно, если я покупаю книгу, то читаю ее от корки до корки. Эта же книга, пожалуй, единственная, которую я не прочитал и до середины. Такое впечатление, что автор стремился сделать ее как можно толще и поэтому мусолит любую, даже самую очевидную проблему, которая может встретиться программисту - просто скучно читать. На мой взгляд, если вы прочитаете пару хороших книг по C/C++ и "Искусство программирования для UNIX", то не найдете в ней ничего нового.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Ричард Стивенс, Стивен Раго - UNIX. Профессиональное программирование.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Ричард Стивенс - UNIX. Разработка сетевых приложений.&lt;/span&gt;&lt;br /&gt;Отличные книги. Читать обязательно. После их прочтения действительно начинаешь понимать, как "оно" работает.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Бьерн Страуструп - Язык программирования C++.&lt;/span&gt;&lt;br /&gt;Обожаю книги, в которых авторы уделяют большое внимание деталям, а не останавливаются только на общем описании проблемы. "Язык программирования C++" - одна из немногих таких книг. Получил огромное удовольствие от прочтения данной книги. Всем советую. Однако, новичкам перед ее прочтением я бы порекомендовал сначала прочитать "Как программировать на C++".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Крис Касперски - Техника оптимизации программ. Эффективное использование памяти.&lt;/span&gt;&lt;br /&gt;К моему удивлению, я ни разу не слышал упоминания данной книги на форумах (может быть, не туда ходил) и считаю, что ее незаслуженно обошли стороной. Ее нам порекомендовал преподаватель в институте, за что ему огромное спасибо. Прочитав данную книгу, вы поймете, что, оказывается, для написания хороших программ одного только знания языка порой оказывается недостаточно - так же важно иметь хотя бы базовое представление о том, как устроен компьютер. Пусть вы, скорее всего, и не будете применять большинство методов, описанных в данной книге в силу их слишком агрессивной оптимизации под конкретную архитектуру, но, прочитав ее, вы впоследствии при разработке программ будете учитывать хотя бы базовые принципы, которые могут значительно повысить скорость работы программы, при этом не отняв у вас времени на оптимизацию (принцип использования "как можно более локальных" данных и т. п.). Да, и пусть слова "Эффективное использование памяти" вас не смущают - речь в данной книге пойдет отнюдь не о ее экономии, а именно о эффективном ее использовании. В качестве затравки могу порекомендовать статью "Разработка на PC и производительность — Memory Latency" (см. ссылку в разделе статьи).&lt;br /&gt;&lt;br /&gt;Конечно, это далеко не весь список книг, которые я прочитал. :) Но когда я начал вспоминать, какие из них посоветовать для изучения программирования на C/C++ по UNIX, то мне почему-то вспомнились именно они.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Статьи&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.lindevel.ru/zlp/"&gt;Программирование в Linux с нуля&lt;/a&gt;&lt;br /&gt;&lt;a href="http://symmetrica.net/unix-linux/"&gt;Программирование для Unix/Linux&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.unixwiz.net/techtips/gnu-c-attributes.html"&gt;Using GNU C __attribute__&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.unixwiz.net/techtips/reading-cdecl.html"&gt;Reading C type declarations&lt;/a&gt;&lt;br /&gt;&lt;a href="http://alenacpp.blogspot.com/2006/04/volatile.html"&gt;Ключевое слово volatile&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.rsdn.ru/article/funcprog/fp.xml"&gt;Функциональное программирование для всех&lt;/a&gt;&lt;br /&gt;&lt;a href="http://periscope.opennet.ru/opennews/art.shtml?num=14963"&gt;Основы написания переносимого кода (обязательно почитайте комментарии к статье)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.rsdn.ru/article/cpp/XXtraps64bit.xml"&gt;20 ловушек переноса Си++ - кода на 64-битную платформу&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/library/pa-dalign/"&gt;Data alignment: Straighten up and fly right&lt;/a&gt;&lt;br /&gt;&lt;a href="http://habrahabr.ru/blogs/development/43905/"&gt;Разработка на PC и производительность — Memory Latency&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Что дальше?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Если говорить о C++, то, судя по отзывам, дальше надо браться за Скотта Майерса, Герба Саттера и Андрея Александреску. Вообщем, думаю, скучать не придется. :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Пожелания&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Если вам есть что добавить в данный список (книг, статей, сайтов), или у вас есть какие-то советы с высоты вашего опыта - буду вам очень рад в комментариях.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-3949910047073870496?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/3949910047073870496/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=3949910047073870496' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/3949910047073870496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/3949910047073870496'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2009/03/unix-cc.html' title='Что почитать UNIX C/C++ программисту'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-1407014594452098803</id><published>2009-01-18T18:53:00.002+03:00</published><updated>2009-01-18T19:00:52.342+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='theme'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='qt'/><title type='text'>QGtkStyle - заставляем Qt4 приложения использовать оформление GTK</title><content type='html'>Оказывается, можно заставить Qt (&gt;= 4.4) приложения выглядеть так же, как и GTK, причем сделать для этого нужно совсем немного:&lt;pre class="my_code_box"&gt;svn co svn://labs.trolltech.com/svn/styles/gtkstyle&lt;br /&gt;cd gtkstyle/&lt;br /&gt;qmake-qt4 &amp;&amp; make&lt;br /&gt;sudo make install&lt;/pre&gt;Далее запускаем, к примеру, systemsettings и выбираем в Appearance-&gt;Style стиль GTK.&lt;br /&gt;&lt;br /&gt;В результате Qt4 приложения примут примерно следующий вид:&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dWRCmLfFFN0/SXNNR4Q9qkI/AAAAAAAAAMM/9qYRu7RWBjI/s1600-h/qgtkstyle_ktorrent.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 289px;" src="http://2.bp.blogspot.com/_dWRCmLfFFN0/SXNNR4Q9qkI/AAAAAAAAAMM/9qYRu7RWBjI/s320/qgtkstyle_ktorrent.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5292658956647115330" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dWRCmLfFFN0/SXNNJgQt7YI/AAAAAAAAAME/wuGqceUO_pA/s1600-h/qgtkstyle_konqueror.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 314px;" src="http://1.bp.blogspot.com/_dWRCmLfFFN0/SXNNJgQt7YI/AAAAAAAAAME/wuGqceUO_pA/s320/qgtkstyle_konqueror.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5292658812764679554" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-1407014594452098803?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/1407014594452098803/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=1407014594452098803' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/1407014594452098803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/1407014594452098803'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2009/01/qgtkstyle-qt4-gtk.html' title='QGtkStyle - заставляем Qt4 приложения использовать оформление GTK'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dWRCmLfFFN0/SXNNR4Q9qkI/AAAAAAAAAMM/9qYRu7RWBjI/s72-c/qgtkstyle_ktorrent.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-2507318073843804931</id><published>2009-01-03T14:52:00.000+03:00</published><updated>2009-01-03T14:53:11.118+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='bittorrent'/><category scheme='http://www.blogger.com/atom/ns#' term='flush'/><category scheme='http://www.blogger.com/atom/ns#' term='gtkmm'/><title type='text'>Flush - еще один GTK-based BitTorrent клиент</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Вступление&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Единственный BitTorrent клиент под Linux, который пришелся мне по душе - это KTorrent. Не скажу, что он меня полностью устраивал, но при его использовании я не испытывал особых неудобств.&lt;br /&gt;&lt;br /&gt;Хотя некоторого функционала мне в нем все же не хватало. Что-то я реализовал скриптами, что-то продолжал делать руками... Вообщем нужного мне уровня автоматизма, которого я пытаюсь добиться со всеми приложениями, которые использую более или менее регулярно, и которые время от времени требуют выполнения каких-либо рутинных операций, мне достичь не удалось.&lt;br /&gt;&lt;br /&gt;На самом деле мне не так уж и много надо. Мне не нужен огромный комбайн, который умеет, например, читать RSS, поддерживать надстройки в виде плагинов и т. п.&lt;br /&gt;&lt;br /&gt;Попробую объяснить, что мне нужно от BitTorrent клиента, и зачем мне это нужно...&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Вот, к примеру, на некоторых трекерах стоит ограничение на максимальное количество торрентов, которые вы раздаете. При превышении лимита вам грозят баном или прочими видами ограничений. Даже если банить вас никто не собирается, то все равно правила нарушать не стоит хотя бы из соображений взаимного уважения, но вручную отслеживать количество раздаваемых торрентов - довольно утомительное занятие. Почему бы не возложить эту работу на BitTorrent клиент?&lt;br /&gt;&lt;br /&gt;Далее. Если уж говорить обо мне, то у меня все устроено следующим образом: есть старый диск на 160 Гб, на котором у меня хранятся зеркала репозиториев и скачанные торренты, т. е. наиболее часто изменяемые данные. Не смотря на то, что скачивание торрентов из локальной сети требует очень активной работы с диском, система не тормозит, т. к. находится на другом диске + если из-за сильного износа скачиванием и раздачей торрентов диск выйдет из строя, то никакие ценные данные не потеряются - только торренты и зеркала репозиториев, которые всегда можно скачать заново.&lt;br /&gt;&lt;br /&gt;Так вот. Опять-таки правило хорошего тона при использовании peer-to-peer сетей гласит: скачал файл - не уходи с раздачи, дай скачать другим. Тут я предпочитаю следующую схему: при открытии BitTorrent клиентом *.torrent файла, файлы торрента скачиваются на тот самый старый диск. По завершении скачивания всех файлов они копируются в специальную директорию типа "Посмотреть в свободное время", в которой они будут лежать бесконечно долгое время, пока я их не посмотрю и не удалю. Раздача же торрента продолжается с моего старого диска, работа с которым, напомню еще раз, практически не замедляет работу системы. Как только время раздачи торрента превысит, к примеру, неделю, его раздача прекращается и он удаляется с диска.&lt;br /&gt;&lt;br /&gt;Торренты я скачиваю не только из интернета, но и из локальной сети. В связи с очень большой разницей в скоростях мне нужна возможность запускать несколько копий одного и того же клиента (для интернета и для локальной сети), но с разными конфигами. KTorrent не позволяет это сделать. При работе с ним мне приходилось запускать вторую копию из под другого пользователя.&lt;br /&gt;&lt;br /&gt;Ну и, конечно же, необходима возможность контролировать максимальную скорость скачивания/отдачи в зависимости от времени суток, т. к., к примеру, у моего провайдера ночью скорость скачивания и отдачи увеличивается в 2 раза. Самый удобный, на мой взгляд, способ такого контроля - запуск при помощи cron'а какой-нибудь программы, которая будет передавать указанные опции командной строки уже запущенной копии.&lt;br /&gt;&lt;br /&gt;Кроме этого, хотелось бы, чтобы клиент был написан на GTK, т. к. KTorrent - это единственное Qt приложение, которое я использую в повседневной работе - зачем же в таком случае постоянно держать в памяти различные Qt/KDE библиотеки?&lt;br /&gt;&lt;br /&gt;На работе, в силу ее специфики, я программирую только на C, поэтому получать опыт программирования на других языках и изучать далекие от специфики работы технологии с целью повышения квалификации приходится дома. :) В итоге, как и в случае с &lt;a href="http://konishchevdmitry.blogspot.com/2008/08/pyvsb.html"&gt;PyVSB&lt;/a&gt;, неудовлетворенность имеющимися средствами и желание попрограммировать на C++ параллельно с чтением "Язык программирования C++" Б. Страуструпа сподвигли меня на написание собственного торрент клиента.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Знакомьтесь, Flush&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Основные возможности:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Контролирование уже запущенной копии через интерфейс командной строки, а именно:&lt;ul&gt;&lt;li&gt;Запуск/остановка торрентов.&lt;/li&gt;&lt;li&gt;Изменение максимальной скорости скачивания/раздачи.&lt;/li&gt;&lt;li&gt;Изменение максимального количества соединений.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Запуск нескольких копий с различными конфигурационными файлами.&lt;/li&gt;&lt;li&gt;Автоматическое копирование скачанных торрентов в указанную директорию.&lt;/li&gt;&lt;li&gt;Автоматическое удаление старых торрентов.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Flush использует библиотеку libtorrent от &lt;a href="http://www.rasterbar.com/"&gt;Rasterbar Software&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Скриншоты:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dWRCmLfFFN0/SVzdjqrIWXI/AAAAAAAAAK8/gW_flAYHbQ0/s1600-h/flush_2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://1.bp.blogspot.com/_dWRCmLfFFN0/SVzdjqrIWXI/AAAAAAAAAK8/gW_flAYHbQ0/s320/flush_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5286343667446471026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dWRCmLfFFN0/SVzdauqUjOI/AAAAAAAAAK0/E3tWUjE1eEQ/s1600-h/flush_1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://1.bp.blogspot.com/_dWRCmLfFFN0/SVzdauqUjOI/AAAAAAAAAK0/E3tWUjE1eEQ/s320/flush_1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5286343513897995490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dWRCmLfFFN0/SVzdwTNXo_I/AAAAAAAAALM/XBN0D2Zu8QE/s1600-h/flush_settings_1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 275px;" src="http://3.bp.blogspot.com/_dWRCmLfFFN0/SVzdwTNXo_I/AAAAAAAAALM/XBN0D2Zu8QE/s320/flush_settings_1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5286343884485927922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dWRCmLfFFN0/SVzdrlbOL5I/AAAAAAAAALE/R7nClAwNXBg/s1600-h/flush_settings_2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 275px;" src="http://3.bp.blogspot.com/_dWRCmLfFFN0/SVzdrlbOL5I/AAAAAAAAALE/R7nClAwNXBg/s320/flush_settings_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5286343803476520850" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Отговорки, отказ от ответственности и прочее&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Как уже было сказано выше, Flush писался исключительно для того, чтобы "написать что-нибудь на C++", поэтому возгласы типа "зачем еще один велосипед?" не имеют смысла.&lt;br /&gt;&lt;br /&gt;Версия первая, а значит, возможно, не совсем стабильная. Но, т. к. я им пользуюсь уже достаточно длительное время, то можно считать, что предварительное тестирование он уже прошел. Да, некоторых возможностей, которые могут иногда пригодиться, в нем нет, есть небольшие недостатки, которые мне известны, но до их исправления руки пока не дошли - в конце концов на то версия и 0.1, чтобы быть далеко не идеальной. Просто захотелось выложить по-раньше на всеобщее обозрение, т. к. в таком случае, возможно, мне посчастливится услышать осмысленную критику. Возможно, кто-то даже не поленится залезть в код и дать советы, как лучше реализовать ту или иную функцию. К примеру, текущая реализация работы с DBus меня не устраивает - если вдруг кто-то решит запустить новую сессию DBus, то станет возможным запуск нескольких копий с одним конфигом, и сломается передача параметров уже запущенной копии. Как это сделать более правильно - пока не знаю, особо над этим еще не задумывался, т. к. считаю, что для первой версии это вполне рабочая схема. Единственное что удручает - так это практически полное отсутствие документации по DBus, а изучать его по комментариям в исходных текстах, честно говоря, просто жалко время.&lt;br /&gt;&lt;br /&gt;libtorrent-rasterbar-0.14 я пока не поддерживаю - в ней довольно сильно изменился API по сравнению с 0.13, и внести изменения в код я пока не успел.&lt;br /&gt;&lt;br /&gt;Да, и самое главное: никакой гарантии, что Flush будет активно поддерживаться и развиваться я не даю. :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Где скачать?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Естественно, эту статью я написал не просто так. Если мне потребовался такой BitTorrent клиент, то наверняка он также придется по душе и кому-то другому, чему я буду очень рад. Несмотря на существующие недостатки и недоработки, я Flush'ем вполне доволен и KTorrent'ом больше не пользуюсь.&lt;br /&gt;&lt;br /&gt;Исходники и deb пакеты для Ubuntu-8.10-i386 и Ubuntu-8.10-x86-64 можно скачать здесь:&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/flush/"&gt;http://sourceforge.net/projects/flush/&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-2507318073843804931?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/2507318073843804931/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=2507318073843804931' title='Комментарии: 72'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/2507318073843804931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/2507318073843804931'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2009/01/flush-gtk-based-bittorrent.html' title='Flush - еще один GTK-based BitTorrent клиент'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dWRCmLfFFN0/SVzdjqrIWXI/AAAAAAAAAK8/gW_flAYHbQ0/s72-c/flush_2.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>72</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-6129675572167520733</id><published>2007-09-22T18:06:00.002+04:00</published><updated>2008-12-07T21:34:20.029+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='блог'/><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><title type='text'>Несколько примочек для Blogger</title><content type='html'>&lt;span style="font-weight:bold;"&gt;1. Вставка кода&lt;/span&gt;&lt;br /&gt;Наверное, все современные форумы поддерживают тег &lt;span style="font-family: courier new;"&gt;[code][/code]&lt;/span&gt;, позволяющий размещать в своих сообщениях блоки кода. В Blogger такой возможности нет. Я реализовал ее следующим образом:&lt;br /&gt;В шаблоне, где описываются все стили (между тегами &lt;span style="font-family: courier new;"&gt;&amp;#60b:skin&amp;#62&amp;#60![CDATA[&lt;/span&gt; и &lt;span style="font-family: courier new;"&gt;]]&amp;#62&amp;#60/b:skin&amp;#62&lt;/span&gt;) вставляем&lt;pre class="my_code_box"&gt;pre.my_code_box {&lt;br /&gt; border: 1px solid #aaaaaa;&lt;br /&gt; overflow: auto;&lt;br /&gt; padding: 10px;&lt;br /&gt; font-family: courier new;&lt;br /&gt;}&lt;/pre&gt;Теперь, чтобы выделить какой-нибудь текст как код, окружите его тегами &lt;span style="font-family: courier new;"&gt;&amp;#60pre class=&amp;#34my_code_box&amp;#34&amp;#62&amp;#60/pre&amp;#62&lt;/span&gt; (естественно, в режиме &amp;#34Изменить Html&amp;#34).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Update 07.12.2008:&lt;br /&gt;Относительно вопроса подсветки синтаксиса: могу порекомендовать статью &lt;a href="http://beggytech.blogspot.com/2008/12/highlighting-thoughts.html"&gt;Highlighting thoughts&lt;/a&gt;, в которой автор рассмотрел различные подходы к решению данной проблемы.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Читать полностью...&lt;/span&gt;&lt;br /&gt;Если хотите использовать &amp;#34свертывание&amp;#34 статьи в ссылку &amp;#34Читать полностью...&amp;#34, пропишите за тегом &lt;span style="font-family: courier new;"&gt;]]&amp;#62&amp;#60/b:skin&amp;#62&lt;/span&gt;, но в пределах &lt;span style="font-family: courier new;"&gt;&amp;#60head&amp;#62&lt;/span&gt; строки&lt;pre class="my_code_box"&gt;&amp;#60b:if cond='data:blog.pageType == &amp;#34item&amp;#34'&amp;#62&lt;br /&gt; &amp;#60style&amp;#62span.fullpost {display:inline;}&amp;#60/style&amp;#62&lt;br /&gt;&amp;#60b:else/&amp;#62&lt;br /&gt; &amp;#60style&amp;#62span.fullpost {display:none;}&amp;#60/style&amp;#62&lt;br /&gt;&amp;#60/b:if&amp;#62&lt;/pre&gt;Теперь перейдите в &amp;#34расширенный&amp;#34 режим редактирования шаблона и найдите в нем тег &lt;span style="font-family: courier new;"&gt;&amp;#60data:post.body/&amp;#62&lt;/span&gt;. Сразу после него ставим&lt;pre class="my_code_box"&gt;&amp;#60b:if cond='data:blog.pageType != &amp;#34item&amp;#34'&amp;#62&lt;br /&gt; &amp;#60br/&amp;#62&amp;#60a expr:href='data:post.url'&amp;#62Читать полностью...&amp;#60/a&amp;#62&lt;br /&gt;&amp;#60/b:if&amp;#62&lt;/pre&gt;Свертываемую часть сообщения надо заключить в тэг &lt;span style="font-family: courier new;"&gt;&amp;#60span class=fullpost&amp;#62&amp;#60/span&amp;#62&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Облако тегов&lt;/span&gt;&lt;br /&gt;То, как его сделать, описано &lt;a href="http://phy3blog.googlepages.com/Beta-Blogger-Label-Cloud.html"&gt;тут&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Вставка в текст сообщения специальных символов&lt;/span&gt;&lt;br /&gt;Если в тексте вашего сообщения содержатся специальные символы (к примеру, при вставке кода), то для того, чтобы они отображались так, как вы хотите, их нужно экранировать. Для этого замените следующие символы указанными последовательностями:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;#38 - &amp;#38#38;&lt;br /&gt;&amp;#60 - &amp;#38#60;&lt;br /&gt;&amp;#62 - &amp;#38#62;&lt;br /&gt;&amp;#34 - &amp;#38#34;&lt;/span&gt;&lt;br /&gt;Вставлять их нужно в режиме &amp;#34Изменить Html&amp;#34 и после этого не переключать режимы, иначе Blogger &amp;#34забудет&amp;#34 о том, что вы их экранировали.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-6129675572167520733?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/6129675572167520733/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=6129675572167520733' title='Комментарии: 16'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/6129675572167520733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/6129675572167520733'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2007/09/blogger.html' title='Несколько примочек для Blogger'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-4004682975588758778</id><published>2008-11-08T14:58:00.003+03:00</published><updated>2008-11-08T15:34:16.766+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='GtkCellRendererToggle'/><category scheme='http://www.blogger.com/atom/ns#' term='gtkmm'/><title type='text'>"Правильная" обработка сигнала на активацию для GtkCellRendererToggle</title><content type='html'>Продолжаем бороться с GTK. На этот раз возникла необходимость отобразить дерево каталогов с возможностью выбора файлов/каталогов для скачивания примерно в таком виде:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dWRCmLfFFN0/SRWAnyqKftI/AAAAAAAAAKs/8vbMXn4q6lM/s1600-h/gtkcellrenderertoggle.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 257px; height: 320px;" src="http://1.bp.blogspot.com/_dWRCmLfFFN0/SRWAnyqKftI/AAAAAAAAAKs/8vbMXn4q6lM/s320/gtkcellrenderertoggle.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5266256760381538002" /&gt;&lt;/a&gt;&lt;br /&gt;На первый взгляд никаких проблем быть не должно: создаем GtkTreeViewColumn, в которую упаковываем GtkCellRendererToggle и GtkCellRendererText. Создали, упаковали - выглядит так, как и хотелось, но вот работает не так как надо. А именно, флажки переключаются даже тогда, когда пользователь щелкает по GtkCellRendererText с именем файла/директории. Подобное поведение может очень сильно раздражать, когда, например, пользователь ввиду слишком длинного списка с большим уровнем вложенности захочет просто кликнуть по имени файла, чтобы выделить всю строку и тем самым подсветить остальные колонки GtkTreeView, которых может быть довольно большое количество (размер, время модификации, тип файла и т. п.).&lt;br /&gt;&lt;br /&gt;Как и в &lt;a href="http://konishchevdmitry.blogspot.com/2008/09/gtktreeviewcolumn.html"&gt;прошлый раз&lt;/a&gt;, для решения проблемы придется модифицировать внутренние структуры GTK, т. к. штатными средствами данную проблему похоже решить не удасться. Все, что нам нужно - это определить собственный обработчик сигнала для GtkCellRendererToggle. Пример того, как это можно сделать, представлен ниже. Все, что необходимо программисту - это вызвать функцию activate_cell_renderer_toggle_tree_mode(). После ее вызова все GtkCellRendererToggle'ы будут работать так, как требуется. Способ работает как с GTK, так и с Gtkmm.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#a020f0"&gt;#include &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;lt;gtk/gtkcellrenderertoggle.h&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;/// Модифицированный обработчик сигнала на активацию GtkCellRendererToggle.&lt;/font&gt;&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;gint&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;gtk_cell_renderer_toggle_activate(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;GtkCellRenderer&lt;/b&gt;&lt;/font&gt;* cell,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;GdkEvent&lt;/b&gt;&lt;/font&gt;* event,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;GtkWidget&lt;/b&gt;&lt;/font&gt;* widget,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;gchar&lt;/b&gt;&lt;/font&gt;* path,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;GdkRectangle&lt;/b&gt;&lt;/font&gt;* background_area,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;GdkRectangle&lt;/b&gt;&lt;/font&gt;* cell_area,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;GtkCellRendererState&lt;/b&gt;&lt;/font&gt;&amp;nbsp;flags)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GtkCellRendererToggle* celltoggle = GTK_CELL_RENDERER_TOGGLE(cell);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;(celltoggle-&amp;gt;activatable)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!event ||&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;event-&amp;gt;type != GDK_BUTTON_PRESS ||&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;event-&amp;gt;button.x &amp;gt;= cell_area-&amp;gt;x &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;event-&amp;gt;button.x &amp;lt; cell_area-&amp;gt;x + cell_area-&amp;gt;width &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;event-&amp;gt;button.y &amp;gt;= cell_area-&amp;gt;y &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;event-&amp;gt;button.y &amp;lt; cell_area-&amp;gt;y + cell_area-&amp;gt;height&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g_signal_emit_by_name(cell, &lt;font color="#ff00ff"&gt;&amp;quot;toggled&amp;quot;&lt;/font&gt;, path);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;TRUE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;FALSE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;/// Активизирует &amp;quot;режим дерева&amp;quot; для GtkCellRendererToggle.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;/// Модифицирует внутренние структуры GTK так, чтобы при упаковке&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;/// GtkCellRendererToggle в одну колонку с другими GtkCellRenderer'ами&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;/// GtkCellRendererToggle активизировался только в том случае, если&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;/// пользователь кликнул мышкой именно по нему, а не по любому&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;/// GtkCellRenderer'у данной колонки.&lt;/font&gt;&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;activate_cell_renderer_toggle_tree_mode(&lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt;)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;GtkCellRendererClass&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*cell_class;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GtkCellRendererToggle *toggle_renderer;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toggle_renderer = GTK_CELL_RENDERER_TOGGLE(gtk_cell_renderer_toggle_new());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cell_class = GTK_CELL_RENDERER_CLASS(GTK_WIDGET_GET_CLASS(toggle_renderer));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cell_class-&amp;gt;activate = gtk_cell_renderer_toggle_activate;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gtk_object_destroy(GTK_OBJECT(toggle_renderer));&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-4004682975588758778?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/4004682975588758778/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=4004682975588758778' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/4004682975588758778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/4004682975588758778'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2008/11/gtkcellrenderertoggle.html' title='&quot;Правильная&quot; обработка сигнала на активацию для GtkCellRendererToggle'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dWRCmLfFFN0/SRWAnyqKftI/AAAAAAAAAKs/8vbMXn4q6lM/s72-c/gtkcellrenderertoggle.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-2529889958723895032</id><published>2007-10-20T10:53:00.001+04:00</published><updated>2008-11-01T21:04:15.666+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='тема'/><category scheme='http://www.blogger.com/atom/ns#' term='theme'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='консольные приложения'/><category scheme='http://www.blogger.com/atom/ns#' term='аудио плеер'/><category scheme='http://www.blogger.com/atom/ns#' term='moc'/><title type='text'>MOC - console audio player</title><content type='html'>Ищете себе хороший аудио плеер, который показывал бы русские теги и не был бы тяжеловесным монстром вроде Amarok?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dWRCmLfFFN0/RxjygdU64-I/AAAAAAAAADA/VAQFK_NIrZg/s1600-h/moc.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dWRCmLfFFN0/RxjygdU64-I/AAAAAAAAADA/VAQFK_NIrZg/s320/moc.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5123111215576048610" /&gt;&lt;/a&gt;&lt;br /&gt;Хочу предложить вам MOC. Интерфейс у него консольный, и это скорее плюс, чем минус. Ресурсов потребляет мало, управлять воспроизведением можно с любого терминала, а не только с того, с которого он был запущен, а, следовательно, открывается возможность удаленного управления. Вот где вся сила консольных приложений! =)&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Я пользуюсь им уже около полугода - пока что не нашел для себя в нем ни одного недостатка. Устраивает полностью, просто мечта.&lt;br /&gt;&lt;br /&gt;Кроме всех прочих форматов, поддерживает OGG Vorbis, FLAC, WAV, WMA и MP3. Кроме того, поддерживаются списки воспроизведения и URL, вывод в JACK, OSS и ALSA.&lt;br /&gt;&lt;br /&gt;На скриншоте MOC собственной персоной с натянутой на него шкуркой, написанной мной. Люблю я такие светлые, не кричащие яркими цветами темы...&lt;br /&gt;&lt;br /&gt;Вообщем советую. Попробуйте - надеюсь, не пожалеете.&lt;br /&gt;&lt;br /&gt;А вот и моя тема, если вдруг она вам показалась симпотичной. :)&lt;pre class="my_code_box"&gt;# MOC light theme by Konishchev Dmitry&lt;br /&gt;# http://konishchevdmitry.blogspot.com/&lt;br /&gt;&lt;br /&gt;background           = default      default&lt;br /&gt;frame                = black        default     bold&lt;br /&gt;window_title         = black        default&lt;br /&gt;directory            = black        default     bold&lt;br /&gt;selected_directory   = black        white       bold&lt;br /&gt;playlist             = black        default&lt;br /&gt;selected_playlist    = black        white&lt;br /&gt;file                 = white        default&lt;br /&gt;selected_file        = black        white&lt;br /&gt;marked_file          = black        default     bold&lt;br /&gt;marked_selected_file = black        white       bold&lt;br /&gt;info                 = white        default&lt;br /&gt;selected_info        = black        white&lt;br /&gt;marked_info          = black        default     bold&lt;br /&gt;marked_selected_info = black        white       bold&lt;br /&gt;status               = black        default&lt;br /&gt;title                = black        default&lt;br /&gt;state                = black        default&lt;br /&gt;current_time         = black        default&lt;br /&gt;time_left            = black        default&lt;br /&gt;total_time           = black        default&lt;br /&gt;time_total_frames    = black        default&lt;br /&gt;sound_parameters     = black        default&lt;br /&gt;legend               = black        default&lt;br /&gt;disabled             = white        default&lt;br /&gt;enabled              = black        default&lt;br /&gt;empty_mixer_bar      = black        default&lt;br /&gt;filled_mixer_bar     = black        white&lt;br /&gt;empty_time_bar       = black        default&lt;br /&gt;filled_time_bar      = black        white&lt;br /&gt;entry                = black        default&lt;br /&gt;entry_title          = black        default&lt;br /&gt;error                = white        red         bold&lt;br /&gt;message              = black        default&lt;br /&gt;plist_time           = black        default&lt;/pre&gt;Примечание: тема будет выглядеть также, как на скриншоте только в том случае, если на вашем терминале установлена цветовая схема, в которой шрифт черный, а фон белый. В противном случае для того, чтобы получить такой же внешний вид, необходимо подбирать другие цвета.&lt;br /&gt;&lt;br /&gt;PS: чтобы плеер нормально отображал mp3 теги с кодировкой cp1251, не забудьте включить соответствующую опцию в конфиге.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-2529889958723895032?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/2529889958723895032/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=2529889958723895032' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/2529889958723895032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/2529889958723895032'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2007/10/moc-console-audio-player.html' title='MOC - console audio player'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dWRCmLfFFN0/RxjygdU64-I/AAAAAAAAADA/VAQFK_NIrZg/s72-c/moc.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-5973835110619743051</id><published>2008-06-13T15:47:00.031+04:00</published><updated>2008-10-19T09:38:15.978+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='тема'/><category scheme='http://www.blogger.com/atom/ns#' term='theme'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='eee pc'/><title type='text'>Установка и настройка Ubuntu 8.04 на ASUS Eee PC</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dWRCmLfFFN0/SFLCocNk_EI/AAAAAAAAAHs/T-170w4uq00/s1600-h/ubuntu_on_eee_pc.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dWRCmLfFFN0/SFLCocNk_EI/AAAAAAAAAHs/T-170w4uq00/s320/ubuntu_on_eee_pc.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5211441718844783682" /&gt;&lt;/a&gt;&lt;br /&gt;Когда я покупал себе ASUS Eee PC, я совершенно не думал о том, какую операционную систему установлю на нем - однозначно это будет Ubuntu Linux. Во-первых, потому, что Ubuntu у меня стоит и дома и на работе, во-вторых, потому, что и дома и на работе у меня есть &lt;a href="http://konishchevdmitry.blogspot.com/2007/10/local-repository-creating.html"&gt;локальное зеркало репозитория Ubuntu&lt;/a&gt;, а в-третьих просто потому, что данный дистрибутив меня всем устраивает.&lt;br /&gt;&lt;br /&gt;После покупки я сразу же полез в Интернет в поисках различных HowTo по установке Ubuntu 8.04 на Eee PC. Результат меня несколько удивил. Несмотря на огромный ажиотаж вокруг Eee PC, этих самых HowTo в сети не так уж и много + большинство из них нацелены на Ubuntu 7.10 и предлагают запустить некий скрипт, который заменит системные конфигурационные файлы своими, заточенными под Eee PC.&lt;br /&gt;&lt;br /&gt;На эти скрипты я даже и смотреть не стал, т. к. они предназначены для Ubuntu 7.10, и их запуск на Ubuntu 8.04 может привести к нехорошим последствиям. Поэтому во время поиска необходимой информации в сети я обращал внимание только на те статьи, в которых описывается, как можно настроить Ubuntu под Eee PC "своими руками". Найти такой HowTo, в котором содержались бы ответы на все встающие передо мной вопросы, мне не удалось, поэтому я решил систематизировать собранную мной информацию и слить ее в одну статью. Сейчас моя система уже настроена, поэтому я постараюсь вспомнить все действия, которые я производил над ней, дабы все заработало так, как мне хочется. Надеюсь, я ничего не упущу. :)&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Установка&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Для установки нам понадобится загрузочный диск с Ubuntu 8.04 и флэшка на 1 Гб или более.&lt;br /&gt;Перед использованием флэшки не забудьте скопировать с нее все важные данные.&lt;br /&gt;&lt;pre class="my_code_box"&gt;# Делаем образ диска&lt;br /&gt;dd if=/dev/cdrom of=ubuntu.iso&lt;br /&gt;&lt;br /&gt;# Устанавливаем пакет syslinux&lt;br /&gt;sudo apt-get install syslinux&lt;br /&gt;&lt;br /&gt;# Скачиваем скрипт, который запишет ISO-образ на флэшку&lt;br /&gt;wget http://kiwilinux.org/public/isotostick.sh&lt;br /&gt;&lt;br /&gt;# Делаем этот скрипт исполняемым&lt;br /&gt;sudo chmod a+x isotostick.sh&lt;br /&gt;&lt;br /&gt;# Далее предполагается, что /dev/sdX1 - файл устройства вашей флешки.&lt;br /&gt;&lt;br /&gt;# Форматируем флэшку&lt;br /&gt;sudo mkfs.vfat -F 32 -n ubuntu /dev/sdX1&lt;br /&gt;&lt;br /&gt;# Делаем раздел загрузочным&lt;br /&gt;sudo parted /dev/sdX set 1 boot on&lt;br /&gt;&lt;br /&gt;# Запускаем скачанный скрипт&lt;br /&gt;sudo ./isotostick.sh cd.iso /dev/sdX1&lt;br /&gt;&lt;br /&gt;# Делаем флэшку загрузочной&lt;br /&gt;sudo syslinux /dev/sdX1&lt;/pre&gt;&lt;br /&gt;Все, теперь можно грузиться с этой флэшки как с диска и устанавливать Ubuntu на Eee PC. Для этого во время загрузки Eee PC нажмите F2, чтобы зайти в BIOS и там на вкладке Boot сделайте соответствующие настройки, чтобы загрузка происходила с флэш карты.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Загрузка&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Чтобы увеличить скорость загрузки операционной системы, в /boot/grub/menu.lst замените строку&lt;pre class="my_code_box"&gt;# defoptions=quiet splash&lt;/pre&gt;на&lt;pre class="my_code_box"&gt;# defoptions=quiet splash clocksource=hpet&lt;/pre&gt;и запустите&lt;pre class="my_code_box"&gt;sudo update-grub&lt;/pre&gt;Теперь время загрузки операционной системы должно сократиться примерно на 40 секунд.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Выключение&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;После установки первое, что бросается в глаза - это то, что Ubuntu не хочет выключаться. :) По команде halt запускается процесс остановки системы, останавливаются работающие службы, экран гаснет, но компьютер не выключается.&lt;br /&gt;&lt;br /&gt;Чтобы исправить это, открываем /etc/init.d/halt и добавляем строку "modprobe -r snd-hda-intel" в тело функции do_stop, как показано ниже:&lt;pre class="my_code_box"&gt;....&lt;br /&gt;do_stop () {&lt;br /&gt; modprobe -r snd-hda-intel&lt;br /&gt;&lt;br /&gt; if [ "$INIT_HALT" = "" ] &lt;br /&gt;....&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Звук&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Добавьте в файл /etc/modprobe.d/snd-hda-intel (если файл не существует, то создайте его) строку&lt;pre class="my_code_box"&gt;options snd-hda-intel model=3stack-dig&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Поддержка горячих клавиш Fn+F[1-9]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Устанавливаем исходные файлы и компилируем из них модуль:&lt;pre class="my_code_box"&gt;sudo apt-get install module-assistant eeepc-acpi-source&lt;br /&gt;sudo m-a a-i eeepc-acpi&lt;br /&gt;sudo sh -c 'echo eeepc-acpi &gt;&gt; /etc/modules'&lt;/pre&gt;&lt;br /&gt;Если в будущем вы обновите ядро, то вам придется выполнить команду&lt;pre class="my_code_box"&gt;sudo m-a a-i eeepc-acpi&lt;/pre&gt;которая соберет модуль заново для нового ядра.&lt;br /&gt;&lt;br /&gt;У меня заработали не все клавиши. Кнопка засыпания и кнопки увеличения/уменьшения яркости дисплея работают отлично. Про настройку кнопки включения/выключения Wi-Fi я расскажу ниже. Кнопки выключения/уменьшения/увеличения громкости звука не заработали, когда я пытался настроить их по тем HowTo, которые мне попались. Копать глубже в этом направлении я не стал, т. к. лично мне на Eee PC звук не нужен (я его вообще выключил в BIOS'е). Поэтому решение данной проблемы я оставляю вам. :) Если кто напишет в комментариях, как их настроить - буду благодарен, может быть, потом пригодится.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Динамическое изменение частоты процессора&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Сразу скажу, что, читая обсуждения на форумах по поводу уменьшения частоты процессора в целях экономии энергии, я часто встречал мнения людей, утверждающих, что сэкономить много времени автономной работы не удастся - максимум 10-15 минут. Сам я никаких тестов не делал, но уменьшение частоты у себя все-таки настроил - может быть хотя бы по-меньше греться будет, да и эти 15 минут тоже не лишние... &lt;br /&gt;&lt;br /&gt;Также стоит отметить, что хотя производитель и заявляет, что частота процессора составляет 900 Мгц, на самом деле он работает на частоте 630 Мгц. Судя по отзывам, даже если вы поднимите частоту до 900 Мгц, то прироста производительности вы не получите - для этого необходимо разгонять шину, чем я не стал заниматься - для меня время автономной работы имеет гораздо большее значение.&lt;br /&gt;&lt;br /&gt;Итак...&lt;br /&gt;&lt;br /&gt;Устанавливаем необходимый нам пакет, позволяющий менять частоту процессора на лету:&lt;pre class="my_code_box"&gt;sudo apt-get install cpufrequtils&lt;/pre&gt;и добавляем в /etc/rc.local следующие строки:&lt;pre class="my_code_box"&gt;# Включаем динамическое изменение частоты процессора&lt;br /&gt;modprobe p4-clockmod&lt;br /&gt;modprobe cpufreq-ondemand&lt;br /&gt;# Включаем плавное изменение частоты процессора в зависимости&lt;br /&gt;# от нагрузки в диапазоне от 112 Мгц до 675 Мгц. Новое значение&lt;br /&gt;# частоты будет вычисляться каждые 500 мсек.&lt;br /&gt;echo 112500 &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq&lt;br /&gt;echo 675000 &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq&lt;br /&gt;powernowd -m 1 -p 500&lt;/pre&gt;Если в процессе работы скорость реакции приложений вас не будет устраивать, то можно повысить минимальную частоту процессора (список доступных частот можно посмотреть в /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies) или уменьшить значение опции -p утилиты powernowd.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Wi-Fi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Компилируем и устанавливаем необходимый модуль:&lt;pre class="my_code_box"&gt;sudo apt-get install build-essential&lt;br /&gt;wget 'http://snapshots.madwifi.org/special/madwifi-nr-r3366+ar5007.tar.gz'&lt;br /&gt;tar zxvf madwifi-nr-r3366+ar5007.tar.gz&lt;br /&gt;cd madwifi-nr-r3366+ar5007&lt;br /&gt;make clean&lt;br /&gt;make&lt;br /&gt;sudo make install&lt;br /&gt;sudo reboot&lt;/pre&gt;Если в будущем вы будете обновлять ядро, то необходимо будет заново скомпилировать и установить модуль.&lt;br /&gt;&lt;br /&gt;Создаем файл /etc/acpi/actions/wireless-toggle.sh со следующими строками:&lt;pre class="my_code_box"&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;# main wifi toggle script (loads/unloads modules)&lt;br /&gt;&lt;br /&gt;. /usr/share/acpi-support/key-constants&lt;br /&gt;&lt;br /&gt;# The sequence here *may* be important.&lt;br /&gt;# (It seems to fail intermittently if you deviate.)&lt;br /&gt;unload_modules() {&lt;br /&gt;   rmmod wlan_scan_sta&lt;br /&gt;   rmmod wlan_tkip&lt;br /&gt;   rmmod wlan_wep&lt;br /&gt;   rmmod wlan_ccmp&lt;br /&gt;   rmmod wlan_acl&lt;br /&gt;   rmmod ath_pci&lt;br /&gt;   sleep 1&lt;br /&gt;   rmmod ath_rate_atheros&lt;br /&gt;   rmmod ath_hal&lt;br /&gt;   rmmod wlan&lt;br /&gt;   rmmod ath_dfs&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# At least this one's straightforward.&lt;br /&gt;load_modules() {&lt;br /&gt;   modprobe ath_pci&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;wifi_on() {&lt;br /&gt;   # Force PCI Express Hotplug to reinit&lt;br /&gt;   rmmod pciehp&lt;br /&gt;   sleep 1&lt;br /&gt;   # pciehp_force may be unnecessary; Xandros did it.&lt;br /&gt;   modprobe pciehp pciehp_force=1&lt;br /&gt;   sleep 1&lt;br /&gt;   # Switch on the hardware&lt;br /&gt;   echo 1 &gt;/proc/acpi/asus/wlan&lt;br /&gt;   sleep 1&lt;br /&gt;   load_modules&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;wifi_off() {&lt;br /&gt;   unload_modules&lt;br /&gt;   echo 0 &gt;/proc/acpi/asus/wlan&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;case $1 in&lt;br /&gt;   on)&lt;br /&gt;      acpi_fakekey $KEY_PROG1&lt;br /&gt;      wifi_on&lt;br /&gt;      ;;&lt;br /&gt;   off)&lt;br /&gt;      acpi_fakekey $KEY_PROG2&lt;br /&gt;      wifi_off&lt;br /&gt;      ;;&lt;br /&gt;   toggle)&lt;br /&gt;      STAT=`cat /proc/acpi/asus/wlan`&lt;br /&gt;      if [ "$STAT" = "1" ];&lt;br /&gt;         then wifi_off;&lt;br /&gt;         else wifi_on;&lt;br /&gt;      fi&lt;br /&gt;      ;;&lt;br /&gt;esac&lt;/pre&gt;&lt;br /&gt;Также создаем файл /etc/acpi/eeepc-hotkeys.sh:&lt;pre class="my_code_box"&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;code=$3&lt;br /&gt;&lt;br /&gt;case $code in&lt;br /&gt;    # Fn+F2 - enable/disable wifi&lt;br /&gt;    00000010)&lt;br /&gt;        /etc/acpi/actions/wireless-toggle.sh on&lt;br /&gt;    ;;&lt;br /&gt;    00000011)&lt;br /&gt;        /etc/acpi/actions/wireless-toggle.sh off&lt;br /&gt;    ;;&lt;br /&gt;esac&lt;/pre&gt;&lt;br /&gt;Делаем эти файлы исполняемыми:&lt;pre class="my_code_box"&gt;sudo chmod a+x /etc/acpi/actions/wireless-toggle.sh&lt;br /&gt;sudo chmod a+x /etc/acpi/eeepc-hotkeys.sh&lt;/pre&gt;&lt;br /&gt;И создаем файл /etc/acpi/events/hotkey, в который записываем:&lt;pre class="my_code_box"&gt;event=hotkey ATKD&lt;br /&gt;action=/etc/acpi/eeepc-hotkeys.sh %e&lt;/pre&gt;&lt;br /&gt;Все, теперь Wi-Fi и кнопка его включения/выключения должны работать. В принципе, для подключения к Wi-Fi точке вы можете использовать графические утилиты, но лично мне гораздо удобнее набрать пару слов в консоли, чем щелкать по множеству кнопок. Поэтому:&lt;pre class="my_code_box"&gt;# Устанавливаем пакет для работы с WPA шифрованием&lt;br /&gt;sudo apt-get install wpasupplicant&lt;/pre&gt;&lt;br /&gt;Создаем файл /etc/wpa_supplicant/wpa_supplicant.conf следующего содержания:&lt;pre class="my_code_box"&gt;ctrl_interface=/var/run/wpa_supplicant&lt;br /&gt;ctrl_interface_group=0&lt;br /&gt;ap_scan=1&lt;br /&gt;fast_reauth=1&lt;br /&gt;eapol_version=1&lt;br /&gt;network={&lt;br /&gt;    ssid="ROUTER_ID"&lt;br /&gt;    psk="PASSWORD"&lt;br /&gt;    priority=5&lt;br /&gt;}&lt;/pre&gt;где ROUTER_ID - имя точки доступа, а PASSWORD - пароль для доступа к ней.&lt;br /&gt;&lt;br /&gt;Добавляем в /etc/network/interfaces строки:&lt;pre class="my_code_box"&gt;iface ath0 inet dhcp&lt;br /&gt;wpa-driver wext&lt;br /&gt;wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf&lt;/pre&gt;&lt;br /&gt;Все, теперь для подключения к точке доступа необходимо выполнить команду&lt;pre class="my_code_box"&gt;sudo ifup ath0&lt;/pre&gt;&lt;br /&gt;Если вы используете Wi-Fi точку с открытым доступом, то устанавливать wpasupplicant и создавать файл /etc/wpa_supplicant/wpa_supplicant.conf не нужно - достаточно только добавить в /etc/network/interfaces строки&lt;pre class="my_code_box"&gt;iface ath0 inet dhcp&lt;br /&gt;pre-up ifconfig ath0 up&lt;br /&gt;pre-up iwconfig ath0 essid "ROUTER_ID"&lt;/pre&gt;&lt;br /&gt;Разорвать уже установленное соединение можно командой&lt;pre class="my_code_box"&gt;sudo ifdown ath0&lt;/pre&gt;&lt;br /&gt;В принципе, можно прописать команды ifup/ifdown в скрипт /etc/acpi/actions/wireless-toggle.sh, чтобы при нажатии на кнопку включения/выключения Wi-Fi автоматически происходило подключение к Wi-Fi точке.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Экономим электроэнергию&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Чтобы посмотреть, какие приложения/сервисы заставляют процессор чаще всего переходить из спящего состояния в рабочее, а следовательно, увеличивать расход электроэнергии, воспользуйтесь утилитой powertop.&lt;br /&gt;&lt;br /&gt;У меня самыми активными оказались Wi-Fi, USB и Ethernet. Поэтому я добавил в /etc/rc.local следующие строки, которые отключают на этапе загрузки все эти интерфейсы:&lt;pre class="my_code_box"&gt;# Отключаем Ethernet&lt;br /&gt;/sbin/ifconfig eth0 down&lt;br /&gt;&lt;br /&gt;# Отключаем USB&lt;br /&gt;rmmod ehci-hcd&lt;br /&gt;rmmod uhci-hcd&lt;br /&gt;&lt;br /&gt;# Отключаем Wi-Fi&lt;br /&gt;/sbin/ifconfig ath0 down&lt;/pre&gt;&lt;br /&gt;Включаю я их только тогда, когда они мне нужны. Включается они следующими командами:&lt;pre class="my_code_box"&gt;# Ethernet&lt;br /&gt;sudo ifup eth0&lt;br /&gt;&lt;br /&gt;# USB &lt;br /&gt;sudo modprobe ehci-hcd&lt;br /&gt;sudo modprobe uhci-hcd&lt;br /&gt;&lt;br /&gt;# Wi-Fi&lt;br /&gt;sudo ifup ath0&lt;/pre&gt;&lt;br /&gt;Если нет желания набирать каждый раз все эти команды в консоли, то можно поставить программу &lt;a href="http://eee-pc.ru/wiki/_media/ubuntu:eeepc-control.zip"&gt;Eee PC sm-Control&lt;/a&gt;, написанную товарищем Serge_RUS, которая позволяет производить те же действия через графический интерфейс.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dWRCmLfFFN0/SFJ1cOhjJDI/AAAAAAAAAHk/xnUdv9u-I80/s1600-h/eee_pc_sm-control.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dWRCmLfFFN0/SFJ1cOhjJDI/AAAAAAAAAHk/xnUdv9u-I80/s320/eee_pc_sm-control.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211356846616683570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SD/SDHC карты&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Пока что мне вполне хватает встроенного SSD диска, и покупать дополнительную флэш память я к своему Eee PC не думаю. Но, читая различные HowTo и форумы, я заметил, что у многих возникают проблемы с некоторыми картами памяти. Т. к. у меня пока такой проблемы нет, я не особо интересовался, какие карты лучше покупать и как бороться с проблемами, если они вдруг возникнут. В конце статьи я привел пару ссылок на эту тему, если она для вас актуальна.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Увеличение срока службы SSD&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Чтобы уменьшить количество операций записи на SSD, добавьте в /etc/fstab следующие строки, чтобы все временные файлы и логи писались в оперативную память:&lt;pre class="my_code_box"&gt;tmpfs /tmp tmpfs defaults,noatime,nodiratime 0 0&lt;br /&gt;tmpfs /var/tmp tmpfs defaults,noatime,nodiratime 0 0&lt;br /&gt;tmpfs /var/log tmpfs defaults,noatime,nodiratime 0 0&lt;/pre&gt;&lt;br /&gt;Внимание! Если вы используете программы, которые создают временные файлы очень большого размера в /tmp, то первую строку добавлять не стоит во избежании нехватки оперативной памяти при создании таких файлов.&lt;br /&gt;&lt;br /&gt;В параметрах монтирования раздела SSD диска укажите опции noatime и nodiratime. Т. е. если раздел у вас монтируется строкой&lt;pre class="my_code_box"&gt;UUID=79d788c4-a8fb-4f03-92c2-e90d4c26b51b    /    ext2    defaults,errors=remount-ro    0    1&lt;/pre&gt;то замените ее на&lt;pre class="my_code_box"&gt;UUID=79d788c4-a8fb-4f03-92c2-e90d4c26b51b    /    ext2    defaults,noatime,nodiratime,errors=remount-ro    0    1&lt;/pre&gt;Включение этих опций запрещает обновление времени последнего доступа каждый раз, когда вы обращаетесь к какому-либо файлу или папке на этом разделе.&lt;br /&gt;&lt;br /&gt;Если вы не пользуетесь командой locate, то можете удалить (или просто поставить exit 0 после строки #!/bin/sh) файл /etc/cron.daily/mlocate. Этот скрипт запускается каждый день и обновляет базу locate, содержащую пути всех файлов в системе (очень удобно использовать locate, если необходимо быстро найти какой-нибудь файл по имени - каманда find работает значительно медленнее, т. к. использует не готовую базу данных, а каждый раз просматривает все дерево каталогов). Если же вы пользуетесь locate'ом, то можно переместить /etc/cron.daily/mlocate в /etc/cron.weekly/, чтобы база обновлялясь раз в неделю.&lt;br /&gt;&lt;br /&gt;Также, чтобы уменьшить количество операций записи на SSD, отключаем все логи (имхо, на карманном ноутбуке они не нужны):&lt;pre class="my_code_box"&gt;sudo apt-get remove klogd sysklogd logrotate&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Экономим место на SSD&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Установите пакет localepurge. Он запросит у вас список локалей, которые вам нужны, и удалит все остальные. localepurge также будет автоматически запускаться при каждом запуске apt.&lt;br /&gt;&lt;br /&gt;Запустите Synaptic, зайдите в меню Settings-&gt;Preferences, перейдите на вкладку Columns and Fonts и поставьте флажок напротив поля Installed Size. Теперь в списке пакетов появится еще одна колонка - Size. Если пакет установлен, то в этой колонке будет отображен размер, который занимают файлы данного пакета. Отсортируйте список пакетов по этой колонке и удаляйте все ненужные пакеты, которые занимают много места.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Компактная тема&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Чтобы увеличить количество полезной информации, отображаемой на относительно небольшом экране Eee PC, рекомендую вам установить компактную тему для GTK - &lt;a href="http://gnome-look.org/content/show.php/Human+Compact?content=80980"&gt;Human Compact&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dWRCmLfFFN0/SFJf_gHW4GI/AAAAAAAAAHc/u38LFtYRubI/s1600-h/human_compact_stardict.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dWRCmLfFFN0/SFJf_gHW4GI/AAAAAAAAAHc/u38LFtYRubI/s320/human_compact_stardict.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5211333263378276450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dWRCmLfFFN0/SFJfkiS4-3I/AAAAAAAAAHU/bQKIdDUfDn0/s1600-h/human_compact_rox.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dWRCmLfFFN0/SFJfkiS4-3I/AAAAAAAAAHU/bQKIdDUfDn0/s320/human_compact_rox.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5211332800107051890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dWRCmLfFFN0/SFJfQtkYkMI/AAAAAAAAAHM/MycIip-ZHXA/s1600-h/human_compact_firefox.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dWRCmLfFFN0/SFJfQtkYkMI/AAAAAAAAAHM/MycIip-ZHXA/s320/human_compact_firefox.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5211332459535831234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Чтение книг&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Для чтения книг могу порекомендовать &lt;a href="http://www.fbreader.org/"&gt;FBReader&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dWRCmLfFFN0/SFJfE1PsZxI/AAAAAAAAAHE/FXKiQ94D0DU/s1600-h/fbreader_2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dWRCmLfFFN0/SFJfE1PsZxI/AAAAAAAAAHE/FXKiQ94D0DU/s320/fbreader_2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5211332255438104338" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dWRCmLfFFN0/SFJe1_jcHTI/AAAAAAAAAG8/BzKSXyNWKqk/s1600-h/fbreader_1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dWRCmLfFFN0/SFJe1_jcHTI/AAAAAAAAAG8/BzKSXyNWKqk/s320/fbreader_1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5211332000507239730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ссылки по теме&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.debian.org/DebianEeePC/HowTo/Wifi"&gt;DebianEeePC/HowTo/Wifi&lt;/a&gt;&lt;br /&gt;&lt;a href="http://wiki.eeeuser.com/getting_ubuntu_8.04_to_work_perfectly"&gt;Ubuntu 8.04 (Hardy Heron) on the Asus Eee PC&lt;/a&gt;&lt;br /&gt;&lt;a href="http://wiki.eeeuser.com/hardware:eee_un_supported_devices"&gt;(Un)supported Hardware&lt;/a&gt;&lt;br /&gt;&lt;a href="http://habrahabr.ru/blog/eeepc/41434.html"&gt;Проблемы с SDHC и их решение&lt;/a&gt;&lt;br /&gt;&lt;a href="http://habrahabr.ru/blog/eeepc/35625.html"&gt;Установка Ubuntu на Eee PC&lt;/a&gt;&lt;br /&gt;&lt;a href="http://eee-pc.ru/wiki/ubuntu:%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F"&gt;Установка и настройка Ubuntu&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-5973835110619743051?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/5973835110619743051/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=5973835110619743051' title='Комментарии: 19'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/5973835110619743051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/5973835110619743051'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2008/06/ubuntu-804-asus-eee-pc.html' title='Установка и настройка Ubuntu 8.04 на ASUS Eee PC'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dWRCmLfFFN0/SFLCocNk_EI/AAAAAAAAAHs/T-170w4uq00/s72-c/ubuntu_on_eee_pc.gif' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-336707040828084442</id><published>2008-02-26T22:13:00.014+03:00</published><updated>2008-10-15T19:34:35.610+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='видеоплеер'/><category scheme='http://www.blogger.com/atom/ns#' term='скрипт'/><category scheme='http://www.blogger.com/atom/ns#' term='видеофайлы'/><category scheme='http://www.blogger.com/atom/ns#' term='mplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='запоминание позиции в файле'/><title type='text'>Запоминание позиции воспроизведения файла в MPlayer</title><content type='html'>Думаю, многим знакома следующая ситуация. Вы запускаете свой любимый MPlayer, чтобы посмотреть какой-нибудь фильм, смотрите, но до конца досмотреть не успеваете, т. к. вам нужно куда-нибудь уходить. Вы закрываете MPlayer, выключаете компьютер и идете по своим делам. Вернувшись, вы решаете досмотреть фильм. Вот только где же вы остановились? Что делать? "Проматывать", пока не наткнетесь на тот момент, который не видели? Записывать время остановки на бумажке? :) Нет, это не наш метод...&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Когда я в очередной раз столкнулся с этой проблемой, то пошел на &lt;a href="http://www.mplayerhq.hu/"&gt;домашнюю страницу MPlayer&lt;/a&gt;, на которой нашел два скрипта для ее решения: &lt;a href="http://spaceparanoids.org/trac/bend/wiki/mplayer-resume"&gt;mplayer-resume&lt;/a&gt; и &lt;a href="http://sourceforge.net/projects/mplayer-tools"&gt;MPlayer Tools&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://spaceparanoids.org/trac/bend/wiki/mplayer-resume"&gt;mplayer-resume&lt;/a&gt; у меня отказался запоминать позиции в файлах и к тому же подавлял весь вывод mplayer'a, что довольно неаккуратно с его стороны, так что я сразу же отказался от него, а &lt;a href="http://sourceforge.net/projects/mplayer-tools"&gt;MPlayer Tools&lt;/a&gt; показался мне слишком неудобным в использовании. Поэтому я решил изобрести собственный велосипед. :)&lt;br /&gt;&lt;br /&gt;В итоге на свет появился относительно небольшой скрипт, представленный ниже. Скрипт полностью сохраняет вывод MPlayer'a и может принимать все аргументы, которые принимает MPlayer. В том числе ему можно передавать одновременно несколько файлов для воспроизведения - каждый из них он воспроизведет с того места, на котором было остановлено воспроизведение в прошлый раз.&lt;br /&gt;&lt;br /&gt;Краткое описание можно прочитать в комментариях, располагающихся в начале самого скрипта.&lt;br /&gt;&lt;br /&gt;Удачи, надеюсь, скрипт окажется вам полезен и сэкономит хотя бы немного вашего времени и нервов. :)&lt;br /&gt;&lt;br /&gt;mplayer.ext:&lt;pre class="my_code_box"&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;#!/bin/bash&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#***************************************************************************&lt;br /&gt;#*   Copyright (C) 2008, Konishchev Dmitry                                 *&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#*   http://konishchevdmitry.blogspot.com/                                 *&lt;br /&gt;#*                                                                         *&lt;br /&gt;#*   Project homepage:                                                     *&lt;br /&gt;#*   http://sourceforge.net/projects/mplayerext/                           *&lt;br /&gt;#*                                                                         *&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#*   This program is free software; you can redistribute it and/or modify  *&lt;br /&gt;#*   it under the terms of the GNU General Public License as published by  *&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#*   the Free Software Foundation; either version 3 of the License, or     *&lt;br /&gt;#*   (at your option) any later version.                                   *&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#*                                                                         *&lt;br /&gt;#*   This program is distributed in the hope that it will be useful,       *&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *&lt;br /&gt;#*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#*   GNU General Public License for more details.                          *&lt;br /&gt;#**************************************************************************/&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# mplayer.ext - скрипт-оболочка для mplayer.&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# &lt;br /&gt;# Предназначен для продолжения прослушивания/просмотра аудио и видео&lt;br /&gt;# файлов с той позиции, на которой просмотр/прослушивание завершился в&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# прошлый раз при закрытии mplayer'a.&lt;br /&gt;# &lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# Использование:&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# Если вы хотите пользоваться возможностями скрипта, вам необходимо&lt;br /&gt;# всегда, когда вы хотите проиграть аудио/видео файл, вызывать этот скрипт&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# вместо mplayer'a.&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# &lt;br /&gt;# Как работает скрипт:&lt;br /&gt;# Если завершение работы mplayer'a происходит во время просмотра фильма,&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# то в файл, путь к которому задан переменной $resume_info_file, заносится&lt;br /&gt;# информация о времени, на котором произошло прерывание просмотра. Время&lt;/font&gt;&lt;br /&gt;# привязывается к имени файла (имени, а не пути!), таким образом, если файл&lt;br /&gt;&lt;font color="#444444"&gt;# будет перемещен в другую дирректорию, то скрипт все равно его &amp;quot;узнает&amp;quot;.&lt;br /&gt;# В следующий раз, когда пользователь запросит проигрывание этого фильма,&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# скрипт просмотрит файл, заданный переменной $resume_info_file и&lt;br /&gt;# продолжит воспроизведение фильма с того момента, на котором завершилось&lt;br /&gt;# воспроизведение в прошлый раз.&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# &lt;br /&gt;# Максимальное количество файлов, информация о которых может храниться в&lt;br /&gt;# $resume_info_file задается переменной $max_resume_info_length.&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# &lt;br /&gt;# Ограничения скрипта:&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# * Скрипт не обрабатывает файлы DVD вида VTS_*_*.VOB, т. к. mplayer не&lt;br /&gt;#   позволяет начинать воспроизведение таких файлов с произвольного места.&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# * Т. к. mplayer позволяет начинать воспроизведение фильма только с&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#   ключевого кадра, то, если воспроизведение фильма в прошлый раз&lt;br /&gt;#   прервалось не на ключевом кадре, при попытке воспроизвести фильм с&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#   того же места произойдет перемотка вперед до следующего ключевого&lt;br /&gt;#   кадра, т. е. часть фильма останется непросмотренной. В связи с этим&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#   скрипт производит &amp;quot;отматывание&amp;quot; на $keyint секунд назад (по умолчанию&lt;br /&gt;#   - 10), т. к., при кодировании большинства MPEG-4 файлов данная&lt;br /&gt;#   величина используется в качестве максимального расстояния между&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#   ключевыми кадрами. Если в ваших видеофайлах интервал между ключевыми&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#   кадрами больше этого значения, то измените значение переменной $keyint.  &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# Настройки --&amp;gt;&lt;br /&gt; # Максимальный интервал между ключевыми кадрами&lt;br /&gt; keyint=10&lt;/font&gt;&lt;br /&gt;&lt;br /&gt; # Файл, в котором будет храниться информация о недосмотренных файлах&lt;br /&gt; &lt;font color="#2040a0"&gt;resume_info_file&lt;/font&gt;=~/.mplayer/resume_info&lt;br /&gt;&lt;br /&gt; # Максимальное количесво файлов, информация о которых будет храниться в &lt;font color="#2040a0"&gt;$resume_info_file&lt;/font&gt;&lt;br /&gt; &lt;font color="#2040a0"&gt;max_resume_info_length&lt;/font&gt;=100&lt;br /&gt;&lt;font color="#444444"&gt;# Настройки &amp;lt;--&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;mplayer_ext_echo()&lt;br /&gt;{&lt;br /&gt; echo &lt;font color="#008000"&gt;&amp;quot;mplayer.ext: $@&amp;quot;&lt;/font&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;mplayer_ext_warning()&lt;br /&gt;{&lt;br /&gt; mplayer_ext_echo &lt;font color="#008000"&gt;&amp;quot;$@&amp;quot;&lt;/font&gt; &amp;gt;&amp;amp;2&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;cleanup()&lt;br /&gt;{&lt;br /&gt; rm -f &lt;font color="#2040a0"&gt;$tmp_file&lt;/font&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;die()&lt;br /&gt;{&lt;br /&gt; mplayer_ext_warning &lt;font color="#008000"&gt;&amp;quot;$@&amp;quot;&lt;/font&gt;&lt;br /&gt; cleanup&lt;br /&gt; exit 1&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# Возвращает идентификатор видео по имени файла&lt;/font&gt;&lt;br /&gt;get_video_name_by_file_name()&lt;br /&gt;{&lt;br /&gt; local &lt;font color="#2040a0"&gt;video_name&lt;/font&gt;=$(basename &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$1&lt;/font&gt;&amp;quot;&lt;/font&gt;)&lt;br /&gt;&lt;br /&gt; if [[ &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$video_name&lt;/font&gt;&amp;quot;&lt;/font&gt; == &lt;font color="#008000"&gt;&amp;quot;&amp;quot;&lt;/font&gt; ]]&lt;br /&gt; then&lt;br /&gt;  return 1&lt;br /&gt; fi&lt;br /&gt;&lt;br /&gt; # Не обрабатываем файлы DVD, т. к. в них невозможно осуществлять воспроизведение&lt;br /&gt; # с произвольного места&lt;br /&gt; if echo -n &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$video_name&lt;/font&gt;&amp;quot;&lt;/font&gt; | egrep -i '^vts_[[:digit:]]+_[[:digit:]]+.vob$' &amp;gt; /dev/null&lt;br /&gt; then&lt;br /&gt;  return 1&lt;br /&gt; fi&lt;br /&gt;&lt;br /&gt; echo -n &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$video_name&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# Если $2 == 0, то файл помечается как просмотренный&lt;br /&gt;set_resume_pos()&lt;/font&gt;&lt;br /&gt;{&lt;br /&gt; declare -a resume_info_array&lt;br /&gt; local resume_info resume_info_time resume_info_time i&lt;br /&gt;&lt;br /&gt; # Устанавливаем разделитель слов равным \n&lt;br /&gt; local &lt;font color="#2040a0"&gt;IFS&lt;/font&gt;=$'\n'&lt;br /&gt;&lt;br /&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt;=0&lt;br /&gt; for resume_info in `cat &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info_file&lt;/font&gt;&amp;quot;&lt;/font&gt; | tail --lines $((max_resume_info_length - 1))`&lt;br /&gt; do&lt;br /&gt;  &lt;font color="#2040a0"&gt;resume_info_time&lt;/font&gt;=`echo -n &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info&lt;/font&gt;&amp;quot;&lt;/font&gt; | egrep '^.+:[[:digit:]]+$' | sed -r 's/^.+://' | egrep '^[[:digit:]]+$'`&lt;br /&gt;  &lt;font color="#2040a0"&gt;resume_info_name&lt;/font&gt;=`echo -n &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info&lt;/font&gt;&amp;quot;&lt;/font&gt; | sed &lt;font color="#008000"&gt;&amp;quot;s/:${resume_info_time}\$//&amp;quot;&lt;/font&gt;`&lt;br /&gt;&lt;br /&gt;  # Пропускаем неверно сформированные записи&lt;br /&gt;  if [[ &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info_time&lt;/font&gt;&amp;quot;&lt;/font&gt; == &lt;font color="#008000"&gt;&amp;quot;&amp;quot;&lt;/font&gt; || &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info_name&lt;/font&gt;&amp;quot;&lt;/font&gt; == &lt;font color="#008000"&gt;&amp;quot;&amp;quot;&lt;/font&gt; ]]&lt;br /&gt;  then&lt;br /&gt;   mplayer_ext_warning &lt;font color="#008000"&gt;&amp;quot;Bad resume info string: '&lt;font color="#2040a0"&gt;$resume_info&lt;/font&gt;'.&amp;quot;&lt;/font&gt;&lt;br /&gt;   continue&lt;br /&gt;  fi&lt;br /&gt;  &lt;br /&gt;  # Если это тот файл, который мы ищем&lt;br /&gt;  if [[ &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info_name&lt;/font&gt;&amp;quot;&lt;/font&gt; == &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$1&lt;/font&gt;&amp;quot;&lt;/font&gt; ]]&lt;br /&gt;  then&lt;br /&gt;   # Пропускаем старую запись&lt;br /&gt;   continue&lt;br /&gt;  # Остальные файлы - оставляем без изменений&lt;br /&gt;  else&lt;br /&gt;   resume_info_array[$((i++))]=&lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;  fi&lt;br /&gt; done&lt;br /&gt;&lt;br /&gt; # Если видео не досмотрели до конца&lt;br /&gt; if [[ &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$2&lt;/font&gt;&amp;quot;&lt;/font&gt; != &lt;font color="#008000"&gt;&amp;quot;0&amp;quot;&lt;/font&gt; ]]&lt;br /&gt; then&lt;br /&gt;  mplayer_ext_echo &lt;font color="#008000"&gt;&amp;quot;Writing resume time information: '&lt;font color="#2040a0"&gt;$1&lt;/font&gt;': &lt;font color="#2040a0"&gt;$2&lt;/font&gt;.&amp;quot;&lt;/font&gt;&lt;br /&gt;  resume_info_array[&lt;font color="#2040a0"&gt;$i&lt;/font&gt;]=&lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$1&lt;/font&gt;:&lt;font color="#2040a0"&gt;$2&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt; else&lt;br /&gt;  mplayer_ext_echo &lt;font color="#008000"&gt;&amp;quot;Writing resume time information: '&lt;font color="#2040a0"&gt;$1&lt;/font&gt;': viewed.&amp;quot;&lt;/font&gt;&lt;br /&gt; fi&lt;br /&gt;&lt;br /&gt; # Заносим изменения в файл&lt;br /&gt; echo &lt;font color="#008000"&gt;&amp;quot;${resume_info_array[*]}&amp;quot;&lt;/font&gt; &amp;gt; &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info_file&lt;/font&gt;&amp;quot;&lt;/font&gt; || die&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# Получает строку времени, на котором было приостановлено воспроизведение файла.&lt;br /&gt;# Преобразует строки вида:&lt;br /&gt;# A: 308.4 V: 308.4 A-V:  -0.006 ct:  -0.041 7395/7395  4%  0%  5.5% 0 0&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# A: 308.4 V: 308.4 A-V:  0.006 ct:  0.041 7395/7395  4%  0%  5.5% 0 0&lt;br /&gt;# A:   2.0 V:   2.0 A-V: -0.006 ct:  0.007  50/ 50  6%  3%  3.9% 0&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# A:  87.6 (01:27.5) of 228.0 (03:48.0)  4.4%&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# V:   1.8  45/ 45 15%  3%  0.0% 0 0&lt;br /&gt;# в строку вида:&lt;br /&gt;# [AV]:308&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# в зависимости от наличия в файле аудио/видео дорожек&lt;br /&gt;get_cur_pos_info()&lt;/font&gt;&lt;br /&gt;{&lt;br /&gt; local &lt;font color="#2040a0"&gt;pos_info&lt;/font&gt;=`cat &lt;font color="#2040a0"&gt;$tmp_file&lt;/font&gt; | head --lines &lt;font color="#2040a0"&gt;$end_line&lt;/font&gt; | tail --lines $((end_line - start_line + 1)) | tr '\33\15' '\n' \&lt;br /&gt;  | egrep '^[AV]:[[:space:]]*[[:digit:]]+\.[[:digit:]]+[[:space:]]+' \&lt;br /&gt;   | tail --lines 1 \&lt;br /&gt;    | sed -r 's/:\s+/:/g' | sed -r 's/\s+/ /g'`&lt;br /&gt;&lt;br /&gt; if [[ &lt;font color="#2040a0"&gt;$pos_info&lt;/font&gt; == &lt;font color="#008000"&gt;&amp;quot;&amp;quot;&lt;/font&gt; ]]&lt;br /&gt; then&lt;br /&gt;  return 1&lt;br /&gt; fi&lt;br /&gt;&lt;br /&gt; # Видео со звуком&lt;br /&gt; if echo &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$pos_info&lt;/font&gt;&amp;quot;&lt;/font&gt; | egrep -o '^A:[[:digit:]]+\.[[:digit:]]+ V:[[:digit:]]+\.[[:digit:]]' &amp;gt; /dev/null&lt;br /&gt; then&lt;br /&gt;  &lt;font color="#2040a0"&gt;pos_info&lt;/font&gt;=`echo -n &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$pos_info&lt;/font&gt;&amp;quot;&lt;/font&gt; | awk '{ print &lt;font color="#2040a0"&gt;$2&lt;/font&gt; }' | awk -F '.' '{ print &lt;font color="#2040a0"&gt;$1&lt;/font&gt; }'`&lt;br /&gt; # Видео без звука&lt;br /&gt; elif echo &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$pos_info&lt;/font&gt;&amp;quot;&lt;/font&gt; | egrep -o '^V:[[:digit:]]+\.[[:digit:]]' &amp;gt; /dev/null&lt;br /&gt; then&lt;br /&gt;  &lt;font color="#2040a0"&gt;pos_info&lt;/font&gt;=`echo -n &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$pos_info&lt;/font&gt;&amp;quot;&lt;/font&gt; | awk -F '.' '{ print &lt;font color="#2040a0"&gt;$1&lt;/font&gt; }'`&lt;br /&gt; # Аудио без видео&lt;br /&gt; elif echo &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$pos_info&lt;/font&gt;&amp;quot;&lt;/font&gt; | egrep -o '^A:[[:digit:]]+\.[[:digit:]]' &amp;gt; /dev/null&lt;br /&gt; then&lt;br /&gt;  &lt;font color="#2040a0"&gt;pos_info&lt;/font&gt;=`echo -n &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$pos_info&lt;/font&gt;&amp;quot;&lt;/font&gt; | awk -F '.' '{ print &lt;font color="#2040a0"&gt;$1&lt;/font&gt; }'`&lt;br /&gt; # Логическая ошибка&lt;br /&gt; else&lt;br /&gt;  die &lt;font color="#008000"&gt;&amp;quot;Logical error! :)&amp;quot;&lt;/font&gt;&lt;br /&gt; fi&lt;br /&gt;&lt;br /&gt; if [[ &lt;font color="#2040a0"&gt;$pos_info&lt;/font&gt; == &lt;font color="#008000"&gt;&amp;quot;&amp;quot;&lt;/font&gt; ]]&lt;br /&gt; then&lt;br /&gt;  die &lt;font color="#008000"&gt;&amp;quot;Logical error! :)&amp;quot;&lt;/font&gt;&lt;br /&gt; fi&lt;br /&gt;&lt;br /&gt; echo -n &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$pos_info&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;get_resume_pos()&lt;br /&gt;{&lt;br /&gt; local resume_info resume_info_time resume_info_time&lt;br /&gt;&lt;br /&gt; # Устанавливаем разделитель слов равным \n&lt;br /&gt; local &lt;font color="#2040a0"&gt;IFS&lt;/font&gt;=$'\n'&lt;br /&gt;&lt;br /&gt; for resume_info in $(&amp;lt; &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info_file&lt;/font&gt;&amp;quot;&lt;/font&gt;)&lt;br /&gt; do&lt;br /&gt;  &lt;font color="#2040a0"&gt;resume_info_time&lt;/font&gt;=`echo &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info&lt;/font&gt;&amp;quot;&lt;/font&gt; | egrep '^.+:[[:digit:]]+$' | sed -r 's/^.+://' | egrep '^[[:digit:]]+$'`&lt;br /&gt;  &lt;font color="#2040a0"&gt;resume_info_name&lt;/font&gt;=`echo &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info&lt;/font&gt;&amp;quot;&lt;/font&gt; | sed &lt;font color="#008000"&gt;&amp;quot;s/:${resume_info_time}\$//&amp;quot;&lt;/font&gt;`&lt;br /&gt;&lt;br /&gt;  # Пропускаем неверно сформированные записи&lt;br /&gt;  if [[ &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info_time&lt;/font&gt;&amp;quot;&lt;/font&gt; == &lt;font color="#008000"&gt;&amp;quot;&amp;quot;&lt;/font&gt; || &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info_name&lt;/font&gt;&amp;quot;&lt;/font&gt; == &lt;font color="#008000"&gt;&amp;quot;&amp;quot;&lt;/font&gt; ]]&lt;br /&gt;  then&lt;br /&gt;   # Предупреждение не выводим, т. к. оно будет выведено при записи в файл.&lt;br /&gt;   continue&lt;br /&gt;  fi&lt;br /&gt;  &lt;br /&gt;  # Если это тот файл, который мы ищем&lt;br /&gt;  if [[ &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info_name&lt;/font&gt;&amp;quot;&lt;/font&gt; == &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$1&lt;/font&gt;&amp;quot;&lt;/font&gt; ]]&lt;br /&gt;  then&lt;br /&gt;   echo &lt;font color="#2040a0"&gt;$resume_info_time&lt;/font&gt;&lt;br /&gt;   return 0&lt;br /&gt;  fi&lt;br /&gt; done&lt;br /&gt;&lt;br /&gt; return 1&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if ! &lt;font color="#2040a0"&gt;tmp_file&lt;/font&gt;=`mktemp`&lt;br /&gt;then&lt;br /&gt; die &lt;font color="#008000"&gt;&amp;quot;Can't create temp file.&amp;quot;&lt;/font&gt;&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;if ! which mplayer &amp;gt; /dev/null&lt;br /&gt;then&lt;br /&gt; die &lt;font color="#008000"&gt;&amp;quot;Error! Mplayer not installed.&amp;quot;&lt;/font&gt;&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;if [[ ! -e &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info_file&lt;/font&gt;&amp;quot;&lt;/font&gt; ]]&lt;br /&gt;then&lt;br /&gt; touch &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$resume_info_file&lt;/font&gt;&amp;quot;&lt;/font&gt; || die&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# Изменяем агрументы, переданные mplayer'у так, чтобы выбранные видеофайлы&lt;/font&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# воспроизводились с того момента, где в прошлый раз было прервано&lt;br /&gt;# воспроизведение.&lt;br /&gt;i=0&lt;br /&gt;for option&lt;/font&gt;&lt;br /&gt;do&lt;br /&gt; options[$((i++))]=&lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$option&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt; if [[ ${option:0:1} != '-' ]]&lt;br /&gt; then&lt;br /&gt;  # Если значение параметра похоже на имя файла, то считаем, что&lt;br /&gt;  # требуется проиграть этот файл.  Если это просто значение опции, то&lt;br /&gt;  # скрипт все равно сработает нормально, разве что добавится лишний&lt;br /&gt;  # ключ -ss в случае когда значение параметра будет совпадать с&lt;br /&gt;  # именем какого-либо файла в системе.&lt;br /&gt;  if [[ -e &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$option&lt;/font&gt;&amp;quot;&lt;/font&gt; ]]&lt;br /&gt;  then&lt;br /&gt;   if &lt;font color="#2040a0"&gt;video_name&lt;/font&gt;=`get_video_name_by_file_name &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$option&lt;/font&gt;&amp;quot;&lt;/font&gt;`&lt;br /&gt;   then&lt;br /&gt;    # Если воспроизведение этого видео файла было прервано ранее&lt;br /&gt;    if &lt;font color="#2040a0"&gt;video_resume_pos&lt;/font&gt;=`get_resume_pos &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$video_name&lt;/font&gt;&amp;quot;&lt;/font&gt;`&lt;br /&gt;    then&lt;br /&gt;     options[$((i++))]='-ss'&lt;br /&gt;     options[$((i++))]=&lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$video_resume_pos&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;    fi&lt;br /&gt;   fi&lt;br /&gt;  fi&lt;br /&gt; fi&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# Запускаем mplayer с измененными параметрами командной строки&lt;/font&gt;&lt;br /&gt;mplayer_ext_echo &lt;font color="#008000"&gt;&amp;quot;Starting mplayer: mplayer ${options[@]}&amp;quot;&lt;/font&gt;&lt;br /&gt;mplayer &lt;font color="#008000"&gt;&amp;quot;${options[@]}&amp;quot;&lt;/font&gt; | tee &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$tmp_file&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# Получаем все файлы, которые проигрывал mplayer --&amp;gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#2040a0"&gt;files_in_output&lt;/font&gt;=&lt;font color="#008000"&gt;&amp;quot;`egrep --line-number 'Playing[[:space:]]+.+\.' &lt;font color="#2040a0"&gt;$tmp_file&lt;/font&gt;`&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt; for line in `seq \`echo &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$files_in_output&lt;/font&gt;&amp;quot;&lt;/font&gt; | wc --lines\``&lt;br /&gt; do&lt;br /&gt;  &lt;font color="#2040a0"&gt;file_in_output&lt;/font&gt;=`echo &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$files_in_output&lt;/font&gt;&amp;quot;&lt;/font&gt; | head --lines &lt;font color="#2040a0"&gt;$line&lt;/font&gt; | tail --lines 1`&lt;br /&gt;  files_lines[$((line-1))]=`echo &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$file_in_output&lt;/font&gt;&amp;quot;&lt;/font&gt; | awk -F ':' '{ print &lt;font color="#2040a0"&gt;$1&lt;/font&gt; }'`&lt;br /&gt;  files_paths[$((line-1))]=`echo &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$file_in_output&lt;/font&gt;&amp;quot;&lt;/font&gt; | sed -r 's/^[[:digit:]]+:Playing[[:space:]]+//' | sed 's/\.$//g'`&lt;br /&gt; done&lt;br /&gt;&lt;font color="#444444"&gt;# Получаем все файлы, которые проигрывал mplayer &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#444444"&gt;# Получаем всю необходимую информацию о каждом проигранном файле --&amp;gt;&lt;/font&gt;&lt;br /&gt; for num in `seq 1 ${#files_lines[*]}`&lt;br /&gt; do&lt;br /&gt;  &lt;font color="#2040a0"&gt;i&lt;/font&gt;=$((num-1))&lt;br /&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;start_line&lt;/font&gt;=${files_lines[&lt;font color="#2040a0"&gt;$i&lt;/font&gt;]}&lt;br /&gt;&lt;br /&gt;  # Генерируем имя видео по имени файла&lt;br /&gt;  if ! &lt;font color="#2040a0"&gt;video_name&lt;/font&gt;=`get_video_name_by_file_name &lt;font color="#008000"&gt;&amp;quot;${files_paths[&lt;font color="#2040a0"&gt;$i&lt;/font&gt;]}&amp;quot;&lt;/font&gt;`&lt;br /&gt;  then&lt;br /&gt;   mplayer_ext_echo &lt;font color="#008000"&gt;&amp;quot;Skiping file '${files_paths[&lt;font color="#2040a0"&gt;$i&lt;/font&gt;]}'&amp;quot;&lt;/font&gt;&lt;br /&gt;   continue&lt;br /&gt;  fi&lt;br /&gt;&lt;br /&gt;  # Если файл последний&lt;br /&gt;  if [[ &lt;font color="#2040a0"&gt;$num&lt;/font&gt; -eq ${#files_lines[*]} ]]&lt;br /&gt;  then&lt;br /&gt;   &lt;font color="#2040a0"&gt;end_line&lt;/font&gt;=$((`cat &lt;font color="#2040a0"&gt;$tmp_file&lt;/font&gt; | wc --lines` + 1))&lt;br /&gt;&lt;br /&gt;   # Получаем строку со временем, на котором остановилось воспроизведение&lt;br /&gt;   if ! &lt;font color="#2040a0"&gt;video_resume_string&lt;/font&gt;=`get_cur_pos_info`&lt;br /&gt;   then&lt;br /&gt;    # Получить строку не удалось - это может произойти по разным причинам,&lt;br /&gt;    # например, если не удалось открыть файл.&lt;br /&gt;    # Т. к. файл не проигрывался, то не запоминаем его позицию.&lt;br /&gt;    mplayer_ext_echo &lt;font color="#008000"&gt;&amp;quot;Skiping file '${files_paths[&lt;font color="#2040a0"&gt;$i&lt;/font&gt;]}'&amp;quot;&lt;/font&gt;&lt;br /&gt;    continue&lt;br /&gt;   fi&lt;br /&gt;&lt;br /&gt;   # Файл проигрался до конца&lt;br /&gt;   if [[ `cat &lt;font color="#2040a0"&gt;$tmp_file&lt;/font&gt; | tail --lines 1` == 'Exiting... (End of file)' ]]&lt;br /&gt;   then&lt;br /&gt;    set_resume_pos &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$video_name&lt;/font&gt;&amp;quot;&lt;/font&gt; 0&lt;br /&gt;   # Проигрывание файла было прервано&lt;br /&gt;   else&lt;br /&gt;    &lt;font color="#2040a0"&gt;video_resume_time&lt;/font&gt;=`echo -n &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$video_resume_string&lt;/font&gt;&amp;quot;&lt;/font&gt; | awk -F ':' '{ print &lt;font color="#2040a0"&gt;$2&lt;/font&gt; }'`&lt;br /&gt;&lt;br /&gt;    # Видео (для аудио отматывать не надо)&lt;br /&gt;    if [[ `echo -n &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$video_resume_string&lt;/font&gt;&amp;quot;&lt;/font&gt; | awk -F ':' '{ print &lt;font color="#2040a0"&gt;$1&lt;/font&gt; }'` == 'V' ]]&lt;br /&gt;    then&lt;br /&gt;     # &lt;font color="#008000"&gt;&amp;quot;Отматываем&amp;quot;&lt;/font&gt; видео назад (приблизительно) до предыдущего ключевого кадра&lt;br /&gt;     if [[ $((video_resume_time - keyint)) -lt 0 ]]&lt;br /&gt;     then&lt;br /&gt;      &lt;font color="#2040a0"&gt;video_resume_time&lt;/font&gt;=0&lt;br /&gt;     else&lt;br /&gt;      &lt;font color="#2040a0"&gt;video_resume_time&lt;/font&gt;=$((video_resume_time - keyint))&lt;br /&gt;     fi&lt;br /&gt;    fi&lt;br /&gt;&lt;br /&gt;    set_resume_pos &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$video_name&lt;/font&gt;&amp;quot;&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$video_resume_time&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;   fi&lt;br /&gt;  # Файл не последний&lt;br /&gt;  else&lt;br /&gt;   &lt;font color="#2040a0"&gt;end_line&lt;/font&gt;=${files_lines[$((i+1))]}&lt;br /&gt;&lt;br /&gt;   # Получаем строку со временем, на котором остановилось воспроизведение&lt;br /&gt;   if ! &lt;font color="#2040a0"&gt;video_resume_string&lt;/font&gt;=`get_cur_pos_info`&lt;br /&gt;   then&lt;br /&gt;    # Получить строку не удалось - это может произойти по разным причинам,&lt;br /&gt;    # например, если не удалось открыть файл.&lt;br /&gt;    # Т. к. файл не проигрывался, то не запоминаем его позицию.&lt;br /&gt;    mplayer_ext_echo &lt;font color="#008000"&gt;&amp;quot;Skiping file '${files_names[&lt;font color="#2040a0"&gt;$i&lt;/font&gt;]}'&amp;quot;&lt;/font&gt;&lt;br /&gt;    continue&lt;br /&gt;   fi&lt;br /&gt;&lt;br /&gt;   set_resume_pos &lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$video_name&lt;/font&gt;&amp;quot;&lt;/font&gt; 0&lt;br /&gt;  fi&lt;br /&gt; done&lt;br /&gt;&lt;font color="#444444"&gt;# Получаем всю необходимую информацию о каждом проигранном файле &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;cleanup&lt;/pre&gt;Также скачать скрипт можно &lt;a href="http://sourceforge.net/projects/mplayerext/"&gt;здесь&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-336707040828084442?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/336707040828084442/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=336707040828084442' title='Комментарии: 14'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/336707040828084442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/336707040828084442'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2008/02/mplayer.html' title='Запоминание позиции воспроизведения файла в MPlayer'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-6076400792720509656</id><published>2008-09-29T19:31:00.004+04:00</published><updated>2008-09-29T19:37:23.857+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GtkTreeViewColumn'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='gtkmm'/><title type='text'>Назначение обработчика сигнала для заголовка GtkTreeViewColumn</title><content type='html'>Недавно потребовалось сделать так, чтобы при нажатии правой кнопкой мыши по заголовку колонки GtkTreeView возникало меню, с помощью которого можно было бы выбрать для отображения или скрыть отдельные колонки. Порывшись в документации к GTK, я обнаружил, что это не так то просто. А именно - нет какой-либо функции, которая могла бы возвратить виджет заголовка колонки, к которому я бы смог привязать обработчик сигнала на нажатие кнопки мыши.&lt;br /&gt;&lt;br /&gt;Т. к. поиск в документации не дал никаких результатов, я начал искать обходные пути решения данной проблемы. Оказалось, что GTK позволяет назначить собственный виджет, который будет помещен в кнопку заголовка GtkTreeViewColumn. По умолчанию, если пользователь не назначит собственный виджет, вместо него используется обычный GtkLabel с именем колонки. Если же мы назначим заголовку собственный виджет, то сможем подняться от него вверх по дереву содержащих его контейнеров и получить нужную нам кнопку.&lt;br /&gt;&lt;br /&gt;Поэтому, недолго думая, я написал следующую функцию, которая возвращает заветную кнопку заголовка колонки (функция написана для Gtkmm, но переписать ее под обычный GTK не составит никакого труда):&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;/// Возвращает кнопку, находящуюся в заголовке колонки GtkTreeView,&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;/// или NULL, если кнопку найти не удалось.&lt;/font&gt;&lt;br /&gt;Gtk::Button* get_tree_view_column_header_button(Gtk::TreeViewColumn&amp;amp; column)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Gtk::Widget* widget;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;( !( widget = column.get_widget() ) )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;// Если для заголовка не установлен никакой виджет, устанавливаем свой Gtk::Label,&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;// чтобы по нему можно было выйти на остальные виджеты заголовка.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Gtk::Label* header_label = Gtk::manage(&lt;font color="#a52a2a"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Gtk::Label(column.get_title()));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;column.set_widget(*header_label);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;header_label-&amp;gt;show();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;widget = header_label-&amp;gt;get_parent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;// Поднимаемся вверх по дереву контейнеров,&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;// пока не наткнемся на Gtk::Button.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/font&gt;(widget &amp;amp;&amp;amp; widget-&amp;gt;get_name() != &lt;font color="#ff00ff"&gt;&amp;quot;GtkButton&amp;quot;&lt;/font&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;widget = widget-&amp;gt;get_parent();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;dynamic_cast&lt;/b&gt;&lt;/font&gt;&amp;lt;Gtk::Button*&amp;gt;(widget);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;Далее, получив кнопку для каждой колонки, можно привязать к ней любой обработчик сигнала:&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;// Назначаем обработчик нажатия кнопки мыши для заголовка колонки.&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;( (button = get_tree_view_column_header_button(column)) )&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;button-&amp;gt;signal_button_press_event().connect(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sigc::mem_fun(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;font color="#a52a2a"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;MyTree_view::on_column_header_button_press_event_callback&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ff00ff"&gt;false&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Примечание:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Конечно, это хак, и он использует внутренние структуры GTK, которые впоследствии (теоретически, хотя и очень врядли) могут измениться. Но, по-моему, такое решение гораздо лучше, чем вовсе ничего.&lt;br /&gt;&lt;br /&gt;Данный метод будет работать только тогда, когда у колонки установлен атрибут "clickable" или для нее указана колонка GtkTreeModel, которая должна использоваться при сортировке (неявно устанавливает атрибут "clickable"). Вызывать функцию необходимо после добавления колонки в TreeView, т. к. виджеты заголовка колонки создаются именно в этот момент.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-6076400792720509656?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/6076400792720509656/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=6076400792720509656' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/6076400792720509656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/6076400792720509656'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2008/09/gtktreeviewcolumn.html' title='Назначение обработчика сигнала для заголовка GtkTreeViewColumn'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-126526961844023880</id><published>2008-08-19T21:02:00.000+04:00</published><updated>2008-08-19T21:17:01.453+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pyvsb'/><category scheme='http://www.blogger.com/atom/ns#' term='резервное копирование'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>PyVSB - простая в использовании система бэкапа данных</title><content type='html'>Меня давно привлекал язык программирования Python - по-моему все мнения о нем, которые мне доводилось слышать, были исключительно положительными, да и в последнее время при работе в Linux я стал замечать, что все больше и больше программ, которыми я пользуюсь, написаны на Python'е. Прочитав &lt;a href="http://docs.python.org/tut/tut.html"&gt;Python tutorial&lt;/a&gt; и просмотрев &lt;a href="http://docs.python.org/lib/lib.html"&gt;Python Library Reference&lt;/a&gt;, я понял, что совершенно не зря он стал так популярен в последнее время - это просто замечательный язык, который отлично подойдет как web-разработчику так и разработчику настольных программ, особенно если скорость написания программы для него имеет решающее значение.&lt;br /&gt;&lt;br /&gt;После прочтения документации к Python, я стал думать, как бы мне закрепить полученные знания на практике. Идеальным вариантом было бы написание относительно небольшой программы, которая использует как можно больше возможностей библиотеки Python, и которая пригодилась бы мне впоследствии, чтобы не "писать программу, ради написания программы". Попытавшись вспомнить, каких программ мне не хватает, я пришел в тупик - оказалось, что в Linux я нашел для себя все, что мне было необходимо. Однако, я вспомнил, что уже довольно давно для бэкапа использую самописные скрипты, которые хоть и сжимают сохраненные данные, но не обеспечивают инкрементального бэкапа. Поставить какую-нибудь bacula и читать целый том документации к ней мне не хотелось - для "домашнего" бэкапа ее возможности совершенно не нужны. До поиска каких-нибудь более простых систем бэкапа у меня как-то не доходили руки.&lt;br /&gt;&lt;br /&gt;Тут то я и нашел, на чем мне можно получить практический опыт программирования на Python - нужно написать относительно простую систему для "домашнего" бэкапа, которая будет иметь только необходимые функции и минимум настроек в конфигурационном файле.&lt;br /&gt;&lt;br /&gt;Необходимые для меня функции - это:&lt;ul&gt;&lt;li&gt;Инкрементальный бэкап&lt;/li&gt;&lt;li&gt;Сжатие сохраняемых данных&lt;/li&gt;&lt;li&gt;Отправка уведомлений на email&lt;/li&gt;&lt;li&gt;Возможность запуска собственных скриптов до и после бэкапа&lt;/li&gt;&lt;li&gt;Фильтрация файлов, подлежащих резервному копированию, по регулярным выражениям&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Вот что у меня получилось (взято из Readme файла к программе):&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;PyVSB&lt;br /&gt;&lt;br /&gt;Простая в использовании система бэкапа данных для GNU/Linux.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Основные возможности:&lt;br /&gt;&lt;br /&gt;- Инкрементальный бэкап&lt;br /&gt;- Сжатие сохраняемых данных&lt;br /&gt;- Отправка уведомлений на email&lt;br /&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;&lt;br /&gt;Сжатие сохраняемых данных&lt;br /&gt;&lt;br /&gt;Данные бэкапа можно сохранять и без сжатия для экономии процессорного времени во время бэкапа, но если занимаемое ими место на диске имеет решающее значение, то при сохранении их можно сжимать алгоритмами gz, bz2 и 7z. 7z имеет самую высокую степень компрессии, но при сжатии требует больше всего процессорного времени.&lt;br /&gt;&lt;br /&gt;Чтобы можно было хотя бы примерно оценить, какое количество пространства эти алгоритмы могут вам сэкономить, и сколько процессорного времени на это понадобится, я сделал tar архив из своей директории /usr и обжал его с помощью данных алгоритмов. Результаты теста очень приблизительные и, естественно, будут меняться от типов данных и конфигурации компьютера, поэтому имеет смысл смотреть только на примерные соотношения размер/время и решать, какой алгоритм для вас предпочтительней.&lt;br /&gt;&lt;br /&gt;Исходный размер данных: 3990 Мб&lt;br /&gt;gz:  размер файла: 1621 Мб, затраченное время: 14,5 мин.&lt;br /&gt;bz2: размер файла: 1483 Мб, затраченное время: 34 мин.&lt;br /&gt;7z:  размер файла: 1144 Мб, затраченное время: 93,5 мин.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Отправка уведомлений на email&lt;br /&gt;&lt;br /&gt;По завершении бэкапа на указанный в конфигурационном файле email адрес может отправляться отчет. Все строки в отчете начинаются с одного из трех символов: I (Info), W (Warning) и E (Error), которые отражают уровень важности данного сообщения. Info - обычные сообщения, которые несут чисто информационную нагрузку, например, "Бэкап начат в 12.32.24 16.08.2008". Warning - ошибки, которые возникают, когда не получается сделать резервную копию какого-либо файла, например, если не хватает прав доступа. Error - ошибка, которая требует вашего внимания, если в отчете есть такие ошибки, значит, что-то во время бэкапа пошло не так. Если в отчете присутствуют предупреждения и ошибки, то это будет отражено в теме сообщения. Например, тема email сообщения, не содержащего предупреждений и ошибок, будет "PyVSB backup report", а тема сообщения с ошибками - "PyVSB backup report [E]".&lt;br /&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;&lt;br /&gt;Зачастую при резервном копировании директорий оказывается, что какие-либо из них содержат файлы (директории), которые вам не хотелось бы бэкапить, например, из-за их большого размера. В таком случае очень пригодится возможность настройки фильтров на основе регулярных выражений, отсеивающих лишние файлы, или наоборот, пропускающих только те, которые подходят под описание фильтра.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Описание процесса работы с PyVSB&lt;br /&gt;&lt;br /&gt;Для создания бэкапа необходим конфигурационный файл PyVSB. Конфигурационный файл не обязательно должен быть один - их может быть неограниченное количество у каждого пользователя. Это позволяет, например, производить резервное копирование разных каталогов с разным периодом времени.&lt;br /&gt;&lt;br /&gt;PyVSB вводит следующие понятия:&lt;br /&gt;- Корневой каталог бэкапа (backup root) - директория, в которую будут записываться все файлы бэкапа.&lt;br /&gt;- Группа (backup group) - директория, находящаяся в корневой директории бэкапа и содержащая некоторое количество бэкапов.&lt;br /&gt;- Текущая группа (current group) - группа, имеющая имя current. При создании бэкапа он всегда пишется в текущую группу.&lt;br /&gt;- Элемент бэкапа (backup entry) - путь к файлу или каталогу, указанный в конфигурационном файле и подлежащий резервному копированию. &lt;br /&gt;&lt;br /&gt;Инкрементальность бэкапов поддерживается только на уровне групп, т. к. при создании бэкапа просматривается список контрольных сумм всех файлов, принадлежащим бэкапам только текущей группы.&lt;br /&gt;&lt;br /&gt;В конфигурационном файле можно задать максимальное количество бэкапов в текущей группе. Как только количество бэкапов в current группе станет равным этому числу, current группа будет переименована в группу с именем ${имя_первого_бэкапа_в_группе}_-_${имя_последнего_бэкапа_в_группе}. После этого в данную группу бэкапы больше добавляться не будут и будет создана новая current группа.&lt;br /&gt;&lt;br /&gt;Ограничение на количество бэкапов в группе необходимо задавать, если вы хотите, чтобы старые бэкапы удалялись автоматически. В конфигурационном файле можно задать максимальное количество групп, которое может быть в корневом каталоге бэкапа. При превышении этого значения старые группы будут удалены. Таким образом, если у вас будет установлено ограничение на количество бэкапов в группе и на количество групп в корневой директории бэкапа, то будут регулярно создаваться новые группы, а старые удаляться вместе со старыми бэкапами.&lt;br /&gt;&lt;br /&gt;Также ограничение на количество бэкапов в группе рекомендуется задавать по следующей причине. При создании бэкапа в памяти программы создается список со всеми уникальными файлами группы, с помощью которого реализуется возможность инкрементального бэкапа. Если каждый бэкап у вас содержит очень большое количество файлов, то чем больше бэкапов в группе, тем больше времени и оперативной памяти будет требоваться программе на создание этого списка перед началом бэкапа. &lt;br /&gt;&lt;br /&gt;Бэкапы внутри группы зависят друг от друга, если у них есть файлы с одинаковыми контрольными суммами. Группы не зависят друг от друга и могут быть удалены, или, к примеру, перемещены на другой носитель (CD, DVD).&lt;br /&gt;&lt;br /&gt;При восстановлении необходимо указать PyVSB директорию с бэкапом (${путь_к_корневой_директории_бэкапа}/${имя_группы}/${имя_бэкапа}). Данный бэкап будет восстановлен в текущую директорию.&lt;br /&gt;&lt;br /&gt;Пример конфигурационного файла с описанием всех возможных опций можно посмотреть в файле example.pyvsb.conf.&lt;br /&gt;&lt;br /&gt;Для получения информации о работе с программой выполните команду pyvsb --help.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Описание принципа работы PyVSB (не обязательно к прочтению)&lt;br /&gt;&lt;br /&gt;При разработке PyVSB делался акцент на то, чтобы сделать структуру корневой директории бэкапа максимально простой и не использовать каких-либо собственных форматов файлов. PyVSB использует только текстовые файлы (для хранения управляющей информации), и *.tar файлы (для хранения данных бэкапа). Для экономии места данные файлы сжимаются алгоритмами gz, bz2 и 7z (в зависимости от настроек).&lt;br /&gt;&lt;br /&gt;Структура корневой директории бэкапа предельно проста:&lt;br /&gt;&lt;pre&gt;${backup_root}&lt;br /&gt;|&lt;br /&gt;|-- ${group_1}&lt;br /&gt;|   |&lt;br /&gt;|   |-- ${backup_1}&lt;br /&gt;|   |   |-- data{.tar,.tar.gz,.tar.bz2,.tar.7z}&lt;br /&gt;|   |   |-- extern_files.bz2&lt;br /&gt;|   |   |-- log.bz2&lt;br /&gt;|   |   `-- unique_files.bz2&lt;br /&gt;|   |&lt;br /&gt;|   `-- ${backup_2}&lt;br /&gt;|       |-- data{.tar,.tar.gz,.tar.bz2,.tar.7z}&lt;br /&gt;|       |-- extern_files.bz2&lt;br /&gt;|       |-- log.bz2&lt;br /&gt;|       `-- unique_files.bz2&lt;br /&gt;|&lt;br /&gt;`-- ${group_2}&lt;br /&gt;    |&lt;br /&gt;    |-- ${backup_1}&lt;br /&gt;    |   |-- data{.tar,.tar.gz,.tar.bz2,.tar.7z}&lt;br /&gt;    |   |-- extern_files.bz2&lt;br /&gt;    |   |-- log.bz2&lt;br /&gt;    |   `-- unique_files.bz2&lt;br /&gt; |&lt;br /&gt;    `-- ${backup_2}&lt;br /&gt;        |-- data{.tar,.tar.gz,.tar.bz2,.tar.7z}&lt;br /&gt;        |-- extern_files.bz2&lt;br /&gt;        |-- log.bz2&lt;br /&gt;        `-- unique_files.bz2&lt;/pre&gt;&lt;br /&gt;data{.tar,.tar.gz,.tar.bz2,.tar.7z} - архив, содержащий все сохраненные файлы бэкапа. Если при создании резервной копии файла оказывается, что в данной группе уже есть резервная копия с такой же контрольной суммой, то в данный архив файл не записывается - в него сохраняется файл с типом "жесткая ссылка", своей ссылкой указывающий на пустую строку и имеющий те же атрибуты, что и оригинальный файл. Все жесткие ссылки записываются в архив и впоследствии восстанавливаются как обычные файлы.&lt;br /&gt;&lt;br /&gt;extern_files.bz2 - список файлов, которые не были добавлены в архив из-за того, что в текущей группе уже существовали резервные копии с такими контрольными суммами. Список содержит контрольную сумму файла и путь к файлу.&lt;br /&gt;&lt;br /&gt;log.bz2 - содержит все сообщения, которые выводились PyVSB в процессе бэкапа. Не несет никакой полезной нагрузки с точки зрения последующих бэкапов или восстановления - создается исключительно для пользователя и может быть удален.&lt;br /&gt;&lt;br /&gt;unique_files.bz2 - список файлов, содержащихся в архиве с их контрольными суммами.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;При восстановлении PyVSB считывает unique_files.bz2 из всех бэкапов группы и составляет список уникальных файлов группы. Далее программа распаковывает архив с данными восстанавливаемого бэкапа. Если при распаковке PyVSB натыкается на файл с типом "жесткая ссылка", то она ищет в extern_files.bz2 контрольную сумму данного файла, по контрольной сумме находит в списке уникальных файлов группы, в каком бэкапе лежит файл с данной контрольной суммой, извлекает этот файл с теми атрибутами, которые записаны в архиве восстанавливаемого бэкапа, и переходит к следующему файлу.&lt;br /&gt;&lt;br /&gt;Процедура восстановления крайне проста и, в принципе, при большом желании вы сможете осуществить ее сами, если у вас не будет при себе PyVSB, или по какой-либо причине вы не сможете ее запустить, что является несомненным плюсом.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;example.pyvsb.conf:&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;# Пример конфигурационного файла PyVSB&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Описание формата конфигурационного файла:&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# &lt;a href="http://www.voidspace.org.uk/python/configobj.html#the-config-file-format"&gt;http://www.voidspace.org.uk/python/configobj.html#the-config-file-format&lt;/a&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Путь к корневой директории бэкапа.&lt;/font&gt;&lt;br /&gt;backup_root = &lt;font color="#ff00ff"&gt;&amp;quot;/media/var_data/backup/pyvsb&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Формат архивов, в которых будут храниться файлы бэкапов.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Допустимые значения: 7z, bz2, gz, tar.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Значение по умолчанию - bz2.&lt;/font&gt;&lt;br /&gt;backup_format = &lt;font color="#ff00ff"&gt;&amp;quot;7z&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Как только количество бэкапов в текущей группе достигнет данного&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# значения, формирование current группы будет завершено.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# 0 - неограниченное количество.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Значение по умолчанию - 30.&lt;/font&gt;&lt;br /&gt;backups_per_group = 8&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Как только количество групп превысит данное значение, старые группы будут&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# удалены, так чтобы осталось groups_per_backup_root групп.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# 0 - неограниченное количество.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Значение по умолчанию - 0.&lt;/font&gt;&lt;br /&gt;groups_per_backup_root = 2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Отправлять отчеты при завершении бэкапа на email адрес.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Значение по умолчанию - no.&lt;/font&gt;&lt;br /&gt;send_email_report = yes&lt;br /&gt;&lt;font color="#0000ff"&gt;# Email, на который будут отсылаться отчеты.&lt;/font&gt;&lt;br /&gt;mail_to = &lt;font color="#ff00ff"&gt;&amp;quot;Konishchev Dmitry &amp;lt;to@mail.com&amp;gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Поле From отправляемого письма (необязательная опция, если ваша программа&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# отправки email сама заполняет это поле).&lt;/font&gt;&lt;br /&gt;mail_from = &lt;font color="#ff00ff"&gt;&amp;quot;Konishchev Dmitry &amp;lt;from@mail.com&amp;gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Программа, с помощью которой будет отправляться email сообщение.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Значение по умолчанию - &amp;quot;&amp;quot;.&lt;/font&gt;&lt;br /&gt;mail_program = &lt;font color="#ff00ff"&gt;&amp;quot;msmtp --read-recipients&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Синтаксис определения элементов бэкапа:&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# Элемент бэкапа &amp;quot;/bin&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;#&amp;nbsp;&amp;nbsp; [ &amp;quot;/bin&amp;quot; ]&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# Программа, которая будет запущена перед бэкапом данного элемента.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; start_before = &amp;quot;&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# Программа, которая будет запущена после бэкапа данного элемента.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; start_after = &amp;quot;&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# Фильтры, которые будут применены к файлам и директориям данного&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# элемента бэкапа. Каждый фильтр должен начинаться с символов &amp;quot;+&amp;quot;,&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# &amp;quot;-&amp;quot; или &amp;quot;#&amp;quot;. Все остальные символы - это регулярное выражение&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# (или комментарий в случае &amp;quot;#&amp;quot;). Синтаксис регулярных выражений -&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# &lt;a href="http://docs.python.org/lib/re-syntax.html."&gt;http://docs.python.org/lib/re-syntax.html.&lt;/a&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;#&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# Перед бэкапом файла (директории) его путь сравнивается с данными&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# регулярными выражениями. Выполняется команда первого фильтра, под&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# который подошел путь:&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;#&amp;nbsp;&amp;nbsp;&amp;quot;+&amp;quot; - сделать резервную копию&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;#&amp;nbsp;&amp;nbsp;&amp;quot;-&amp;quot; - пропустить файл (директорию)&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# Сравнение с регулярным выражением происходит не по полному пути к&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# файлу (директории), а по пути относительно данного элемента&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# бэкапа. К примеру, если элемент бэкапа - /home/user, а файл -&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# /home/user/firefox/cache, то регулярное выражение будет&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# сравниваться с user/firefox/cache.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filters = &amp;quot;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# Действие, которое будет применено к файлу, если он не подойдет ни&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# под один фильтр.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filter_default_policy = &amp;quot;+&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[ &lt;font color="#ff00ff"&gt;&amp;quot;/etc&amp;quot;&lt;/font&gt;&amp;nbsp;]&lt;br /&gt;[ &lt;font color="#ff00ff"&gt;&amp;quot;/root/scripts&amp;quot;&lt;/font&gt;&amp;nbsp;]&lt;br /&gt;[ &lt;font color="#ff00ff"&gt;&amp;quot;/var/spool/cron/crontabs&amp;quot;&lt;/font&gt;&amp;nbsp;]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[ &lt;font color="#ff00ff"&gt;&amp;quot;/home/dmitry&amp;quot;&lt;/font&gt;&amp;nbsp;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filters = &lt;font color="#ff00ff"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# Отфильтровываем директории, которые занимают много места и не&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# нуждаются в резервном копировании.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-^dmitry/.cache$&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-^dmitry/.gvfs$&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-^dmitry/.kde/share/apps/ktorrent$&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-^dmitry/.liferea&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-^dmitry/.mozilla/firefox/[^/]+/Cache$&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-^dmitry/.mozilla/plugins$&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-^dmitry/.stardict$&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-^dmitry/.thumbnails$&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-^dmitry/.VirtualBox$&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-^dmitry/.wine$&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[ &lt;font color="#ff00ff"&gt;&amp;quot;/my_files/scripts&amp;quot;&lt;/font&gt;]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[ &lt;font color="#ff00ff"&gt;&amp;quot;/my_files/other/private&amp;quot;&lt;/font&gt;&amp;nbsp;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filters = &lt;font color="#ff00ff"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# Бэкапим только /my_files/other/private/*_backup&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+^private(/[^/]+_backup(/.+){0,1}){0,1}$&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&amp;quot;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filter_default_policy = &lt;font color="#ff00ff"&gt;&amp;quot;-&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[ &lt;font color="#ff00ff"&gt;&amp;quot;/my_files/dirs_tree&amp;quot;&lt;/font&gt;&amp;nbsp;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# Если бэкапить директорию нет возможности вследствие ее большого&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# размера, то можно сохранить хотя бы список всех ее файлов и&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# каталогов, чтобы в случае повреждения можно было восстановить их по&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# именам, если эти файлы не уникальны (скачать в интернете и т. п.).&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;start_before = &lt;font color="#ff00ff"&gt;&amp;quot;tree -a --dirsfirst /my_files &amp;gt; /my_files/dirs_tree&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;start_after = &lt;font color="#ff00ff"&gt;&amp;quot;rm -f /my_files/dirs_tree&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;Напоследок вынужден предупредить, что программа практически не тестировалась, так что вполне возможно, что она содержит какие-либо ошибки (думаю, не критические), к тому же это моя первая программа на Python. Также PyVSB - не лучший выбор, если вам нужно бэкапить сотни тысяч файлов, т. к. все-таки быстродействие и требования к памяти у Python программ гораздо выше, чем у аналогичных, написанных на C/C++. Профилированием я не занимался, т. к. меня скорость ее работы вполне устраивает. Теперь дома использую только ее, через неделю-другую поставлю на работе.&lt;br /&gt;&lt;br /&gt;Если же она вас заинтересовала, то исходные тексты и deb пакет можно скачать &lt;a href="http://sourceforge.net/projects/pyvsb/"&gt;тут&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-126526961844023880?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/126526961844023880/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=126526961844023880' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/126526961844023880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/126526961844023880'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2008/08/pyvsb.html' title='PyVSB - простая в использовании система бэкапа данных'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-3938167820440626761</id><published>2008-08-12T08:46:00.006+04:00</published><updated>2008-08-12T09:14:14.582+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='горячие клавиши'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='gtkrc'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='hotkeys'/><title type='text'>Ctrl+H и другие Emacs (Bash) клавиши в GTK</title><content type='html'>Работая в Vim и Bash, я очень сильно привык к комбинации Ctrl+H, которая служит аналогом Backspace, т. к. при слепом методе набора текста на нее нажимать гораздо удобнее, нежели на Backspace. Результатом данной привычки явилось всевозрастающее неудобство при работе с GTK приложениями, которые данную комбинацию клавиш не поддерживали, хотя Qt приложения обрабатывали ее так, как надо. После довольно непродолжительных поисков в интернете нашлось решение данной проблемы.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Все, что вам необходимо сделать - это вставить в ваш ~/.gtkrc-2.0 следующую строку:&lt;pre class="my_code_box"&gt;gtk-key-theme-name = "Emacs"&lt;/pre&gt;&lt;br /&gt;Если же вы используете GNOME, то вам необходимо выполнить следующую команду:&lt;pre class="my_code_box"&gt;gconftool-2 --set /desktop/gnome/interface/gtk_key_theme Emacs --type string&lt;/pre&gt;&lt;br /&gt;После этого у вас заработают следующие комбинации клавиш:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ctrl+A&lt;/span&gt; - перейти в начало строки&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ctrl+E&lt;/span&gt; - перейти в конец строки&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ctrl+F&lt;/span&gt; - перейти вправо на один символ&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ctrl+B&lt;/span&gt; - перейти влево на один символ&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ctrl+P&lt;/span&gt; - перейти на одну строку вверх (для многострочных текстовых полей)&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ctrl+N&lt;/span&gt; - перейти на одну строку вниз (для многострочных текстовых полей)&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ctrl+K&lt;/span&gt; - удалить все символы от курсора до конца строки&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ctrl+U&lt;/span&gt; - удалить все символы в строке&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ctrl+W&lt;/span&gt; - удалить слово слева от курсора&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ctrl+H&lt;/span&gt; - удалить символ слева от курсора&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ctrl+D&lt;/span&gt; - удалить символ справа от курсора&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ctrl+Y&lt;/span&gt; - вставить текст из буфера обмена&lt;br /&gt;&lt;br /&gt;Стоит отметить, что если вы привыкли выделять весь текст в текстовом поле комбинацией Ctrl+A, то теперь она работать не будет (а точнее будет выполнять функцию перемещения курсора в начало строки). В данном случае решением может послужить комбинация Ctrl+/, выделяющая весь текст в текстовом поле (по-моему, ее использовать гораздо удобнее).&lt;br /&gt;&lt;br /&gt;Если же какие-то из приведенных выше клавиш работают не так, как бы вам этого хотелось, то вы всегда можете сами задать их поведение. Скопируйте /usr/share/themes/Emacs в ~/.themes и отредактируйте ~/.themes/Emacs/gtk-2.0-key/gtkrc - все комбинации клавиш задаются в этом файле.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2141445677437943011-3938167820440626761?l=konishchevdmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konishchevdmitry.blogspot.com/feeds/3938167820440626761/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2141445677437943011&amp;postID=3938167820440626761' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/3938167820440626761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2141445677437943011/posts/default/3938167820440626761'/><link rel='alternate' type='text/html' href='http://konishchevdmitry.blogspot.com/2008/08/ctrlh-emacs-bash-gtk.html' title='Ctrl+H и другие Emacs (Bash) клавиши в GTK'/><author><name>Конищев Дмитрий</name><uri>http://www.blogger.com/profile/15691414798569690025</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07311931891594676655'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2141445677437943011.post-4928844069086858920</id><published>2008-07-26T19:18:00.013+04:00</published><updated>2008-08-12T08:56:44.765+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ide'/><category scheme='http://www.blogger.com/atom/ns#' term='горячие клавиши'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='русская раскладка'/><category scheme='http://www.blogger.com/atom/ns#' term='hotkeys'/><title type='text'>Очередной HowTo по Vim</title><content type='html'>Ранее я уже &lt;a href="http://konishchevdmitry.blogspot.com/2007/09/vim-howto.html"&gt;выкладывал&lt;/a&gt; небольшой HowTo по Vim. Тогда я только начинал свое знакомство с ним и решил, что на начальном этапе изучения лучше руководствоваться различными tutorial'ами и HowTo, а официальную документацию пока оставить в стороне. Почему? А потому, что если вы только начинаете изучать Vim, то вы еще не знаете, что вам от него нужно - необходим определенный опыт работы, чтобы при чтении документации вы смогли бы наиболее точно оценить, какие функции будут вам полезны, а о каких можно забыть. Все команды вы все равно не запомните - уж слишком их много, поэтому приходится отсеивать только те, которыми вы действительно будете пользоваться.&lt;br /&gt;&lt;br /&gt;Поработав в Vim достаточное количество времени, чтобы понять, что мне от него нужно, я наконец-то принялся за чтение документации. Просто так ее читать бесполезно - все не запомнишь, поэтому в процессе чтения я выписывал те сочетания клавиш, которые считал для себя полезными. Конечно, даже после этого список получился довольно большой, но я его составлял не для того чтобы потом сесть и зубрить. :) Нет, это вообщем-то и не нужно. Вполне достаточно внимательно прочитать его один раз, запомнив описываемые им возможности, чтобы в последствии, когда вы в очередной раз поймаете себя на выполнении повторяющихся действий, от вас потребовалось бы только заглянуть в этот список команд и подумать, как можно сделать то же самое одной комбинацией клавиш.&lt;br /&gt;&lt;br /&gt;Подобные HowTo просто подарок судьбы для начинающих пользователей Vim'a, т. к., прочитав их и скопипастив строчки из чужих конфигов в свои, они уже смогут работать в нем, не испытывая при этом особого дискомфорта. Данный HowTo предполагает, что вы уже знаете Vim в объеме &lt;a href="http://www.vim.org/htmldoc/usr_01.html#vimtutor"&gt;Vim Tutor&lt;/a&gt;. Опытные пользователи, которые не смогли найти время для прочтения документации, также, возможно, найдут что-то полезное для себя в этой статье - я, например, к своему стыду, о командах gj и gk узнал именно из документации, но сколько же я без них мучился... :)&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Ввод команд при русской раскладке клавиатуры&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;С этой проблемой вы сталкиваетесь практически мгновенно, как только начинаете пользоваться Vim. Если у вас включена русская раскладка клавиатуры, то сразу же перестают работать все командные клавиши (т. е., например, при нажатии на dd в Normal режиме строка не удаляется, когда у вас включена русская раскладка клавиатуры). Переключаться на английскую раскладку только для того, чтобы ввести какую-нибудь команду - слишком большая трата времени, да и довольно утомительное занятие.&lt;br /&gt;&lt;br /&gt;Я нашел два способа решения этой проблемы. Каждый из них имеет свои недостатки и преимущества, так что, какой из них использовать - выбирать вам.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Первый способ&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Первый способ заключается в том, что вы вставляете в свой ~/.vimrc следующие строки:&lt;pre class="my_code_box"&gt;&lt;font face="monospace" color="#000000"&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ё&amp;nbsp;`&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;й&amp;nbsp;q&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ц&amp;nbsp;w&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;у&amp;nbsp;e&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;к&amp;nbsp;r&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;е&amp;nbsp;t&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;н&amp;nbsp;y&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;г&amp;nbsp;u&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ш&amp;nbsp;i&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;щ&amp;nbsp;o&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;з&amp;nbsp;p&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;х&amp;nbsp;[&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ъ&amp;nbsp;]&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ф&amp;nbsp;a&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ы&amp;nbsp;s&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;в&amp;nbsp;d&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;а&amp;nbsp;f&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;п&amp;nbsp;g&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;р&amp;nbsp;h&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;о&amp;nbsp;j&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;л&amp;nbsp;k&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;д&amp;nbsp;l&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ж&amp;nbsp;;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;э&amp;nbsp;'&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;я&amp;nbsp;z&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ч&amp;nbsp;x&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;с&amp;nbsp;c&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;м&amp;nbsp;v&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;и&amp;nbsp;b&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;т&amp;nbsp;n&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ь&amp;nbsp;m&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;б&amp;nbsp;,&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;ю&amp;nbsp;.&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;.&amp;nbsp;/&lt;br /&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Ё&amp;nbsp;~&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Й&amp;nbsp;Q&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Ц&amp;nbsp;W&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;У&amp;nbsp;E&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;К&amp;nbsp;R&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Е&amp;nbsp;T&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Н&amp;nbsp;Y&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Г&amp;nbsp;U&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Ш&amp;nbsp;I&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Щ&amp;nbsp;O&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;З&amp;nbsp;P&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Х&amp;nbsp;{&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Ъ&amp;nbsp;}&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Ф&amp;nbsp;A&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Ы&amp;nbsp;S&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;В&amp;nbsp;D&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;А&amp;nbsp;F&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;П&amp;nbsp;G&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Р&amp;nbsp;H&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;О&amp;nbsp;J&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Л&amp;nbsp;K&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Д&amp;nbsp;L&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Ж&amp;nbsp;:&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Э&amp;nbsp;&amp;quot;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Я&amp;nbsp;Z&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Ч&amp;nbsp;X&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;С&amp;nbsp;C&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;М&amp;nbsp;V&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;И&amp;nbsp;B&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Т&amp;nbsp;N&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Ь&amp;nbsp;M&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Б&amp;nbsp;&amp;lt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;Ю&amp;nbsp;&amp;gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;,&amp;nbsp;?&lt;br /&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;;&amp;nbsp;$&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;Эти команды просто создают привязки русских клавиш к английским. Недостаток данного метода в том, что после вставки этих строк работают не все команды. Например, команды фолдинга (za, zM и т. п.) не работают. Это можно исправить, добавив привязки яф -&amp;#62; za и яЬ -&amp;#62; zM, но не будете же вы делать так для каждой команды, которую вы используете... К тому же это - костыль. Причем костыль довольно плохой - в данных командах я привязываю не только русские символы к английским, но и такие символы как, например, ; -&amp;#62; $, что уже очень не хорошо.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Второй способ&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Данный способ более естественный для Vim. Вы добавляете в ~/.vimrc строки&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;&amp;quot; Настраиваем переключение раскладок клавиатуры по &amp;lt;C-^&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;keymap&lt;/font&gt;=russian-jcukenwin&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Раскладка по умолчанию - английская&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;iminsert&lt;/font&gt;=0&lt;/font&gt;&lt;/pre&gt;и теперь можете переключаться между раскладками комбинацией клавиш &amp;#60;C-^&amp;#62;. При таком способе все команды работают идеально. Недостаток очевиден - необходимо использовать комбинацию клавиш для переключения раскладки, отличную от используемой в остальных приложениях.&lt;br /&gt;&lt;br /&gt;Я довольно долго использовал первый способ, но как только узнал о втором, стал использовать его. Я переназначил переключение раскладок на комбинацию &amp;#60;C-F&amp;#62; и добавил индикацию выбранной в данный момент раскладки путем изменения цвета статусной строки текущего окна (см. мой ~/.vimrc далее) - на мой взгляд, получилось очень даже не плохо. К &amp;#60;C-F&amp;#62; я привык на удивление быстро и теперь никак не нарадуюсь. :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Использование различных настроек для разных типов файлов&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vim предоставляет очень полезную возможность задавать для различных типов файлов собственные настройки. К примеру, благодаря этой возможности, Vim выбирает, каким образом подсвечивать синтаксис открытого в данный момент файла.&lt;br /&gt;&lt;br /&gt;Настройки для каждого файла хранятся в директории ~/.vim/ftplugin. Vim определяет абсолютное большинство всевозможных форматов файлов, но если вдруг ему это не удалось, то можно задать собственное правило для определения нужного вам формата.&lt;br /&gt;&lt;br /&gt;Посмотреть тип, который Vim назначил открытому в данный момент файлу, можно командой :set filetype. К примеру, если вы откроете *.c файл, то Vim выдаст filetype=c.&lt;br /&gt;&lt;br /&gt;Когда вы открываете в Vim, например, файл *.py, содержащий программу, написанную на Python, он ищет в ~/.vim/ftplugin файл python.vim и директорию python. Если они присутствуют, то Vim загружает файл ~/.vim/ftplugin/python.vim и все *.vim файлы в директории ~/.vim/ftplugin/python.&lt;br /&gt;&lt;br /&gt;У меня директория ~/.vim/ftplugin имеет следующий вид:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;~/.vim/ftplugin&lt;br /&gt;|-- awk.vim -&amp;#62; ../develop.vim&lt;br /&gt;|-- c.vim -&amp;#62; ../develop.vim&lt;br /&gt;|-- cpp.vim -&amp;#62; ../develop.vim&lt;br /&gt;|-- js.vim -&amp;#62; ../develop.vim&lt;br /&gt;|-- make.vim -&amp;#62; ../develop.vim&lt;br /&gt;|-- php.vim -&amp;#62; ../develop.vim&lt;br /&gt;|-- python&lt;br /&gt;|   |-- custom_settings.vim&lt;br /&gt;|   `-- python_folding.vim&lt;br /&gt;|-- python.vim -&amp;#62; ../develop.vim&lt;br /&gt;|-- sed.vim -&amp;#62; ../develop.vim&lt;br /&gt;|-- sh.vim -&amp;#62; ../develop.vim&lt;br /&gt;|-- sql.vim -&amp;#62; ../develop.vim&lt;br /&gt;`-- vim.vim -&amp;#62; ../develop.vim&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Как вы видите, у меня для всех форматов файлов, имеющих какое-либо отношение к программированию, есть свой конфигурационный файл в ~/.vim/ftplugin, причем в качестве этого файла выступает символическая ссылка на ~/.vim/develop.vim, который содержит настройки, общие для файлов, содержащих какой-либо код.&lt;br /&gt;&lt;br /&gt;Для Python'овских файлов у меня также предусмотрены дополнительные настройки в виде конфигурационных файлов ~/.vim/ftplugin/python/custom_settings.vim и ~/.vim/ftplugin/python/python_folding.vim.&lt;br /&gt;&lt;br /&gt;~/.vim/ftplugin/python/python_folding.vim - это плагин, обеспечивающий свертку блоков кода. Содержимое файлов ~/.vim/develop.vim и ~/.vim/ftplugin/python/custom_settings.vim я приведу ниже в разделе &amp;#34;Конфигурационные файлы&amp;#34;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Использование Vim в качестве IDE (среды разработки)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Для этого у меня написан небольшой скрипт:&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;#!/bin/bash&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;#&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;# Скрипт запуска среды разработки Vim&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;#&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;[[&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;$#&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;!=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;]]&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;then&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;zenity --title &lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;Vim IDE usage error&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;--error --text &lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;Usage: vim_ide /path/to/project/dir.&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;exit&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;fi&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;[[&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;!&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;-e&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;$1&lt;/font&gt;&lt;font color="#ff00ff"&gt;/.vim/ide.vim&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;]]&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;then&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;zenity --title &lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;Vim IDE usage error&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;--error --text &lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;'&lt;/font&gt;&lt;font color="#a020f0"&gt;$1&lt;/font&gt;&lt;font color="#ff00ff"&gt;' is not a Vim IDE project directory.&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;exit&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;fi&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;cd&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;$1&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;||&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;{&lt;/font&gt;&amp;nbsp;zenity --title &lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;Vim IDE usage error&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;--error --text &lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;Can't change current directory to Vim IDE project directory '&lt;/font&gt;&lt;font color="#a020f0"&gt;$1&lt;/font&gt;&lt;font color="#ff00ff"&gt;'.&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;quot;;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;exit&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;gvim &lt;font color="#6a5acd"&gt;--class=IDE&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;-S&lt;/font&gt;&amp;nbsp;.vim/ide.vim&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;Данному скрипту в качестве аргумента я передаю путь к каталогу с проектом. Вся работа скрипта сводится к переходу в каталог проекта и запуску в нем Vim'а с классом окна 'IDE' и подгруженным дополнительным конфигурационным файлом ${путь к каталогу с проектом}/.vim/ide.vim.&lt;br /&gt;&lt;br /&gt;Класс окна нужен для того, чтобы оконный менеджер в соответствии с заданными мной настройками развернул окно Vim'а на весь экран (никаких панелей инструментов, заголовков окон, меню и т. п. - только код программы и больше ничего :) ). Как отключить панель инструментов и меню, вы можете посмотреть в моем ~/.gvimrc (будет приведен в разделе &amp;#34;Конфигурационные файлы&amp;#34;).&lt;br /&gt;&lt;br /&gt;В директории каждого моего проекта лежит файл .vim/ide.vim, который задает все специфические настройки для данного проекта, такие как правила сборки или правила генерации ctags. В ~/.vimrc у меня назначена горячая клавиша для обновления ctags. Каждый проект задает собственную функцию для их обновления. Например, для C проекта у меня в make файле есть специальная цель vim, которая с помощью gcc получает все зависимости исходных текстов от заголовочных файлов и генерирует ctags только для файлов с исходным кодом проекта и подключаемых ими заголовочных файлов (а не для всего /usr/include :) ). Также эта цель просматривает только что сгенерированные тэги и при помощи awk и sed вытаскивает из них все typedef'ы, формируя из полученной информации файл с правилами подсветки синтаксиса для текущего проекта, который подгружается в .vim/ide.vim при запуске vim_ide.&lt;br /&gt;&lt;br /&gt;Кроме того .vim/ide.vim при закрытии Vim сохраняет текущую сессию, а при запуске восстанавливает сохраненную. Таким образом, придя утром на работу, я открываю свой Vim IDE, а он устанавливает все буферы, табы, окна и их размеры такими, какими они были вчера при закрытии Vim'а.&lt;br /&gt;&lt;br /&gt;Рекомендую не пожалеть времени и сделать нечто подобное для каждого проекта - потом затраченное время окупится удобством работы. &lt;br /&gt;&lt;br /&gt;Так, к примеру, выглядят мои ide.vim:&lt;br /&gt;&lt;br /&gt;Для Python проекта:&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;&amp;quot; Конфигурационный файл Vim IDE&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Запрещаем восстановление настроек из сессии,&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; т. к. тогда при изменении ~/.vimrc даже после&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; перезагрузки IDE новые настройки не будут&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; вступать в силу.&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;sessionoptions&lt;/font&gt;-=options&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Настраиваем работу с ctags --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;tags&lt;/font&gt;+=.vim/ctags&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MyUpdateIdeCtags&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;silent&lt;/b&gt;&lt;/font&gt;&amp;nbsp;!ctags&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;--&lt;/b&gt;&lt;/font&gt;languages&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;Python&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;f&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;vim&lt;/b&gt;&lt;/font&gt;/ctags&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/font&gt;R&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MyUpdateCtagsFunction&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;MyUpdateIdeCtags&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Настраиваем работу с ctags &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Обновляем базу ctags при старте IDE&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;call&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;{&lt;/font&gt;MyUpdateCtagsFunction&lt;font color="#6a5acd"&gt;}&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; При сохранении любого *.py файла обновляем базу ctags&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;au&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;BufWritePost&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*.py&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;call&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;{&lt;/font&gt;MyUpdateCtagsFunction&lt;font color="#6a5acd"&gt;}&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; При закрытии Vim'а сохраняем информацию о текущей сессии&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;au&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;VimLeave&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;mksession&lt;/b&gt;&lt;/font&gt;! &lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;vim&lt;/b&gt;&lt;/font&gt;/ide&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;session&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Загружаем ранее сохраненную сессию --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;getfsize&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;.vim/ide.session&amp;quot;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;0&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;source&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;vim&lt;/b&gt;&lt;/font&gt;/ide&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;session&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Загружаем ранее сохраненную сессию &amp;lt;--&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Для C проекта:&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;&amp;quot; Конфигурационный файл Vim IDE&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Запрещаем восстановление настроек из сессии,&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; т. к. тогда при изменении ~/.vimrc даже после&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; перезагрузки IDE новые настройки не будут&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; вступать в силу.&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;sessionoptions&lt;/font&gt;-=options&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Добавляем пути к библиотекам&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;path&lt;/font&gt;+=/usr/include/gtk-2.0&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;path&lt;/font&gt;+=./netlog&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Устанавливает правила синтаксиса, специфичные для данного проекта.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MySetIdeSyntax&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;getfsize&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;.vim/syntax.vim&amp;quot;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;0&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;source&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;vim&lt;/b&gt;&lt;/font&gt;/&lt;font color="#a52a2a"&gt;&lt;b&gt;syntax&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;vim&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Настраиваем работу с ctags --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;tags&lt;/font&gt;=.vim/ctags&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MyUpdateIdeCtags&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;!&lt;font color="#a52a2a"&gt;&lt;b&gt;make&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;vim&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MyUpdateCtagsFunction&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;MyUpdateIdeCtags&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Настраиваем работу с ctags &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Обновляем базу ctags при старте IDE&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;call&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;{&lt;/font&gt;MyUpdateCtagsFunction&lt;font color="#6a5acd"&gt;}&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; При открытии нового буфера устанавливаем для него&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; правила синтаксиса, специфичные для данного проекта.&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;au&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;BufReadPost&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;call&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MySetIdeSyntax&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; При закрытии Vim'а сохраняем информацию о текущей сессии&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;au&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;VimLeave&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;mksession&lt;/b&gt;&lt;/font&gt;! &lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;vim&lt;/b&gt;&lt;/font&gt;/ide&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;session&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Загружаем ранее сохраненную сессию --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;getfsize&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;.vim/ide.session&amp;quot;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;0&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;source&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;vim&lt;/b&gt;&lt;/font&gt;/ide&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;session&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Загружаем ранее сохраненную сессию &amp;lt;--&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Конфигурационные файлы&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Далее я приведу свои конфигурационные файлы, о которых шла речь выше. Все настройки в них достаточно подробно описаны, так что, думаю, дополнительных разъяснений не потребуется, а если все-таки потребуются - добро пожаловать в Vim Help или в комментарии к статье.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;~/.vimrc:&lt;/span&gt;&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;&amp;quot; Включаем мышку даже в текстовом режиме&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; (очень удобно при копировании из терминала, т. к. без этой опции,&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; например, символы табуляции раскладываются в кучу пробелов).&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;mouse&lt;/font&gt;=a&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Минимальная высота окна&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;winminheight&lt;/font&gt;=0&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Минимальная ширина окна&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;winminwidth&lt;/font&gt;=0&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Всегда отображать статусную строку для каждого окна&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;laststatus&lt;/font&gt;=2&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Опции автодополнения - включаем только меню с доступными вариантами&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; автодополнения (также, например, для omni completion может быть&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; окно предварительного просмотра).&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;completeopt&lt;/font&gt;=menu&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Размер табуляции&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;tabstop&lt;/font&gt;=4&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Размер сдвига при нажатии на клавиши &amp;lt;&amp;lt; и &amp;gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;shiftwidth&lt;/font&gt;=4&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Копирует отступ от предыдущей строки&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;autoindent&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Включаем 'умную' автоматическую расстановку отступов&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;smartindent&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Включаем подсветку синтаксиса&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;syntax&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;on&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Включаем перенос строк&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;wrap&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Перенос строк по словам, а не по буквам&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;linebreak&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Включаем отображение выполняемой в данный момент команды в правом нижнем углу экрана.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; К примеру, если вы наберете 2d, то в правом нижнем углу экрана Vim отобразит строку 2d.&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;showcmd&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Включаем отображение дополнительной информации в статусной строке&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;statusline&lt;/font&gt;=%&amp;lt;%f%h%m%r%=format=%{&amp;amp;fileformat}\ file=%{&amp;amp;fileencoding}\ enc=%{&amp;amp;encoding}\ %b\ 0x%B\ %l&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;%c%V\ %P&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Включаем подсветку выражения, которое ищется в тексте&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;hlsearch&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; При поиске перескакивать на найденный текст в процессе набора строки&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;incsearch&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Останавливать поиск при достижении конца файла&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;nowrapscan&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Игнорировать регистр букв при поиске&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;ignorecase&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Отключаем создание бэкапов&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;nobackup&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Отключаем создание swap файлов&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;noswapfile&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot;&amp;quot; Все swap файлы будут помещаться в эту папку&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot;set dir=~/.vim/swp&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot;&amp;quot; Размер истории для отмены&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot;set undolevels=1000&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Список кодировок файлов для автоопределения&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;fileencodings&lt;/font&gt;=utf-8&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;cp1251&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;koi8-r&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;cp866&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Включает виртуальный звонок (моргает, а не бибикает при ошибках)&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;visualbell&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Перемещать курсор на следующую строку при нажатии на клавиши вправо-влево и пр.&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;whichwrap&lt;/font&gt;=b&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;s&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;,&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;[&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;]&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;l&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;h&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Метод фолдинга - вручную (для обычных файлов)&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;foldmethod&lt;/font&gt;=manual&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Настраиваем переключение раскладок клавиатуры по &amp;lt;C-^&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;keymap&lt;/font&gt;=russian-jcukenwin&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Раскладка по умолчанию - английская&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;iminsert&lt;/font&gt;=0&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Необходимо установить для того, чтобы *.h файлам&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; присваивался тип c, а не cpp.&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;c_syntax_for_h&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Просмотр нетекстовых файлов в Vim --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;au&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;BufReadPost&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*.pdf&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;silent&lt;/b&gt;&lt;/font&gt;&amp;nbsp;%!pdftotext&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/font&gt;nopgbrk&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;%&amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/font&gt;&amp;nbsp;|fmt&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/font&gt;csw78&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;au&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;BufReadPost&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*.doc&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;silent&lt;/b&gt;&lt;/font&gt;&amp;nbsp;%!antiword&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;%&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;au&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;BufReadPost&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*.odt&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;silent&lt;/b&gt;&lt;/font&gt;&amp;nbsp;%!odt2txt&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;%&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Просмотр нетекстовых файлов в Vim &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Горячие клавиши --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Ускоренное передвижение по тексту&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-H&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;5h&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-J&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;5j&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-K&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;5k&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-L&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;5l&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Клавиши быстрого редактирования строки в режиме вставки&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; и в режиме редактирования командной строки.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;imap &amp;lt;C-H&amp;gt; &amp;lt;BS&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;imap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-J&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Left&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;imap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-K&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Right&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;imap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-L&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Del&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;cmap &amp;lt;C-H&amp;gt; &amp;lt;BS&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;cmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-J&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Left&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;cmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-K&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Right&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;cmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-L&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Del&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Стрелки для комментариев&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;-&amp;nbsp;$a --&amp;gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;=&amp;nbsp;$a &amp;lt;--&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Запуск/сокрытие плагина Winmanager&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F1&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:WMToggle&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;imap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F1&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:WMToggle&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;vmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F1&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:WMToggle&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Запуск/сокрытие плагина Tag List&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F2&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:TlistToggle&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;imap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F2&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:TlistToggle&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;vmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F2&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:TlistToggle&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Очистить подсветку последнего найденного выражения&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F3&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:nohlsearch&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;imap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F3&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:nohlsearch&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;vmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F3&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:nohlsearch&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;gv&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Сохранить файл&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F4&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:w!&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;imap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F4&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:w!&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;vmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F4&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:w!&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Закрыть VIM&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F5&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:q&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;imap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F5&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:q&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;vmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F5&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:q&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Более привычные Page Up/Down, когда курсор остаётся в той же строке,&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; а не переносится вверх/вниз экрана, как при стандартном PgUp/PgDown.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Поскольку по умолчанию прокрутка по C-U/D происходит на полэкрана,&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; привязка делается к двойному нажатию этих комбинаций.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;PageUp&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-U&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-U&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;imap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;PageUp&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-O&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-U&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-O&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-U&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;PageDown&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-D&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-D&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;imap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;PageDown&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-O&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-D&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-O&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-D&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Переключение раскладок и индикация выбранной&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; в данный момент раскладки.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Переключение раскладок будет производиться по &amp;lt;C-F&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; При английской раскладке статусная строка текущего окна будет синего&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; цвета, а при русской - зеленого.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MyKeyMapHighlight&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;amp;iminsert&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;0&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;hi&lt;/b&gt;&lt;/font&gt;&amp;nbsp;StatusLine&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;ctermfg&lt;/b&gt;&lt;/font&gt;=DarkBlue&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;guifg&lt;/b&gt;&lt;/font&gt;=DarkBlue&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;hi&lt;/b&gt;&lt;/font&gt;&amp;nbsp;StatusLine&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;ctermfg&lt;/b&gt;&lt;/font&gt;=DarkGreen&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;guifg&lt;/b&gt;&lt;/font&gt;=DarkGreen&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Вызываем функцию, чтобы она установила цвета при запуске Vim'a&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;call&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MyKeyMapHighlight&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; При изменении активного окна будет выполняться обновление&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; индикации текущей раскладки&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;au&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#2e8b57"&gt;&lt;b&gt;WinEnter&lt;/b&gt;&lt;/font&gt;&amp;nbsp;*&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;call&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MyKeyMapHighlight&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;cmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;silent&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-F&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-^&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;imap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;silent&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-F&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-^&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;X&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:call MyKeyMapHighlight()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;a&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-H&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;silent&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-F&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;a&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-^&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:call MyKeyMapHighlight()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;vmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;silent&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-F&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;a&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-^&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Esc&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:call MyKeyMapHighlight()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;gv&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Omni completion&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;inoremap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-B&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-X&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-O&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Горячие клавиши &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Меню --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Включение автоматического разбиения строки на несколько&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; строк фиксированной длины&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Textwidth.off&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;textwidth=0&amp;lt;CR&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Textwidth.on&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;textwidth=75&amp;lt;CR&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Проверка орфографии --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;version&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;700&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; По умолчанию проверка орфографии выключена.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;spell&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;spelllang&lt;/font&gt;=&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;nospell&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Spell.off&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;spell&lt;/b&gt;&lt;/font&gt;&amp;nbsp;spelllang=&amp;lt;CR&amp;gt;:&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;nospell&amp;lt;CR&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Spell.Russian+English&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;spell&lt;/b&gt;&lt;/font&gt;&amp;nbsp;spelllang=&lt;font color="#a52a2a"&gt;&lt;b&gt;ru&lt;/b&gt;&lt;/font&gt;,&lt;font color="#a52a2a"&gt;&lt;b&gt;en&lt;/b&gt;&lt;/font&gt;&amp;lt;CR&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Spell.Russian&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;spell&lt;/b&gt;&lt;/font&gt;&amp;nbsp;spelllang=&lt;font color="#a52a2a"&gt;&lt;b&gt;ru&lt;/b&gt;&lt;/font&gt;&amp;lt;CR&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Spell.English&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;spell&lt;/b&gt;&lt;/font&gt;&amp;nbsp;spelllang=&lt;font color="#a52a2a"&gt;&lt;b&gt;en&lt;/b&gt;&lt;/font&gt;&amp;lt;CR&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Spell.-SpellControl-&lt;/font&gt;&amp;nbsp;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Spell.Word&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;Suggest&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;z=&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;z=&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Spell.Add&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;To&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;Dictionary&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;zg&lt;/font&gt;&amp;nbsp;zg&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Spell.Add&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;To&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;TemporaryDictionary&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;zG&lt;/font&gt;&amp;nbsp;zG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Spell.Remove&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;From&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;Dictionary&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;zw&lt;/font&gt;&amp;nbsp;zw&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Spell.Remove&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;From&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;Temporary&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;Dictionary&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;zW&lt;/font&gt;&amp;nbsp;zW&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Spell.Previous&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;Wrong&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;Word&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;[s&lt;/font&gt;&amp;nbsp;[s&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Spell.Next&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;Wrong&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;Word&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;]s&lt;/font&gt;&amp;nbsp;]s&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Проверка орфографии &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Обертка для :make --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MyMake&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Для *.py файлов не открываем новые вкладки,&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; а просто компилируем текущий файл.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;amp;&lt;font color="#a52a2a"&gt;&lt;b&gt;filetype&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;python&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;write&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;make&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;old_tab_num&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;tabpagenr&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Создаем новую вкладку&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;tabe&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Помещаем ее в конец&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;tabm&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;old_buflist&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;tabpagebuflist&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;tabpagenr&lt;font color="#a52a2a"&gt;&lt;b&gt;())&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;make&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;buflist&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;tabpagebuflist&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;tabpagenr&lt;font color="#a52a2a"&gt;&lt;b&gt;())&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Если список буферов не изменился, значит, компиляция прошла&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; успешно и можно закрыть только что созданную вкладку - она нам&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; не понадобилась.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;old_buflist&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;buflist&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;tabc&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;execute&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;'tabn '&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;old_tab_num&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Иначе файл с ошибкой откроется в этой вкладке.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Раскрываем все складки&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;foldlevel&lt;/font&gt;=9999&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;,m&amp;nbsp;:call MyMake()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;,w&amp;nbsp;:cwindow&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;,n&amp;nbsp;:cnext&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;,p&amp;nbsp;:cprevious&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;,l&amp;nbsp;:clist&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Make.Make&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;,m&lt;/font&gt;&amp;nbsp;,&lt;font color="#a52a2a"&gt;&lt;b&gt;m&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Make.Make&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;Window&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;,w&lt;/font&gt;&amp;nbsp;,&lt;font color="#a52a2a"&gt;&lt;b&gt;w&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Make.Next&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;Error&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;,n&lt;/font&gt;&amp;nbsp;,&lt;font color="#a52a2a"&gt;&lt;b&gt;n&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Make.Previous&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;Error&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;,p&lt;/font&gt;&amp;nbsp;,&lt;font color="#a52a2a"&gt;&lt;b&gt;p&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Make.Errors&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;List&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#a020f0"&gt;,l&lt;/font&gt;&amp;nbsp;,&lt;font color="#a52a2a"&gt;&lt;b&gt;l&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Обертка для :make &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Обновление ctags --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MyUpdateCtags&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;echo&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;Update ctags function is not setted.&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MyUpdateCtagsFunction&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;MyUpdateCtags&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F11&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:call {MyUpdateCtagsFunction}()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;ctags.Update&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F11&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F11&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Обновление ctags &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Блог --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Преобразование открытого в данный момент файла в HTML код для&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; последующей вставки в блог.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MyConvertFileToHtmlForBlog&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;runtime&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;syntax&lt;/b&gt;&lt;/font&gt;/&lt;font color="#ff00ff"&gt;2&lt;/font&gt;html&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;vim&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ff00ff"&gt;%&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;s&lt;/b&gt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;/&lt;/font&gt;&amp;lt;br&amp;gt;$&lt;font color="#6a5acd"&gt;//&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ff00ff"&gt;%&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;s&lt;/b&gt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;/&lt;/font&gt;\_^\_.*&amp;lt;body[^&amp;gt;]*&amp;gt;&amp;lt;font[^&amp;gt;]*&amp;gt;\_\s*&lt;font color="#6a5acd"&gt;/&lt;/font&gt;&amp;lt;pre class=&amp;quot;my_code_box&amp;quot;&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&lt;font color="#6a5acd"&gt;/&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ff00ff"&gt;%&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;s&lt;/b&gt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;/&lt;/font&gt;\_\s*&amp;lt;\/font&amp;gt;&amp;lt;\/body&amp;gt;\_.*&lt;font color="#6a5acd"&gt;/&lt;/font&gt;&amp;lt;\/font&amp;gt;&amp;lt;\/pre&amp;gt;&lt;font color="#6a5acd"&gt;/&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Blog.Convert&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;file&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;to&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;HTML&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;for&lt;/font&gt;&lt;font color="#a020f0"&gt;\ &lt;/font&gt;&lt;font color="#a020f0"&gt;blog&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;silent&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;call&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MyConvertFileToHtmlForBlog()&amp;lt;CR&amp;gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Блог &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Меню Encoding --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Выбор кодировки, в которой читать файл --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;wildmenu&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;wcm&lt;/font&gt;=&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Encoding.Read.utf-8&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;e&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;++&lt;/b&gt;&lt;/font&gt;enc&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;utf8&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Encoding.Read.windows-1251&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;e&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;++&lt;/b&gt;&lt;/font&gt;enc&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;cp1251&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Encoding.Read.koi8-r&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;e&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;++&lt;/b&gt;&lt;/font&gt;enc&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;koi8&lt;font color="#a52a2a"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;r&lt;/b&gt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Encoding.Read.cp866&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;e&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;++&lt;/b&gt;&lt;/font&gt;enc&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;cp866&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:emenu Encoding.Read.&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;TAB&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Выбор кодировки, в которой читать файл &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Выбор кодировки, в которой сохранять файл --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;wildmenu&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;wcm&lt;/font&gt;=&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Encoding.Write.utf-8&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;S-F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;fenc&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;utf8&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Encoding.Write.windows-1251&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;S-F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;fenc&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;cp1251&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Encoding.Write.koi8-r&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;S-F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;fenc&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;koi8&lt;font color="#a52a2a"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;r&lt;/b&gt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Encoding.Write.cp866&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;S-F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;fenc&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;cp866&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;S-F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:emenu Encoding.Write.&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;TAB&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Выбор кодировки, в которой сохранять файл &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Выбор формата концов строк (dos - &amp;lt;CR&amp;gt;&amp;lt;NL&amp;gt;, unix - &amp;lt;NL&amp;gt;, mac - &amp;lt;CR&amp;gt;) --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;wildmenu&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;wcm&lt;/font&gt;=&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Encoding.End_line_format.unix&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;fileformat&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;unix&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Encoding.End_line_format.dos&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;fileformat&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;dos&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Encoding.End_line_format.mac&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;fileformat&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;mac&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-F7&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:emenu Encoding.End_line_format.&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;TAB&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Выбор формата концов строк (dos - &amp;lt;CR&amp;gt;&amp;lt;NL&amp;gt;, unix - &amp;lt;NL&amp;gt;, mac - &amp;lt;CR&amp;gt;) &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Меню Encoding &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Перевод слов при помощи консольной версии StarDict --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! TranslateWord&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s:dict&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;sdcv&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s:phrase&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;expand&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;&amp;lt;cword&amp;gt;&amp;quot;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s:tmpfile&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;tempname&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;silent&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;execute&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;!&amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s:dict&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot; &amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s:phrase&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot; &amp;gt; &amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s:tmpfile&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s:lines&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;system&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;wc -l &amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s:tmpfile &lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;| awk '{print $1}'&amp;quot;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s:lines&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;0&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;echo&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s:phrase . &lt;font color="#ff00ff"&gt;&amp;quot;: Not found.&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;execute&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;botright sp &amp;quot;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s:tmpfile&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfun&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F9&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:call TranslateWord()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;menu&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;Translate.Translate_word&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;Tab&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F9&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:&lt;font color="#a52a2a"&gt;&lt;b&gt;call&lt;/b&gt;&lt;/font&gt;&amp;nbsp;TranslateWord&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Перевод слов при помощи консольной версии StarDict &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Меню &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Задаем собственные функции для назначения имен заголовкам табов --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MyTabLine&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;tabline&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;''&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Формируем tabline для каждой вкладки --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;i&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;range&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;tabpagenr&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;'$'&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;))&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Подсвечиваем заголовок выбранной в данный момент вкладки.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;i&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;tabpagenr&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;tabline&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;'%#TabLineSel#'&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;tabline&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;'%#TabLine#'&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Устанавливаем номер вкладки&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;tabline&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;'%'&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;i &lt;font color="#a52a2a"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;'T'&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Получаем имя вкладки&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;tabline&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;' %{MyTabLabel('&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;i &lt;font color="#a52a2a"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;')} |'&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfor&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Формируем tabline для каждой вкладки &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Заполняем лишнее пространство&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;tabline&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;'%#TabLineFill#%T'&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Выровненная по правому краю кнопка закрытия вкладки&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;tabpagenr&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;'$'&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;tabline&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;'%=%#TabLine#%999XX'&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;tabline&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MyTabLabel&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;n&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;label&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;''&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;buflist&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;tabpagebuflist&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;a:n&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Имя файла и номер вкладки --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;label&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;substitute&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;bufname&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;buflist[tabpagewinnr&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;a:n&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;]&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;, &lt;font color="#ff00ff"&gt;'.*/'&lt;/font&gt;, &lt;font color="#ff00ff"&gt;''&lt;/font&gt;, &lt;font color="#ff00ff"&gt;''&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;label&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;''&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;label&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;'[No Name]'&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;label&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;' ('&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;a:n&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;')'&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Имя файла и номер вкладки &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Определяем, есть ли во вкладке хотя бы один&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; модифицированный буфер.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;i&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;range&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;len&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;buflist&lt;font color="#a52a2a"&gt;&lt;b&gt;))&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;getbufvar&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;buflist[i], &lt;font color="#ff00ff"&gt;&amp;quot;&amp;amp;modified&amp;quot;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;label&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;'[+] '&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;label&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfor&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;label&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MyGuiTabLabel&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;'%{MyTabLabel('&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;tabpagenr&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;')}'&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;tabline&lt;/font&gt;=%!MyTabLine()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;guitablabel&lt;/font&gt;=%!MyGuiTabLabel()&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Задаем собственные функции для назначения имен заголовкам табов &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Переключение между заголовочными файлами и&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; файлами с исходным кодом.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;nbsp;&amp;nbsp; Соответственно:&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;nbsp;&amp;nbsp; ,s - переключение на исходный код&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;nbsp;&amp;nbsp; ,S - тоже самое, только открыть в новом окне&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;nbsp;&amp;nbsp; ,h - переключение на заголовочный файл&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;nbsp;&amp;nbsp; ,H - тоже самое, только открыть в новом окне&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;,h&amp;nbsp;:call MySwitchToHeader()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;,H&amp;nbsp;:call MySwitchToHeaderInNewWindow()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;,s&amp;nbsp;:call MySwitchToSource()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;,S&amp;nbsp;:call MySwitchToSourceInNewWindow()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MySwitchToHeader&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;amp;&lt;font color="#a52a2a"&gt;&lt;b&gt;filetype&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;c&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;find&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;%&lt;/font&gt;&lt;font color="#008b8b"&gt;:t:r&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;h&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;amp;&lt;font color="#a52a2a"&gt;&lt;b&gt;filetype&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;cpp&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;find&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;%&lt;/font&gt;&lt;font color="#008b8b"&gt;:t:r&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;hpp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MySwitchToHeaderInNewWindow&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;amp;&lt;font color="#a52a2a"&gt;&lt;b&gt;filetype&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;c&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;sf&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;%&lt;/font&gt;&lt;font color="#008b8b"&gt;:t:r&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;h&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;amp;&lt;font color="#a52a2a"&gt;&lt;b&gt;filetype&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;cpp&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;sf&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;%&lt;/font&gt;&lt;font color="#008b8b"&gt;:t:r&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;hpp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MySwitchToSource&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;amp;&lt;font color="#a52a2a"&gt;&lt;b&gt;filetype&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;c&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;find&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;%&lt;/font&gt;&lt;font color="#008b8b"&gt;:t:r&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;c&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;amp;&lt;font color="#a52a2a"&gt;&lt;b&gt;filetype&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;cpp&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;find&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;%&lt;/font&gt;&lt;font color="#008b8b"&gt;:t:r&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;cpp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;! MySwitchToSourceInNewWindow&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;amp;&lt;font color="#a52a2a"&gt;&lt;b&gt;filetype&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;c&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;sf&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;%&lt;/font&gt;&lt;font color="#008b8b"&gt;:t:r&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;c&lt;/b&gt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;amp;&lt;font color="#a52a2a"&gt;&lt;b&gt;filetype&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;==&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#ff00ff"&gt;&amp;quot;cpp&amp;quot;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;sf&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;%&lt;/font&gt;&lt;font color="#008b8b"&gt;:t:r&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;cpp&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; &amp;lt;--&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;~/.gvimrc:&lt;/span&gt;&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;&amp;quot; Подсветка строки, в которой находится в данный момент курсор&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;cursorline&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Отключаем панель инструментов&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;guioptions&lt;/font&gt;-=T&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Отключаем графические диалоги&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;guioptions&lt;/font&gt;+=c&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Отключаем графические табы (текстовые занимают меньше места)&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;guioptions&lt;/font&gt;-=e&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Устанавливаем шрифт&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;guifont&lt;/font&gt;=Monospace\ 9&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Меню --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; По умолчанию меню скрыто&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;guioptions&lt;/font&gt;-=m&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Горячие клавиши скрытия/отображения меню --&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt;&amp;nbsp;MyToggleMenu&lt;font color="#a52a2a"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt;&amp;nbsp;old_guioptions&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;amp;guioptions&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Если меню в данный момент видимо&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;stridx&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;old_guioptions, &lt;font color="#ff00ff"&gt;'m'&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;!=&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/font&gt;&lt;font color="#ff00ff"&gt;1&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;guioptions&lt;/font&gt;-=m&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;guioptions&lt;/font&gt;+=m&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;cmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F12&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;ESC&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:call MyToggleMenu()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;imap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F12&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;ESC&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:call MyToggleMenu()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F12&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;:call MyToggleMenu()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#a52a2a"&gt;&lt;b&gt;vmap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;F12&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;ESC&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;:call MyToggleMenu()&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;CR&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot; Горячие клавиши скрытия/отображения меню &amp;lt;--&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Меню &amp;lt;--&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;~/.vim/develop.vim:&lt;/span&gt;&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;&amp;quot; Общий конфигурационный файл для всех файлов,&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; которые имеют какое-либо отношение к программированию.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Отключаем перенос строк&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;nowrap&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Уровень сокрытия по умолчанию для вновь открытых файлов&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;foldlevelstart&lt;/font&gt;=0&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Метод фолдинга - по синтаксису&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;foldmethod&lt;/font&gt;=syntax&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Включаем отображение номеров строк&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;number&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Учитывать регистр букв при поиске&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;noignorecase&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Включить подсветку невидимых символов&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;list&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Настройка подсветки невидимых символов&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;listchars&lt;/font&gt;=tab&lt;font color="#a52a2a"&gt;&lt;b&gt;:&lt;/b&gt;&lt;/font&gt;·\ &lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;trail&lt;font color="#a52a2a"&gt;&lt;b&gt;:&lt;/b&gt;&lt;/font&gt;·&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;~/.vim/ftplugin/python/custom_settings.vim:&lt;/span&gt;&lt;pre class="my_code_box"&gt;&lt;font color="#000000"&gt;&lt;font color="#0000ff"&gt;&amp;quot; Ключевые слова, по которым smartindent будет расставлять отступы&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;cinwords&lt;/font&gt;=if&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;elif&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;else&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;for&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;while&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;try&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;except&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;finally&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;def&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;class&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Чтобы из-за smartindent'а при написании комментария в пустой&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; строке курсор не переносился в начало строки&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;inoremap&lt;/b&gt;&lt;/font&gt;&amp;nbsp;#&amp;nbsp;X&lt;font color="#6a5acd"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#6a5acd"&gt;C-H&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;gt;&lt;/font&gt;#&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Настройка работы :make&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Теперь по команде :make будет производиться 'компиляция' открытого в данный&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; момент файла. Это помогает выявить самые простейшие ошибки синтаксиса, такие&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; как, например, пропуск двоеточия после if.&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;makeprg&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;python&lt;/b&gt;&lt;/font&gt;\ &lt;font color="#a52a2a"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;c&lt;/b&gt;&lt;/font&gt;\ \&amp;quot;import\ py_compile,sys;\ sys&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;stderr&lt;font color="#a52a2a"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;sys&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;stdout;\ py_compile&lt;font color="#a52a2a"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/font&gt;compile&lt;font color="#a52a2a"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;\'%\&lt;font color="#ff00ff"&gt;'&lt;/font&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;\&amp;quot;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;efm&lt;/font&gt;=%C\ %.%#&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;%A\ \ File\ \&amp;quot;%f\&amp;quot;\\&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;\ line\ %l%.%#&lt;font color="#a52a2a"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;%Z%[%^\ ]%\\@=%m&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;quot; Ctags для всей библиотеки Python'a&lt;/font&gt;&lt;br /&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#a020f0"&gt;tags&lt;/font&gt;+=~/.vim/tags/python.ctags&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Список команд&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Соглашения&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Чтобы сократить размеры данного HowTo, я ввел следующее обозначение: строка&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;{h, j, k, l}&lt;/span&gt; - перемещает курсор в окно, которое находится {слева, внизу, вверху, справа}.&lt;br /&gt;эквивалентна следующим 4 строкам:&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;h&lt;/span&gt; - перемещает курсор в окно, которое находится слева.&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;j&lt;/span&gt; - перемещает курсор в окно, которое находится внизу.&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;k&lt;/span&gt; - перемещает курсор в окно, которое находится вверху.&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;l&lt;/span&gt; - перемещает курсор в окно, которое находится справа.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Команды редактирования&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;c&lt;/span&gt; - полностью аналогична d, но после своего выполнения переводит редактор в режим вставки.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;X&lt;/span&gt; - аналогична x, но &amp;#34;стирает текст влево, а не вправо&amp;#34;. Если проводить аналогии, то x - это клавиша Del, а X - клавиша Backspace.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;D&lt;/span&gt; - аналогична d$.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;C&lt;/span&gt; - аналогична c$.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;s&lt;/span&gt; - аналогична xi.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;S&lt;/span&gt; - аналогична cc.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt; - повторяет предыдущую команду.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;I&lt;/span&gt; - аналогична ^i.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;A&lt;/span&gt; - аналогична $a.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-A&amp;#62;&lt;/span&gt; - перемещает курсор на ближайшее число и увеличивает его на единицу.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-X&amp;#62;&lt;/span&gt; - перемещает курсор на ближайшее число и уменьшает его на единицу.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Работа с текстом в режиме вставки&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;&lt;/span&gt; - удаляет слово перед курсором.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-U&amp;#62;&lt;/span&gt; - удаляет все символы от начала строки до курсора.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-Y&amp;#62;&lt;/span&gt; - вставляет символ, который находится над курсором (в предыдущей строке).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-E&amp;#62;&lt;/span&gt; - вставляет символ, который находится под курсором (в следующей строке).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-O&amp;#62;cmd&lt;/span&gt; - выполняет команду cmd и возвращается обратно в режим вставки.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Изменение регистра&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;{g~, gu, gU}&lt;/span&gt; - меняют регистр букв на {противоположный, нижний, верхний}. &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;{g~~, guu, gUU}&lt;/span&gt; - меняют регистр букв во всей строке на {противоположный, нижний, верхний}. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Перемещение в тексте&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;w&lt;/span&gt; - переместиться вперед на первую букву слова.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;e&lt;/span&gt; - переместиться вперед на последнюю букву слова.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;b&lt;/span&gt; - переместиться назад на первую букву слова.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ge&lt;/span&gt; - переместиться назад на последнюю букву слова.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;gE, B, W и E&lt;/span&gt; - тоже самое, что и ge, b, w, и e, но только в этом случае словом будет считаться любая последовательность букв, разделенных пробельными символами.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;(&lt;/span&gt; - На одно предложение назад (до точки).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;)&lt;/span&gt; - На одно предложение вперед (до точки).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;{&lt;/span&gt; - На абзац назад (до пустой строки).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;}&lt;/span&gt; - На абзац вперед (до пустой строки).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;$&lt;/span&gt; - перемещает курсор в конец строки.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;^&lt;/span&gt; - перемещает курсор на первый непробельный символ в строке.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;0&lt;/span&gt; - перемещает курсор на первый символ строки.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;g{j, k}&lt;/span&gt; - перемещает курсор на одну экранную строку {вниз, вверх}. Когда длинная строка не умещается в одной экранной строке, она разбивается на несколько экранных строк. j и k перемещают по реальным строкам, а gj и gk - по экранным.  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;fn&lt;/span&gt; - перемещает курсор вперед на символ n в текущей строке.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Fn&lt;/span&gt; - перемещает курсор назад на символ n в текущей строке.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;t, T&lt;/span&gt; - аналогичны f и F, но перемещают курсор не на сам символ, а на символ, находящийся перед ним.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;;&lt;/span&gt; - повторяет поиск, производимый последней командой f, F, t или T.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;,&lt;/span&gt; - повторяет поиск, производимый последней командой f, F, t или T, но в обратном порядке.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;%&lt;/span&gt; - перемещает курсор на парную круглую, фигурную или квадратную скобку. Пары можно задать командой :set matchpairs.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:5 или 5G&lt;/span&gt; - перемещает курсор на 5 строку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;gg&lt;/span&gt; - перемещает курсор на первую строку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;G&lt;/span&gt; - перемещает курсор на последнюю строку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;50%&lt;/span&gt; - перемещает курсор в середину текста.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;H, M, L&lt;/span&gt; - перемещают курсор в начало, середину и конец видимой части текста.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;{&amp;#60;C-U&amp;#62;, &amp;#60;C-D&amp;#62;}&lt;/span&gt; - прокручивает текст на половину высоты окна {вниз, вверх}.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;{&amp;#60;C-Y&amp;#62;, &amp;#60;C-E&amp;#62;}&lt;/span&gt; - прокручивает текст на одну строку {вниз, вверх}, но при этом не перемещает курсор.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;{&amp;#60;C-F&amp;#62;, &amp;#60;C-B&amp;#62;}&lt;/span&gt; - прокручивает текст {вниз, вверх} на количество строк, равное высоте окна минус 2 строки.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;{zs, ze, zt, zz, zb}&lt;/span&gt; - прокручивает текст так, чтобы курсор оказался {на левом крае, на правом крае, вверху, в центре, внизу} экрана.&lt;br /&gt;&lt;br /&gt;Стоит заметить, что все эти команды можно использовать не только для перемещения курсора или поиска символа, но и комбинировать их с командами копирования и удаления. Например, если у вас есть строка&lt;br /&gt;void foo(int val_1, int val_2);&lt;br /&gt;то поставив курсор за первую круглую скобку и нажав dt), вы очистите все содержимое внутри скобок, т. е. получите строку&lt;br /&gt;void foo();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Режим выделения&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;v&lt;/span&gt; - войти в режим выделения символов.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;V&lt;/span&gt; - войти в режим выделения строк.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-V&amp;#62;&lt;/span&gt; - войти в режим выделения блока текста.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;gv&lt;/span&gt; - выделяет текст, который был выделен прошлой командой выделения.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;o, O&lt;/span&gt; - перемещают в режиме выделения курсор в другой конец, чтобы можно было изменить размеры области выделения с разных концов. Команда O необходима при блочном выделении.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;J&lt;/span&gt; - если у вас выделен блок текста и вы нажмете J, то все строки, содержащиеся в этом блоке сольются в одну.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Редактирование текста в блочном выделении&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Все описанные ниже команды необходимо выполнять, когда вы находитесь в режиме блочного выделения (вызывается по комбинации клавиш &amp;#60;C-V&amp;#62;).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;I&lt;/span&gt; - переключает в режим вставки символов в блочное выделение. После того, как вы нажмете I, наберете несколько символов и нажмете клавишу &amp;#60;Esc&amp;#62;, набранные символы вставятся во все выделенные строки. Например, с помощью этой операции строки&lt;br /&gt;#include &amp;#60;header_1.h&amp;#62;&lt;br /&gt;#include &amp;#60;header_2.h&amp;#62;&lt;br /&gt;#include &amp;#60;header_3.h&amp;#62;&lt;br /&gt;можно преобразовать в&lt;br /&gt;#include &amp;#60;my_headers_dir/header_1.h&amp;#62;&lt;br /&gt;#include &amp;#60;my_headers_dir/header_2.h&amp;#62;&lt;br /&gt;#include &amp;#60;my_headers_dir/header_3.h&amp;#62;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;c&lt;/span&gt; - аналогична I, но только перед переключением в режим вставки удаляет символы, выделенные в данный момен блоком.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;C&lt;/span&gt; - аналогична I, но только перед переключением в режим вставки удаляет все символы от левого края выделения, до конца строки.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;{~, u, U}&lt;/span&gt; - меняют регистр букв на {противоположный, нижний, верхний}&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;r&lt;/span&gt; - если сначала выделить блок текста, а потом нажать r*, то весь блок заполнится символами *.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60; и &amp;#62;&lt;/span&gt; - сдвигают выделенный текст влево или вправо так, как это делают команды &amp;#60;&amp;#60; и &amp;#62;&amp;#62; в обычном режиме.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Использование буфера обмена и регистров&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#34;*yy&lt;/span&gt; - скопировать строку в буфер обмена текущего выделения, которую потом можно будет вставить в других приложениях по нажатию на колесико мыши.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#34;+yy&lt;/span&gt; - скопировать строку в буфер обмена, которую потом можно будет вставить в других приложениях по нажатию на Ctrl+V.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#34;ayy&lt;/span&gt; - скопировать строку в регистр a.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#34;ap&lt;/span&gt; - вставить текст из регистра a.&lt;br /&gt;&lt;br /&gt;Важно отметить одну особенность при работе с регистрами: имена регистров лежат в диапазоне a-z. Если &amp;#34;ayy копирует строку в регистр a, то &amp;#34;Ayy добавляет строку в регистр a. Это очень важная особенность. Ее очень удобно использовать, когда вы копируете строки из разных частей файла и хотите потом вставить их в одном месте. Но вся ее мощь проявляется при записи и воспроизведении макросов Vim (через клавиши q и @) - если у вас уже существует работающий макрос, который вы хотите расширить, то вам не обязательно записывать все действия заново - достаточно выполнить, например, qA, и набранные вами команды добавятся к уже существующим.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Метки&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Каждый раз, когда вы осуществляете поиск или выполняете команды G, gg и т. п, курсор перемещается по тексту. Vim каждый раз запоминает положение курсора и позволяет вам вернуться в предыдущую позицию. Также существует возможность создавать собственные метки.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ma&lt;/span&gt; - создает метку с именем a.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;`a&lt;/span&gt; - перемещает курсор на метку a.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;'a&lt;/span&gt; - перемещает курсор на начало строки, содержащей метку a.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:marks&lt;/span&gt; - показывает все существующие в данный момент метки.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-O&amp;#62; и &amp;#60;C-I&amp;#62;&lt;/span&gt; - перемещение к ранее посещенным меткам назад и вперед.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;`` и ''&lt;/span&gt; - перейти на предыдущую позицию (разница между `` и '' такая же как и между `a и 'a). &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Поиск&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;/&lt;/span&gt; - включает режим поиска. Символы .*[]^%/\?~$ являются специальными, поэтому при поиске слова, содержащего такие символы, их необходимо предварять символом \. Строка поиска - это обычное регулярное выражение, так что вы можете использовать символы *, ^, $ и т. д. также, как и при записи обычного регулярного выражения. Подробнее о регулярных выражениях Vim можно прочитать в документации.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;?&lt;/span&gt; - то же, что и /, но только поиск будет производиться в обратном направлении.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;n&lt;/span&gt; - повторить поиск.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;N&lt;/span&gt; - повторить поиск в обратном направлении.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;*&lt;/span&gt; - при нажатии на * будет произведен поиск слова, на котором находится в данный момент курсор.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;#&lt;/span&gt; - тоже самое, что и *, но в обратном направлении.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;g*, g#&lt;/span&gt; - тоже самое, что * и #, но со следующей разницей: при поиске 'the' команда * найдет в тексте только слово the, тогда как g* найдет the, there и т. п.&lt;br /&gt;&lt;br /&gt;Игнорирование регистра символов при поиске можно задать опцией :set (no)ignorecase.&lt;br /&gt;Также действуют следующие правила:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;/слово\c&lt;/span&gt; - ищет &amp;#34;слово&amp;#34;, игнорируя регистр независимо от настроек.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;/слово\C&lt;/span&gt; - ищет &amp;#34;слово&amp;#34;, учитывая регистр независимо от настроек.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;\&amp;#60;&lt;/span&gt; и &lt;span style="font-weight:bold;"&gt;\&amp;#62;&lt;/span&gt; означают начало и конец слова. Т. е. при поиске /\&amp;#60;the\&amp;#62; будет найдено только слово the, тогда как при поиске /the будет найдено the, there и т. д.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;/word/b+1&lt;/span&gt; - ищет слово word и устанавливает курсор на второй символ (o).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;/word/e-1&lt;/span&gt; - ищет слово word и устанавливает курсор второй символ с конца (r).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;?word?e&lt;/span&gt; - аналогично /word/e, но ищет назад, а не вперед.&lt;br /&gt;&lt;br /&gt;Ввод двух поисковых команд&lt;br /&gt;/word&lt;br /&gt;//e&lt;br /&gt;аналогичен одной команде&lt;br /&gt;/word/e&lt;br /&gt;&lt;br /&gt;Если в режиме поиска нажимать на клавиши &amp;#60;Up&amp;#62; и &amp;#60;Down&amp;#62;, то можно перемещаться по истории поиска. Стоит отметить, что если вы ранее искали слова &amp;#34;слово&amp;#34;, &amp;#34;словарь&amp;#34; и &amp;#34;слог&amp;#34;, то если вы наберете в режиме поиска &amp;#34;слов&amp;#34; и нажмете на клавишу &amp;#60;Up&amp;#62;, то Vim предложит вам из истории поиска только &amp;#34;слово&amp;#34; и &amp;#34;словарь&amp;#34;.&lt;br /&gt;&lt;br /&gt;Командный режим, вызываемый по клавише : также имеет свою историю.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Автозамена&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:[address]s/[search]/[repl]/[gcie]&lt;/span&gt; - Поиск [search] и замена на [repl] (в режиме VISUAL - без адреса и в выделенной области):&lt;div style="padding-left: 1em"&gt;&lt;span style="font-weight:bold;"&gt;[gcie]&lt;/span&gt;:&lt;div style="padding-left: 1em"&gt;&lt;span style="font-weight:bold;"&gt;[без опций]&lt;/span&gt; - первого вхождения (в строке).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;g&lt;/span&gt; - все вхождения (в строке).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;c&lt;/span&gt; - с запросом подтверждения.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;i&lt;/span&gt; - игнорируя регистр.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;e&lt;/span&gt; - подавляет сообщение об ошибке, которое возникает, если найденный шаблон не встречается ни одного раза.&lt;/div&gt; &lt;span style="font-weight:bold;"&gt;[address]:&lt;/span&gt;&lt;div style="padding-left: 1em"&gt;&lt;span style="font-weight:bold;"&gt;%&lt;/span&gt; - весь текст.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1&lt;/span&gt; - первая строка.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;.&lt;/span&gt; - текущая строка.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;$&lt;/span&gt; - последняя строка.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1,3&lt;/span&gt; - между строками 1-3.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;.,$&lt;/span&gt; - от текущей до последней.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Примеры:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:s/text/new_text/&lt;/span&gt; - Заменяет первый встреченный образец text в текущей строке на new_text.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:s/text/new_text/g&lt;/span&gt; - Заменяет все образцы text в текущей строке на new_text.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:1,$s/the/THE/g&lt;/span&gt; - Начиная с первой строки до последней (строки $), заместить все встреченные the на THE.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:'a,.s/.*/ha ha/&lt;/span&gt; - От строки, помеченной меткой a, до текущей строки, заменить любой текст на строку &amp;#34;ha ha&amp;#34;.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:%s/\s\+$//&lt;/span&gt; - удаляет пробельные символы в конце строк во всем файле.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:%s/\([^,]*\), \(.*\)/\2 \1/&lt;/span&gt; - преобразовывает&lt;br /&gt;Doe, John&lt;br /&gt;Smith, Peter&lt;br /&gt;в&lt;br /&gt;John Doe&lt;br /&gt;Peter Smith&lt;br /&gt;&lt;br /&gt;Ограничение диапазона строк, в которых необходимо произвести автозамену:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:g/search/s/text/new_text/&lt;/span&gt; - заменяет строку text на new_text в строках, содержащих подстроку search. Команда состоит из двух команд: :g/search/ и :s/text/new_text/. Первая выбирает только строки, содержащие подстроку search, а вторая производит в них обычную автозамену.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Автодополнение&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-P&amp;#62; и &amp;#60;C-N&amp;#62;&lt;/span&gt; - поиск слова для автодополнения назад и вперед.&lt;br /&gt;&lt;br /&gt;Опция ignorecase влияет на работу автодополнения. Если же установлены опции ignorecase и infercase, то если вы наберете &amp;#34;For&amp;#34; и Vim найдет соответствие &amp;#34;fortunately&amp;#34;, то результатом будет &amp;#34;Fortunately&amp;#34;.&lt;br /&gt;&lt;br /&gt;Автодополнение из определенной области поиска:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-X&amp;#62;&amp;#60;C-F&amp;#62;&lt;/span&gt; - имена файлов.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-X&amp;#62;&amp;#60;C-L&amp;#62;&lt;/span&gt; - целые строки.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-X&amp;#62;&amp;#60;C-D&amp;#62;&lt;/span&gt; - макроопределения.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-X&amp;#62;&amp;#60;C-I&amp;#62;&lt;/span&gt; - текущий и включенные (included) файлы.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-X&amp;#62;&amp;#60;C-K&amp;#62;&lt;/span&gt; - слова из словаря.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-X&amp;#62;&amp;#60;C-T&amp;#62;&lt;/span&gt; - слова из тезауруса.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-X&amp;#62;&amp;#60;C-]&amp;#62;&lt;/span&gt; - теги.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-X&amp;#62;&amp;#60;C-V&amp;#62;&lt;/span&gt; - командная строка Vim.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-X&amp;#62;&amp;#60;C-O&amp;#62;&lt;/span&gt; - имена функций и переменных в исходном коде программ с использованием ctags.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-X&amp;#62;&amp;#60;C-S&amp;#62;&lt;/span&gt; - слова из spell словаря.&lt;br /&gt;&lt;br /&gt;Перемещение по предлагаемым в меню словам можно осуществлять теми же &amp;#60;C-P&amp;#62; и &amp;#60;C-N&amp;#62;.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-Y&amp;#62;&lt;/span&gt; - Принять выделенное в данный момент в меню слово.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-E&amp;#62;&lt;/span&gt; - Возвращается к тому состоянию, которое было до нажатия горячих клавиш автодополнения.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Выравнивание текста&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:{center, right} [width]&lt;/span&gt; - выравнивает текст по {центру, правому краю}. width - максимальная ширина строки.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Форматирование строк до фиксированной ширины&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:set textwidth=72&lt;/span&gt; - задает автоматическое форматирование строк таким, чтобы их длина не превышала 72 символа. Во время набора текста Vim будет сам вставлять необходимые переносы строк. Правда, если вы впоследствии удалите какие-либо символы из уже набранного текста или просто склеите несколько строк, то Vim не станет их переформатировать автоматически.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;gqap&lt;/span&gt; - заставляет Vim переформатировать текущий параграф.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;gggqG&lt;/span&gt; - заставляет Vim переформатировать весь текст.&lt;br /&gt;&lt;br /&gt;Также, если необходимо переформатировать только часть текста, то достаточно выделить нужные строки и нажать gq.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Преобразование параграфов, разбитых на строки фиксированной ширины, в строки&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;:g/./,/^$/join&lt;br /&gt;или&lt;br /&gt;:g/\S/,/^\s*$/join&lt;br /&gt;если пустые строки между параграфами содержат пробельные символы.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Редактирование таблиц&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;При редактировании таблиц или составлении каких-либо блоксхем удобно иметь возможность свободно перемещаться по всему экрану, не обращая внимания на отсутствующие символы в строке. :set virtualedit=all позволяет сделать это. После выполнения данной команды вы можете перемещать курсор, далее по строке, даже если она не содержит ни одного символа. Как только вы вставите в нее хотя бы один символ, все пространство от начало строки до вставленного символа автоматически заполнится пробелами.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Работа с буферами&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:ls&lt;/span&gt; - отображает список буферов.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:b file_name&lt;/span&gt; - переключается на буфер файла file_name. Полное имя файла писать не обязательно - главное ввести такую последовательность символов, которая присутствует только в имени искомого буфера и не присутствует в именах других буферов.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:b{f,n,p,l}&lt;/span&gt; - открывает {первый, следующий, предыдущий, последний} буфер.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Работа с окнами&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;n или :new [file]&lt;/span&gt; - создает новое пустое окно и помещает его над текущим окном. Если указано имя файла, то создается окно, в которое загружается указанный файл.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:vnew [file]&lt;/span&gt; - аналогична :new, но помещает окно слева относительно текущего.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;s или :sp[lit] [file]&lt;/span&gt; - создает копию текущего окна и помещает ее над текущим окном. Если указано имя файла, то создается окно, в которое загружается указанный файл.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;v или :vs[plit]&lt;/span&gt; - аналогична :split, но помещает окно слева относительно текущего.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;c или :clo[se]&lt;/span&gt; - закрывает окно.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;o или :only&lt;/span&gt; - закрывает все окна кроме текущего.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;W&lt;/span&gt; - перескакивает с одного окна на другое.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;- или :res[ize] -N&lt;/span&gt; - уменьшает высоту окна на одну строку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;+ или :res[ize] +N&lt;/span&gt; - увеличивает высоту окна на одну строку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;&amp;#60; или :vertical res[ize] -N&lt;/span&gt; - уменьшает ширину окна на одну колонку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;&amp;#62; или :vertical res[ize] +N&lt;/span&gt; - увеличивает ширину окна на одну колонку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:res[ize] [N]&lt;/span&gt; - Задает высоту окна.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:vertical res[ize] [N]&lt;/span&gt; - Задает ширину окна.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[height]&amp;#60;C-W&amp;#62;_&lt;/span&gt; - если указано значение height, то делает размер окна равным height, в противном случае увеличивает высоту окна до максимального размера.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[width]&amp;#60;C-W&amp;#62;|&lt;/span&gt; - если указано значение width, то делает ширину окна равной width, в противном случае увеличивает ширину окна до максимального размера.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;{h, j, k, l, t, b}&lt;/span&gt; - перемещает курсор в окно, которое находится {слева, внизу, вверху, справа, в самом верху, в самом низу}&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;{H, J, K, L}&lt;/span&gt; - перемещает окно так, чтобы оно было {самым левым, самым нижним, самым верхним, самым правым}&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;=&lt;/span&gt; - Делает все окна одинакового размера.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:wa, :qa, :wqa&lt;/span&gt; - аналогичны :w, :q и :wq, но производят действия со всеми окнами.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Табы (вкладки)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:tabe[dit] [file]&lt;/span&gt; - создает новую вкладку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;gt&lt;/span&gt; - переключается между вкладками.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ngt&lt;/span&gt; - Переходит на вкладку с номером N.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:tab split&lt;/span&gt; - создает новую вкладку, в которой будет открыт буфер, редактируемый в данный момент.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:tabn[ext][N] или :tabn[ext][N]&lt;/span&gt; - Переходит на вкладку с номером N. Если аргумент N опущен, то переходит на следующую вкладку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:tabm[ove][N] или :tabm[ove][N]&lt;/span&gt; - Перемещает текущую вкладку так, чтобы она стояла после вкладки N.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:tabc[lose] [tab_num]&lt;/span&gt; - Закрывает вкладку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:tabo[nly]&lt;/span&gt; - Закрывает все вкладки кроме текущей.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:tabr[ewind] или :tabfir[st]&lt;/span&gt; - Открывает первую вкладку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:tabl[ast]&lt;/span&gt; - Открывает последнюю вкладку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:tabp[revious]&lt;/span&gt; - Переходит на предыдущую вкладку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:tabs&lt;/span&gt; - Отображает список вкладок с открытыми в них окнами.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Макросы&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;qa&lt;/span&gt; - начать запись в регистр a.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;q&lt;/span&gt; - окончить запись.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;@a&lt;/span&gt; - воспроизвести запись из регистра a.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Редактирование командной строки и строки поиска&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;S-Left&amp;#62; или &amp;#60;C-Left&amp;#62;&lt;/span&gt; - смещает курсор на одно слово влево.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;S-Right&amp;#62; или &amp;#60;C-Right&amp;#62;&lt;/span&gt; - смещает курсор на одно слово вправо.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-B&amp;#62; или &amp;#60;Home&amp;#62;&lt;/span&gt; - в начало строки.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-E&amp;#62; или &amp;#60;End&amp;#62;&lt;/span&gt; - в конец строки.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;&lt;/span&gt; - удаляет слово, стоящее перед курсором.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-U&amp;#62;&lt;/span&gt; - удаляет все символы перед курсором.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Сохранение информации о текущей сессии между запусками Vim&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vim запоминает файл и место в файле, в котором находился курсор в момент его закрытия. Если запустить Vim снова и нажать '0, то он откроет этот файл и установит курсор в то же место. При закрытии '0 запишется в '1, '1 в '2 и т. д. до '9. В '0 запишется новое значение. &lt;br /&gt;&lt;br /&gt;Сохранение viminfo файла позволяет впоследствии восстановить текущее содержимое регистров, метки, историю поиска и историю команд.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:wviminfo! ~/.vim/my_viminfo&lt;/span&gt; - записывает текущую информацию в файл ~/.vim/my_viminfo.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:rviminfo! ~/.vim/my_viminfo&lt;/span&gt; - восстанавливает записанную информацию из файла ~/.vim/my_viminfo.&lt;br /&gt;&lt;br /&gt;Сохранение текущей сессии позволяет впоследствии восстановить открытые в данный момент окна, их размеры, табы, текущие привязки горячих клавиш, значения переменных и т. п.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:mksession! ~/.vim/my_session&lt;/span&gt; - сохраняет информацию о текущей сессии в файл ~/.vim/my_session.&lt;br /&gt;Восстановить сохраненную ранее сессию можно командой&lt;br /&gt;:source ~/.vim/my_session&lt;br /&gt;или запустив Vim с переданной ему опцией -S:&lt;br /&gt;vim -S ~/.vim/my_session&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Просмотр бинарных файлов&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Запустите Vim командой&lt;br /&gt;vim -b -c '%!xxd' binary_file&lt;br /&gt;Если вам необходимо изменить файл - то поменяйте hex значения (не printable часть) и выполните команду :%!xxd -r - она преобразует обратно hex представление в бинарный файл, который затем можно сохранить.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Внесение изменений во множество файлов&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Допустим, что у вас есть много *.c файлов, в которых вы хотите поменять переменную &lt;br /&gt;&amp;#34;x_cnt&amp;#34; на &amp;#34;x_counter&amp;#34;.&lt;br /&gt;&lt;br /&gt;Для этого вам необходимо произвести следующие действия:&lt;br /&gt; :args *.c&lt;br /&gt; :argdo %s/\&amp;#60;x_cnt\&amp;#62;/x_counter/gce | update&lt;br /&gt;| - это разделитель команд. Команда update сохраняет файл, если он был изменен.&lt;br /&gt;&lt;br /&gt;Также существуют команды :windo и :bufdo, которые действуют соответственно, для всех окон и всех буферов.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Подсветка синтаксиса&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Иногда из-за подсветки синтаксиса Vim очень сильно тормозит. :syntax clear позволяет временно отключить подсветку.&lt;br /&gt;После выполнения :syntax manual, все новые файлы, которые вы будете открывать, будут отображаться без подсветки. Чтобы включить подсветку для конкретного файла, нужно будет выполнить команду :set syntax=ON.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Складки&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;zf&lt;/span&gt; - создает новую складку (актуально при foldmethod=manual).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;zd&lt;/span&gt; - удаляет складку, на которой в данный момент находится курсор.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;zD&lt;/span&gt; - рекурсивно удаляет все складки под курсором.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;zE&lt;/span&gt; - удаляет все складки в окне.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;zo&lt;/span&gt; - открыть текущую складку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;zO&lt;/span&gt; - открыть текущую складку и все складки внутри нее.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;zc&lt;/span&gt; - скрыть текущую складку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;zС&lt;/span&gt; - скрыть текущую складку и все складки внутри нее.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;za&lt;/span&gt; - скрыть/открыть текущую складку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;zA&lt;/span&gt; - скрыть/открыть текущую складку и все складки внутри нее.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;{zr, zm}&lt;/span&gt; - {увеличивает, уменьшает} на 1 уровень сокрытия складок.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;{zR, zM}&lt;/span&gt; - {открыть, скрыть} все складки.&lt;br /&gt;&lt;br /&gt;Метод, по которому будут создаваться складки можно задать через опцию foldmethod:&lt;br /&gt; :set foldmethod=indent&lt;br /&gt; :set foldmethod=manual&lt;br /&gt; :set foldmethod=syntax&lt;br /&gt;&lt;br /&gt;Команды zr и zm на самом деле просто увеличивают и уменьшают опцию foldlevel, поэтому вы можете также задать ее самостоятельно:&lt;br /&gt;:set foldlevel=3&lt;br /&gt;zM задает foldlevel=0, а zR - максимальное значение, для текущего файла.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Сборка C/C++ программ средствами make&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:cc [line]&lt;/span&gt; - показать ошибку. Если указан параметр line, то отображается строка line.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:cn[ext]&lt;/span&gt; - отображает следующую ошибку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:cN[ext] или :cp[revious]&lt;/span&gt; - отображает предыдущую ошибку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:cr[ewind] или :cfir[st]&lt;/span&gt; - отображает первую строку вывода make.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:cla[st]&lt;/span&gt; - отображает последнюю строку вывода make.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:cl[ist] [from][,[to]]&lt;/span&gt; - отображает список ошибок.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:cl[ist]! [from][,[to]]&lt;/span&gt; - отображает список всех ошибок, а не только тех, которые подходят под шаблон.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:cw[indow] [height] или :cope[n] [height]&lt;/span&gt; - открывает окно с выводом make'a.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:ccl[ose]&lt;/span&gt; - закрывает окно, открытое командой :copen.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:make&lt;/span&gt; - запускает процесс компиляции. Если запущена не как :make!, то при возникновении ошибок компиляции переходит на эти ошибки в тексте.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:set makeprg=make&lt;/span&gt; - задает команду, которую будет запускать :make.&lt;br /&gt;&lt;br /&gt;Опция switchbuf задает поведение команд :cn, :make и т. п. относительно того, где они будут открывать требуемый файл (к примеру, значение split заставляет сначала открывать новое окно, и уже в него загружать файл с ошибкой, а не использовать текущее).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Редактирование C/C++ программ&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;=&lt;/span&gt; - вставляет необходимые отступы в выделенных строках C программы.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[i&lt;/span&gt; - пытается найти в заголовочных файлах определение идентификатора, на котором в данный момент находится курсор и выводит это определение в статусную строку.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[&amp;#60;C-I&amp;#62;&lt;/span&gt; - аналогична [i, но только не отображает строку с определением, а открывает файл с исходным кодом на той строке, из которой команда [i взяла бы определение.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[I&lt;/span&gt; - отображает список строк из текущего и подключенных к нему заголовочных файлов, в которых находится идентификатор, на котором в данный момент находится курсор.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-]&amp;#62;&lt;/span&gt; - перемещает на определение функции C, имя которой находится под курсором (используя ctags).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;]&lt;/span&gt; - то же самое, что и &amp;#60;C-]&amp;#62;, но открывает в новом окне.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-T&amp;#62;&lt;/span&gt; - перемещает обратно на файл, который был открыт в буфере до выполнения команды &amp;#60;C-]&amp;#62;.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;gd&lt;/span&gt; - перемещает к определению переменной внутри текущей функции.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;gD&lt;/span&gt; - перемещает к определению глобальной переменной, если она определена в этом файле.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;%&lt;/span&gt; - перемещает к парной (), {}, [], /* */, #if, #else, #endif.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[&amp;#60;C-D&amp;#62;&lt;/span&gt; - перемещает на первый найденный в текущем и в подключенных файлах #define для идентификатора, на котором в данный момент находится курсор.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[&amp;#60;C-I&amp;#62;&lt;/span&gt; - перемещает на первое найденное в текущем и в подключенных файлах определение идентификатора, на котором в данный момент находится курсор.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[D&lt;/span&gt; - отображает список #define'ов, найденных в текущем и подключенных файлах для идентификатора, на котором в данный момент находится курсор.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[I&lt;/span&gt; - отображает список определений, найденных в текущем и подключенных файлах для идентификатора, на котором в данный момент находится курсор.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;{]&amp;#60;C-D&amp;#62;, ]&amp;#60;C-I&amp;#62;, ]D, ]I}&lt;/span&gt; - аналогична {[&amp;#60;C-D&amp;#62;, [&amp;#60;C-I&amp;#62;, [D, [I}, но поиск будет производиться от текущего положения курсора.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[(&lt;/span&gt; - производит поиск вверх по тексту и устанавливает курсор на круглой скобке '(', у которой нет парной закрывающей скобки (если такая существует).&lt;br /&gt;&lt;br /&gt;Список файлов, в которых будут искаться ctag'и задаются опцией :set tags=./tags,./../tags,./*/tags.&lt;br /&gt;&lt;br /&gt;При нажатии на CTRL-] Vim находит метку в ctag'ах и открывает эту метку в буфере. Если одному имени тэга соответствует несколько меток, то переключаться между ними можно командами :tfirst, :[count]tprevious, :[count]tnext и :tlast. :tselect tagname выведет список меток с тегом tagname.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Перемещение по блокам кода&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family: courier new; font-size: 9pt;"&gt;             function(int a)&lt;br /&gt;   +-&amp;gt;       {&lt;br /&gt;   |             if (a)&lt;br /&gt;   |     +-&amp;gt;     {&lt;br /&gt;[[ |     |         for (;;)          --+&lt;br /&gt;   |     |     +-&amp;gt; {                   |&lt;br /&gt;   |  [{ |     |     foo(32);          |    --+&lt;br /&gt;   |     |  [{ |     if(bar(a)) --+    | ]}   |&lt;br /&gt;   +--   |     +--     break;     | ]} |      |&lt;br /&gt;         |         }            &amp;lt;-+    |      | ][&lt;br /&gt;         +--       foobar(a)           |      |&lt;br /&gt;                 }                   &amp;lt;-+      |&lt;br /&gt;             }                              &amp;lt;-+&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                        int func1(void)&lt;br /&gt;                        {&lt;br /&gt;                           return 1;&lt;br /&gt;          +----------&amp;gt;  }&lt;br /&gt;          |&lt;br /&gt;      []  |             int func2(void)&lt;br /&gt;          |        +-&amp;gt;  {&lt;br /&gt;          |    [[  |       if (flag)&lt;br /&gt;start     +--      +--       return flag;&lt;br /&gt;          |    ][  |       return 2;&lt;br /&gt;          |        +-&amp;gt;  }&lt;br /&gt;      ]]  |&lt;br /&gt;          |             int func3(void)&lt;br /&gt;          +----------&amp;gt;  {&lt;br /&gt;                           return 3;&lt;br /&gt;                        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                  [(&lt;br /&gt;   &amp;lt;--------------------------------&lt;br /&gt;              &amp;lt;--------&lt;br /&gt;if (a == b &amp;&amp; (c == d || (e &amp;gt; f)) &amp;&amp; x &amp;gt; y)&lt;br /&gt;                  --------------&amp;gt;&lt;br /&gt;          --------------------------------&amp;gt;&lt;br /&gt;                         ])&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Также не стоит забывать про команду %, которая перемещает на парные (), [] и {}.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Остальные команды&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:options&lt;/span&gt; - выдает список всех доступных опций, причем опции можно менять прямо в этом списке - изменения сразу же будут вступать в силу. Опции с булевыми значениями меняются клавишей Enter. Чтобы поменять опции, содержащие строковые или числовые значения, необходимо просто отредактировать это значение и нажать клавишу Enter.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:r[ead] filename&lt;/span&gt; - вставляет содержимое другого файла в текущий.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:w[rite] [&amp;#62;&amp;#62;]filename&lt;/span&gt; - записывает содержимое текущего файла в файл filename. Если указан оператор &amp;#62;&amp;#62;, то информация добавляется в файл, не стирая его содержимого. Команда write также поддерживает диапазоны, например, :.write filename записывает в файл только текущую строку. Если выполнить команду :write в режиме выделения, то в файл запишется выделенный фрагмент текста.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:!cmd&lt;/span&gt; - запускает внешнюю команду cmd. Например, :!date выведет текущую дату. Если выделить какой-нибудь текст и в режиме выделения набрать :!sort, то выделенный текст будет отсортирован. :read !ls -1 вставляет список файлов текущей директории в место под курсором. :write !wc -l подсчитывает количество строк в редактируемом тексте.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:cd&lt;/span&gt; - меняет текущую директорию Vim'a.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:pwd&lt;/span&gt; - выводит текущую директорию Vim'a.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:lcd&lt;/span&gt; - меняет текущую директорию окна. По умолчанию все окна имеют одинаковую текущую директорию, которая меняется командой :cd. После выполнения :lcd выполнение :cd в других окнах не влияет на текущую директорию этого окна, пока в нем не будет выполнена :cd.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;gf&lt;/span&gt; - открывает файл, на имя которого в данный момент указывает курсор. Если загружен плагин netrw, то можно открывать файлы по протоколам ftp, http, scp и rcp.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-W&amp;#62;f&lt;/span&gt; - аналогично gf, но открывает файл в новом окне.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:map&lt;/span&gt; - показывает список привязок горячих клавиш.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:set lazyredraw&lt;/span&gt; - отключает перерисовку экрана на время выполнения макроса (существенно ускоряет работу).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Аналоги стандартных клавиш&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;При десятипальцевом слепом методе набора текста гораздо удобнее нажимать &amp;#60;C-[&amp;#62; нежели &amp;#60;Esc&amp;#62;, т. к. для нажатия &amp;#60;C-[&amp;#62; не требуется убирать руки с клавиатуры, что влечет за собой увеличение скорости работы.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-[&amp;#62;&lt;/span&gt; - &amp;#60;Esc&amp;#62;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-I&amp;#62;&lt;/span&gt; - &amp;#60;Tab&amp;#62;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-H&amp;#62;&lt;/span&gt; - &amp;#60;BS&amp;#62;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#60;C-M&amp;#62;&lt;/span&gt; - &amp;#60;Enter&amp;#62;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Самый главный совет :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Напоследок дам, на мой взгляд, самый главный совет. Все эти команды, конечно, позволяют ускорить работу и значительно повысить ее качество, но действительно высокой скорости работы (и получения максимального удовольствия от нее :) ) вы сможете достигнуть только в том случае, если овладеете десятипальцевым слепым методом набора текста. Все команды в Vim специально сделаны так, чтобы минимизировать перемещения рук по клавиатуре. Даже клавиши перемещения курсора вынесены в h, j, k и l. При слепом методе набора вам не нужно отвлекаться на клавиатуру и тратить драгоценное время на перемещение рук - все ваше внимание будет сконцентрировано на том, что вы пишете. Если человек может печатать вслепую, то он не задумывается, на какую клавишу нажать - эта информация у него находится в &amp;#34;мышечной памяти&amp;#34;. Вы же не ищете каждый раз кнопку мыши, на какую вам нужно нажать. Да, на мыши всего 3 кнопки, на клавиатуре их больше - это значит, что вам просто потребуется чуть больше времени, чтобы ваши руки запомнили все клавиши. Причем как раз вам их помнить не надо - это необходимо только на начальном этапе обучения. Я вот сейчас, например