<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Кибер-Фанк v2.0 &#187; vim</title>
	<atom:link href="http://www.shatlovsky.ru/category/vim/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.shatlovsky.ru</link>
	<description>Information must be free</description>
	<lastBuildDate>Fri, 12 Aug 2011 09:06:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>vim: внешние фильтры</title>
		<link>http://www.shatlovsky.ru/2010/04/29/vim-vneshnie-filtry/</link>
		<comments>http://www.shatlovsky.ru/2010/04/29/vim-vneshnie-filtry/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 12:40:16 +0000</pubDate>
		<dc:creator>Alex Shatlovsky</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.shatlovsky.ru/?p=186</guid>
		<description><![CDATA[Помимо сортировки, внешние команды можно использовать для любых манипуляций над всем документом или его фрагментом. Выполнение внешней команды на диапазоне: :{диапазон} ! {команда} При этом на STDIN команды подается содержимое диапазона, а затем диапазон заменяется выводом STDOUT команды. Несколько примеров. Форматирование всего исходного текста на perl с помощью perltidy: :% ! perltidy -es=4 -t -st [...]]]></description>
			<content:encoded><![CDATA[<p>Помимо <a href="http://www.shatlovsky.ru/2010/04/20/vim-sortirovka/">сортировки</a>, внешние команды можно использовать для любых манипуляций над всем документом или его фрагментом.</p>
<p>Выполнение внешней команды на диапазоне:</p>
<pre>:{диапазон} ! {команда}</pre>
<p>При этом на STDIN команды подается содержимое диапазона, а затем диапазон заменяется выводом STDOUT команды.</p>
<p>Несколько примеров.</p>
<p>Форматирование всего исходного текста на <code>perl</code> с помощью <code>perltidy</code>:</p>
<pre>:% ! perltidy -es=4 -t -st</pre>
<p>Отфильтровать с помощью команды <code>grep</code> все строки, содержащие символ "#" из строк 14-24:</p>
<pre>:14,24 ! grep -v &quot;\#&quot;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.shatlovsky.ru/2010/04/29/vim-vneshnie-filtry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vim: сортировка</title>
		<link>http://www.shatlovsky.ru/2010/04/20/vim-sortirovka/</link>
		<comments>http://www.shatlovsky.ru/2010/04/20/vim-sortirovka/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 12:09:22 +0000</pubDate>
		<dc:creator>Alex Shatlovsky</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[sort]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.shatlovsky.ru/?p=174</guid>
		<description><![CDATA[Сортировать в vim очень просто: :{диапазон}sort Диапазон подставится автоматически, если в визуальном режиме (V) выделить блок, а затем перейти в командный режим (:): :'&#60;,'&#62; Или для сортировки всего файла: :%sort Сортировка в обратном порядке: :%sort! Сортировка в прямом порядке, удаляя все дубликаты: :%sort -u Также для сортировки можно использовать внешние утилиты, например стандартный юниксовый sort: [...]]]></description>
			<content:encoded><![CDATA[<p>Сортировать в vim очень просто:</p>
<pre>:{диапазон}sort</pre>
<p>Диапазон подставится автоматически, если в визуальном режиме (<code>V</code>) выделить блок, а затем перейти в командный режим (<code>:</code>):</p>
<pre>:'&lt;,'&gt;</pre>
<p>Или для сортировки всего файла:</p>
<pre>:%sort</pre>
<p>Сортировка в обратном порядке:</p>
<pre>:%sort!</pre>
<p>Сортировка в прямом порядке, удаляя все дубликаты:</p>
<pre>:%sort -u</pre>
<p>Также для сортировки можно использовать внешние утилиты, например стандартный юниксовый <code>sort</code>:</p>
<pre>:%!sort --numeric-sort --reverse</pre>
<p>Ну и как обычно, читаем маны:</p>
<pre>:help :sort</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.shatlovsky.ru/2010/04/20/vim-sortirovka/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>vim: избавляемся от dos-овых концов строк (\r\n -&gt; \n)</title>
		<link>http://www.shatlovsky.ru/2009/09/02/vim-izbavlyaemsya-ot-dos-ovyx-koncov-strok-rn-n/</link>
		<comments>http://www.shatlovsky.ru/2009/09/02/vim-izbavlyaemsya-ot-dos-ovyx-koncov-strok-rn-n/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 08:20:28 +0000</pubDate>
		<dc:creator>Alex Shatlovsky</dc:creator>
				<category><![CDATA[dos]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.shatlovsky.ru/?p=115</guid>
		<description><![CDATA[Если vim распознал dos-овые концы строк, и не показывает ^M, :set ff=unix :w Документацию по поводу опции fileformat почитать можно в разделе usr_23: :help usr_23 Если vim автоматически не распознал DOS line ends, то в конце строк будут символы ^M. Удалить их можно простой заменой: :%s/^M//g Символ ^M при этом вводится как Ctrl-V Ctrl-M.]]></description>
			<content:encoded><![CDATA[<ol>
<li>Если <code>vim</code> распознал dos-овые концы строк, и не показывает <code>^M</code>,
<pre>:set ff=unix
:w</pre>
<p>Документацию по поводу опции <code>fileformat</code> почитать можно в разделе <code>usr_23</code>:</p>
<pre>:help usr_23</pre>
</li>
<li> Если vim автоматически не распознал DOS line ends, то в конце строк будут символы <code>^M</code>. Удалить их можно простой заменой:
<pre>:%s/^M//g</pre>
<p>Символ <code>^M</code> при этом вводится как <code>Ctrl-V Ctrl-M</code>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.shatlovsky.ru/2009/09/02/vim-izbavlyaemsya-ot-dos-ovyx-koncov-strok-rn-n/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unix: Поиск и замена во многих файлах одновременно</title>
		<link>http://www.shatlovsky.ru/2009/02/09/poisk-i-zamena-vo-mnogix-fajlax-odnovremenno/</link>
		<comments>http://www.shatlovsky.ru/2009/02/09/poisk-i-zamena-vo-mnogix-fajlax-odnovremenno/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 14:15:10 +0000</pubDate>
		<dc:creator>Alex Shatlovsky</dc:creator>
				<category><![CDATA[awk]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[replace]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.shatlovsky.ru/?p=75</guid>
		<description><![CDATA[Задача: найти все файлы содержащие OLDTEXT, и заменить OLDTEXT на NEWTEXT. UPD2:Решение, предложенное ocehb: grep -rl OLDTEXT . &#124; grep -Ev '(~&#124;.o&#124;.a)$' &#124; grep -Ev '/.svn/' &#124; xargs perl -i -pe &#34;s/OLD_TEXT/NEW_TEXT/g;&#34; UPD1:Вариант без vim: grep -HR OLDTEXT ./ &#124; awk '{print $1}' &#124; sed 's/:.*$//' &#124; grep -v '~' &#124; sort &#124; uniq &#124; [...]]]></description>
			<content:encoded><![CDATA[<p>Задача: найти все файлы содержащие <em>OLDTEXT</em>, и заменить <em>OLDTEXT</em> на <em>NEWTEXT</em>.</p>
<p><strong>UPD2:</strong>Решение, предложенное <a href="http://ocehb.livejournal.com/51745.html">ocehb</a>:</p>
<pre class="bash"><span style="color: #c20cb9; font-weight: bold;">grep</span> -rl OLDTEXT . | <span style="color: #c20cb9; font-weight: bold;">grep</span> -Ev <span style="color: #ff0000;">'(~|.o|.a)$'</span> | <span style="color: #c20cb9; font-weight: bold;">grep</span> -Ev <span style="color: #ff0000;">'/.svn/'</span> | <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #c20cb9; font-weight: bold;">perl</span> -i -pe <span style="color: #ff0000;">&quot;s/OLD_TEXT/NEW_TEXT/g;&quot;</span></pre>
<p><strong>UPD1:</strong>Вариант без vim:</p>
<pre class="bash"><span style="color: #c20cb9; font-weight: bold;">grep</span> -HR OLDTEXT ./ | <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $1}'</span> | <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/:.*$//'</span> | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #ff0000;">'~'</span> | <span style="color: #c20cb9; font-weight: bold;">sort</span> | <span style="color: #c20cb9; font-weight: bold;">uniq</span> | <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #c20cb9; font-weight: bold;">perl</span> -i -pe <span style="color: #ff0000;">&quot;s/OLD_TEXT/NEW_TEXT/g;&quot;</span></pre>
<p>Изначально предложенное решение с vim:</p>
<pre class="bash"><span style="color: #c20cb9; font-weight: bold;">grep</span> -HR OLDTEXT ./ | <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $1}'</span> | <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/:.*$//'</span> | <span style="color: #c20cb9; font-weight: bold;">grep</span> -v <span style="color: #ff0000;">'~'</span> | <span style="color: #c20cb9; font-weight: bold;">sort</span> | <span style="color: #c20cb9; font-weight: bold;">uniq</span> | <span style="color: #c20cb9; font-weight: bold;">xargs</span> vim -p</pre>
<p>В открывшемся окне <code>vim</code> командуем:</p>
<pre class="bash">:tabdo %s/OLDTEXT/NEWTEXT/g</pre>
<p> (заменить OLDTEXT на NEWTEXT во всех вкладках)</p>
<pre class="bash">:xa</pre>
<p> (записать изменения во всех вкладках)<br />
либо</p>
<pre class="bash">:qa!</pre>
<p> (отменить изменения во всех вкладках)</p>
<p>Ссылки по теме:</p>
<ol>
<li><a href="http://vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl">VIM FAQ</a></li>
<li><a href="http://vim.wikia.com/wiki/Save_all_open_buffers_at_once">Save all open buffers at once</a></li>
<li><a href="http://linsovet.com/vim-sudo">Сохранение файла без прав на запись в vim используя sudo</a></li>
<li><a href="http://mailman.lug.org.uk/pipermail/scarborough/2004-December/001792.html">[SLUG] Vim. Search and replace in multiple files</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.shatlovsky.ru/2009/02/09/poisk-i-zamena-vo-mnogix-fajlax-odnovremenno/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>vim + paste: no indent</title>
		<link>http://www.shatlovsky.ru/2008/11/17/vim-paste-no-indent/</link>
		<comments>http://www.shatlovsky.ru/2008/11/17/vim-paste-no-indent/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 10:37:26 +0000</pubDate>
		<dc:creator>Alex Shatlovsky</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[indent]]></category>
		<category><![CDATA[paste]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://shatlovsky.ru/blog/2008/11/17/vim-paste-no-indent/</guid>
		<description><![CDATA[При вставке через буфер обмена, vim автоматически табуляцией делает отбивку (indent). Это приводит к тому, что код теряет форматирование, выстраиваясь "лесенкой": MinSpareServers 5   MaxSpareServers 10   StartServers 10   MaxClients 500   MaxRequestsPerChild 3000 Timeout 150   KeepAlive off   HostnameLookups off Чтобы избежать ненужного форматирования, можно использовать пару параметров paste/nopaste: :set paste ... [...]]]></description>
			<content:encoded><![CDATA[<p>При вставке через буфер обмена, vim автоматически табуляцией делает отбивку (indent). Это приводит к тому, что код теряет форматирование, выстраиваясь "лесенкой":</p>
<pre class="apache"><span style="color: #00007f;">MinSpareServers</span>   <span style="color: #ff0000;">5</span>
  <span style="color: #00007f;">MaxSpareServers</span>   <span style="color: #ff0000;">10</span>
    <span style="color: #00007f;">StartServers</span>    <span style="color: #ff0000;">10</span>
      <span style="color: #00007f;">MaxClients</span>    <span style="color: #ff0000;">500</span>
        <span style="color: #00007f;">MaxRequestsPerChild</span> <span style="color: #ff0000;">3000</span>
          <span style="color: #00007f;">Timeout</span>     <span style="color: #ff0000;">150</span>
            <span style="color: #00007f;">KeepAlive</span>   <span style="color: #0000ff;">off</span>
              <span style="color: #00007f;">HostnameLookups</span>   <span style="color: #0000ff;">off</span></pre>
<p>Чтобы избежать ненужного форматирования, можно использовать пару параметров <code>paste/nopaste</code>:</p>
<pre class="bash">:<span style="color: #000000; font-weight: bold;">set</span> paste</pre>
<p>... вставлям текст ...</p>
<pre class="bash">:<span style="color: #000000; font-weight: bold;">set</span> nopaste</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.shatlovsky.ru/2008/11/17/vim-paste-no-indent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vim tabs</title>
		<link>http://www.shatlovsky.ru/2008/10/01/vim-tabs/</link>
		<comments>http://www.shatlovsky.ru/2008/10/01/vim-tabs/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 14:08:17 +0000</pubDate>
		<dc:creator>Alex Shatlovsky</dc:creator>
				<category><![CDATA[awk]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://shatlovsky.ru/blog/2008/10/01/vim-tabs/</guid>
		<description><![CDATA[Открыть сразу несколько файлов в tab'ах в vim можно так: ~$ vim -p `find -type f -name '*.rb' -print0 &#124; xargs -0 file -i &#124; grep -v 'utf-8' &#124; awk '{print $1}' &#124; sed 's/://'` (пример от Харитона, открываем в vim все ruby-файлы в кодировке, отличной от utf-8) Здесь важен ключ -p: открыть файлы в [...]]]></description>
			<content:encoded><![CDATA[<p>Открыть сразу несколько файлов в tab'ах в vim можно так:</p>
<pre class="bash">~$ vim -p `find -type f -name '*.rb' -print0 | xargs -0 file -i | grep -v 'utf-8' | awk '{print $1}' | sed 's/://'`</pre>
<p>(пример от Харитона, открываем в vim все ruby-файлы в кодировке, отличной от utf-8)<br />
Здесь важен ключ -p: открыть файлы в табах.</p>
<p>Vim откроет столько буферов, сколько нашлось файлов, но не более <code>tabpagemax</code>, по умолчанию 10. Изменить количество табов можно в <code>~/.vimrc</code> так:</p>
<p><code>set tabpagemax=15</code></p>
<p>При превышении <code>tabpagemax</code> новые табы не создаются, но навигировать по файлам все равно можно командами <code>:next</code> и <code>:last</code>.</p>
<p>Переключаться между табами можно командами: <code>:tabnext</code>, <code>:tabprevious</code>, <code>:tablast</code>, <code>:tabfirst</code>. Можно замапить из на горячие клавиши. Можно пользоваться горячими клавишами &lt;C-PgUp&gt; and &lt;C-PgDown&gt;.</p>
<p>Ещё полезное:<br />
<code>:tabn[ew]</code> - открыть новый таб<br />
<code>:tabe[dit] [++opt] [+cmd] {file}</code> - открыть файл в новом табе (типа <code>:edit</code>)<br />
<code>:tabf[ind] [++opt] [+cmd] {file}</code> - найти файл в <code>path</code> и открыть в новом табе (типа <code>:find</code>)<br />
<code>CTRL-W gf</code> - редактировать файл с именем, находящимся под курсором, в новом табе<br />
<code>CTRL-W gF</code> - редактировать файл с именем, находящимся под курсором, в новом табе. Отмотать на строку которая указана после имени файла<br />
<code>:tabc[lose][!]</code> - закрыть таб<br />
<code>:tabo[nly][!]</code> - закрыть все табы кроме активного<br />
<code>:tabn[ext]</code> (<code>gt</code>, &lt;C-PageDown&gt;)  - переключиться на следующий таб<br />
<code>:tabp[revious]</code> (<code>:tabN[ext]</code>, <code>gT</code>) - на предыдущий таб<br />
<code>:tabr[ewind]</code> (<code>:tabfir[st]</code>)  - на первый таб<br />
<code>:tabl[ast]</code> - на последний<br />
<code>:tabs</code> - список табов<br />
<code>:tabm[ove] [N]</code> - переместить текущий таб на место сразу за N-ым<br />
<code>:tabd[o] {cmd}</code> - выполнить команду на каждом из табов (<code>:tabdo %s/foo/bar/g</code>)</p>
<p>Подробнее здесь - <code class="warn">:help tabpage</code></p>
<p>Еще интересная фишка. Если переместить курсор на имя файла и нажать <code>gf</code> (go-to-file), то откроется <em>альтернативный буфер</em> с содержимым указанного файла. Старый файл как-бы пропадет из поля зрения. Однако на него можно быстро переключиться командой <code>C-^</code>, так же и обратно. Так удобно редактировать 2 файла одновременно.</p>
<p>По поводу полезных маппингов:<br />
<a href="http://www.bygonesky.com/Programming/Settings/Vim/carlos.vim.html">http://www.bygonesky.com/Programming/Settings/Vim/carlos.vim.html</a>, смотреть начиная со 125-й строки.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shatlovsky.ru/2008/10/01/vim-tabs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>vim: old-skool h0tkeyz</title>
		<link>http://www.shatlovsky.ru/2008/09/23/vim-old-skool-h0tkeyz/</link>
		<comments>http://www.shatlovsky.ru/2008/09/23/vim-old-skool-h0tkeyz/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 15:12:26 +0000</pubDate>
		<dc:creator>Alex Shatlovsky</dc:creator>
				<category><![CDATA[config]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://shatlovsky.ru/blog/2008/09/23/vim-old-skool-h0tkeyz/</guid>
		<description><![CDATA[&#160; &#34; F2 = Save file map &#60;silent&#62; &#60;f2&#62; :write&#60;cr&#62; imap &#60;silent&#62; &#60;f2&#62; &#60;esc&#62;:write&#60;cr&#62; &#160; &#34; F10 = Exit without save map &#60;silent&#62; &#60;f10&#62; :quit&#60;cr&#62; imap &#60;silent&#62; &#60;f10&#62; &#60;esc&#62;:q&#60;cr&#62; &#160;]]></description>
			<content:encoded><![CDATA[<pre class="text">&nbsp;
&quot; F2 = Save file
map  &lt;silent&gt; &lt;f2&gt;    :write&lt;cr&gt;
imap  &lt;silent&gt; &lt;f2&gt;    &lt;esc&gt;:write&lt;cr&gt;
&nbsp;
&quot; F10 = Exit without save
map   &lt;silent&gt; &lt;f10&gt;    :quit&lt;cr&gt;
imap  &lt;silent&gt; &lt;f10&gt;    &lt;esc&gt;:q&lt;cr&gt;
&nbsp;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.shatlovsky.ru/2008/09/23/vim-old-skool-h0tkeyz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VIM + Perl : .vimrc, perl-support</title>
		<link>http://www.shatlovsky.ru/2008/09/16/8/</link>
		<comments>http://www.shatlovsky.ru/2008/09/16/8/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 09:40:49 +0000</pubDate>
		<dc:creator>Alex Shatlovsky</dc:creator>
				<category><![CDATA[config]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://shatlovsky.ru/blog/2008/09/16/8/</guid>
		<description><![CDATA[Мой .vimrc + плагины (perl, tt2). Для комфортной разработки на Perl рекомендуется также плагин perl-support .]]></description>
			<content:encoded><![CDATA[<p>Мой <a href="http://shatlovsky.ru/blog/wp-content/vimrc-shatlovsky.tgz" title=".vimrc + perl + tt2">.vimrc + плагины (perl, tt2)</a>.</p>
<p>Для комфортной разработки на Perl рекомендуется также плагин <a href="http://www.vim.org/scripts/script.php?script_id=556">perl-support</a> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shatlovsky.ru/2008/09/16/8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

