<?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>Code42 &#187; ide</title>
	<atom:link href="http://code42.pl/tag/ide/feed/" rel="self" type="application/rss+xml" />
	<link>http://code42.pl</link>
	<description>Wielkie Pytanie o Życie, Kod i całą resztę</description>
	<lastBuildDate>Wed, 25 Jan 2012 14:16:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Vim: Znajdowanie plików w podkatalogach</title>
		<link>http://code42.pl/2009/03/26/vim-znajdowanie-plikow-w-podkatalogach/</link>
		<comments>http://code42.pl/2009/03/26/vim-znajdowanie-plikow-w-podkatalogach/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 13:43:12 +0000</pubDate>
		<dc:creator>zergu</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=289</guid>
		<description><![CDATA[Jak wiadomo, Vim nie jest IDE. I w sumie dobrze. Jednak jest kilka funkcjonalności typowych dla IDE, które by się w nim przydały. Jedną z nich jest łatwe otwieranie plików w projekcie. Jako, że nie ma nic takiego wbudowanego, trzeba sobie poradzić samemu. Jak mogło by takie wyszukiwanie i otwieranie plików działać? Otóż, w naszym przykładzie, po naciśnięciu [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2009/04/21/uprawnienia-plikow-w-repo-svn/' rel='bookmark' title='Uprawnienia plików w repo SVN'>Uprawnienia plików w repo SVN</a></li>
<li><a href='http://code42.pl/2009/01/26/vim-edycja-plikow-php/' rel='bookmark' title='Krótko: Vim i powolna edycja plików PHP'>Krótko: Vim i powolna edycja plików PHP</a></li>
<li><a href='http://code42.pl/2010/12/24/ignorowanie-plikow-w-svn/' rel='bookmark' title='Ignorowanie plików w SVN'>Ignorowanie plików w SVN</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://code42.pl/wp-content/uploads/lego_search-536x230.jpg" alt="" title="lego_search" width="536" height="230" class="aligncenter size-medium wp-image-705" /></p>
<p>Jak wiadomo, Vim nie jest <abbr title='Integrated development environment'>IDE</abbr>. I w sumie dobrze. Jednak jest kilka funkcjonalności typowych dla IDE, które by się w nim przydały. Jedną z nich jest łatwe otwieranie plików w projekcie. Jako, że nie ma nic takiego wbudowanego, trzeba sobie poradzić samemu.</p>
<p>Jak mogło by takie wyszukiwanie i otwieranie plików działać? Otóż, w naszym przykładzie, po naciśnięciu <kbd>ctrl+f</kbd> i wpisaniu interesującej nas nazwy pliku (np. <em>BasePlace</em>) otrzymujemy taki wynik:</p>
<p><a href="http://code42.pl/wp-content/uploads/2009/03/vim-find.png"><img src="http://code42.pl/wp-content/uploads/2009/03/vim-find-300x245.png" alt="vim-find" title="vim-find" width="300" height="245" class="aligncenter size-medium wp-image-292" /></a></p>
<p>Sposób na uruchomienie tego mechanizmu jest przedstawiony na stronie <a href='http://vim.wikia.com/wiki/Find_files_in_subdirectories'>http://vim.wikia.com/wiki/Find_files_in_subdirectories</a>. Jednakże, jest on dość chaotyczny, a efekt końcowy ma pewne wady. Dlatego przedstawiam sprawę po mojemu.</p>
<p>Cały kod podany poniżej trzeba wstawić do własnego <code>.vimrc</code>. Pierwsza część to funkcja do znajdowania, w niezmienionej postaci:</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #adadad; font-style: italic;">&quot; Find file in current directory and edit it.</span>
<span style="color: #804040;">function</span><span style="color: #000000;">!</span> Find<span style="color: #000000;">&#40;</span>name<span style="color: #000000;">&#41;</span>
  <span style="color: #804040;">let</span> l<span style="color: #000000;">:</span><span style="color: #668080;">list</span>=<span style="color: #25BB4D;">system</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;find . -name '&quot;</span><span style="color: #000000;">.</span>a<span style="color: #000000;">:</span>name<span style="color: #000000;">.</span><span style="color: #C5A22D;">&quot;' | perl -ne 'print <span style="">\&quot;</span>$.<span style="">\\</span>t$_<span style="">\&quot;</span>'&quot;</span><span style="color: #000000;">&#41;</span>
  <span style="color: #804040;">let</span> l<span style="color: #000000;">:</span>num=<span style="color: #25BB4D;">strlen</span><span style="color: #000000;">&#40;</span><span style="color: #25BB4D;">substitute</span><span style="color: #000000;">&#40;</span>l<span style="color: #000000;">:</span><span style="color: #668080;">list</span>, <span style="color: #C5A22D;">&quot;[^<span style="">\n</span>]&quot;</span>, <span style="color: #C5A22D;">&quot;&quot;</span>, <span style="color: #C5A22D;">&quot;g&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
  <span style="color: #804040;">if</span> l<span style="color: #000000;">:</span>num <span style="color: #000000;">&lt;</span> <span style="color: #000000; font-weight:bold;">1</span>
    <span style="color: #804040;">echo</span> <span style="color: #C5A22D;">&quot;'&quot;</span><span style="color: #000000;">.</span>a<span style="color: #000000;">:</span>name<span style="color: #000000;">.</span><span style="color: #C5A22D;">&quot;' not found&quot;</span>
    <span style="color: #804040;">return</span>
  <span style="color: #804040;">endif</span>
  <span style="color: #804040;">if</span> l<span style="color: #000000;">:</span>num <span style="color: #000000;">!</span>= <span style="color: #000000; font-weight:bold;">1</span>
    <span style="color: #804040;">echo</span> l<span style="color: #000000;">:</span><span style="color: #668080;">list</span>
    <span style="color: #804040;">let</span> l<span style="color: #000000;">:</span><span style="color: #25BB4D;">input</span>=<span style="color: #25BB4D;">input</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;Which ? (CR=nothing)<span style="">\n</span>&quot;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #804040;">if</span> <span style="color: #25BB4D;">strlen</span><span style="color: #000000;">&#40;</span>l<span style="color: #000000;">:</span><span style="color: #25BB4D;">input</span><span style="color: #000000;">&#41;</span>==<span style="color: #000000; font-weight:bold;">0</span>
      <span style="color: #804040;">return</span>
    <span style="color: #804040;">endif</span>
    <span style="color: #804040;">if</span> <span style="color: #25BB4D;">strlen</span><span style="color: #000000;">&#40;</span><span style="color: #25BB4D;">substitute</span><span style="color: #000000;">&#40;</span>l<span style="color: #000000;">:</span><span style="color: #25BB4D;">input</span>, <span style="color: #C5A22D;">&quot;[0-9]&quot;</span>, <span style="color: #C5A22D;">&quot;&quot;</span>, <span style="color: #C5A22D;">&quot;g&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&gt;</span><span style="color: #000000; font-weight:bold;">0</span>
      <span style="color: #804040;">echo</span> <span style="color: #C5A22D;">&quot;Not a number&quot;</span>
      <span style="color: #804040;">return</span>
    <span style="color: #804040;">endif</span>
    <span style="color: #804040;">if</span> l<span style="color: #000000;">:</span>input<span style="color: #000000;">&lt;</span><span style="color: #000000; font-weight:bold;">1</span> <span style="color: #000000;">||</span> l<span style="color: #000000;">:</span>input<span style="color: #000000;">&gt;</span>l<span style="color: #000000;">:</span>num
      <span style="color: #804040;">echo</span> <span style="color: #C5A22D;">&quot;Out of range&quot;</span>
      <span style="color: #804040;">return</span>
    <span style="color: #804040;">endif</span>
    <span style="color: #804040;">let</span> l<span style="color: #000000;">:</span><span style="color: #25BB4D;">line</span>=<span style="color: #25BB4D;">matchstr</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;<span style="">\n</span>&quot;</span><span style="color: #000000;">.</span>l<span style="color: #000000;">:</span><span style="color: #668080;">list</span>, <span style="color: #C5A22D;">&quot;<span style="">\n</span>&quot;</span><span style="color: #000000;">.</span>l<span style="color: #000000;">:</span><span style="color: #25BB4D;">input</span><span style="color: #000000;">.</span><span style="color: #C5A22D;">&quot;<span style="">\t</span>[^<span style="">\n</span>]*&quot;</span><span style="color: #000000;">&#41;</span>
  <span style="color: #804040;">else</span>
    <span style="color: #804040;">let</span> l<span style="color: #000000;">:</span><span style="color: #25BB4D;">line</span>=l<span style="color: #000000;">:</span><span style="color: #668080;">list</span>
  <span style="color: #804040;">endif</span>
  <span style="color: #804040;">let</span> l<span style="color: #000000;">:</span><span style="color: #25BB4D;">line</span>=<span style="color: #25BB4D;">substitute</span><span style="color: #000000;">&#40;</span>l<span style="color: #000000;">:</span><span style="color: #25BB4D;">line</span>, <span style="color: #C5A22D;">&quot;^[^<span style="">\t</span>]*<span style="">\t</span>./&quot;</span>, <span style="color: #C5A22D;">&quot;&quot;</span>, <span style="color: #C5A22D;">&quot;&quot;</span><span style="color: #000000;">&#41;</span>
  <span style="color: #804040;">execute</span> <span style="color: #C5A22D;">&quot;:e &quot;</span><span style="color: #000000;">.</span>l<span style="color: #000000;">:</span><span style="color: #25BB4D;">line</span>
endfunction
<span style="color: #668080;">command</span><span style="color: #000000;">!</span> <span style="color: #668080;">-nargs</span>=<span style="color: #000000; font-weight:bold;">1</span> Find <span style="color: #000000;">:</span><span style="color: #804040;">call</span> Find<span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;&lt;args&gt;&quot;</span><span style="color: #000000;">&#41;</span></pre></div></div>

<p>Następnie wstawiamy funkcję napisaną w Pythonie, również pochodząca ze wcześniej wspomnianej strony. Jest ona odpowiedzialna za sam proces wyszukiwania plików. Jednak tutaj zaszło klika zmian:</p>
<ul>
<li>szukanie jest niewrażliwe na wielkość znaków,</li>
<li>szukanie ignoruje katalogi .svn</li>
<li>rozpoczynając szukanie, nie trzeba potwierdzić (ale też nie można zmienić) katalogu, w którym się szuka; domyślnie jest to katalog w którym otwarliśmy Vima.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">python <span style="color: #66cc66;">&lt;&lt;</span> EOL
<span style="color: #ff7700;font-weight:bold;">import</span> vim
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> Finder<span style="color: black;">&#40;</span><span style="color: #66cc66;">*</span>args<span style="color: black;">&#41;</span>:
    start_dir = vim.<span style="color: #008000;">eval</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'getcwd()'</span><span style="color: black;">&#41;</span>
    find_cmd = <span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'find %s -iname &quot;*%s*&quot; ! -name &quot;*.svn*&quot; -type f -printf %%p:1:-<span style="color: #000099; font-weight: bold;">\\</span>n'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>start_dir, args<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    vim.<span style="color: black;">command</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;cgete system('%s')&quot;</span> <span style="color: #66cc66;">%</span> find_cmd<span style="color: black;">&#41;</span>
    vim.<span style="color: black;">command</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'botright copen'</span><span style="color: black;">&#41;</span>
EOL
command<span style="color: #66cc66;">!</span> -nargs=<span style="color: #ff4500;">1</span> Find :py Finder<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;&lt;args&gt;&quot;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>I na koniec pozostało przypisanie sobie funkcji do skrótu <kbd>ctrl-f</kbd>:</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #804040;">map</span><span style="color: #000000;">!</span> <span style="color: #000000;">&lt;</span>C<span style="color: #000000;">-</span>f<span style="color: #000000;">&gt;</span> <span style="color: #668080;">&lt;Esc&gt;</span> <span style="color: #000000;">:</span>Find ;
<span style="color: #804040;">map</span>  <span style="color: #000000;">&lt;</span>C<span style="color: #000000;">-</span>f<span style="color: #000000;">&gt;</span> <span style="color: #000000;">:</span>Find ;</pre></div></div>

<p>Po <code>:Find</code> jest spacja, aby nie trzeba było jej dopisywać za każdym razem. Teraz wystarczy wykonać <code>:source ~/.vimrc</code> lub zrestartować Vima, a następnie <kbd>ctrl+f</kbd> i voilà!</p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2009/04/21/uprawnienia-plikow-w-repo-svn/' rel='bookmark' title='Uprawnienia plików w repo SVN'>Uprawnienia plików w repo SVN</a></li>
<li><a href='http://code42.pl/2009/01/26/vim-edycja-plikow-php/' rel='bookmark' title='Krótko: Vim i powolna edycja plików PHP'>Krótko: Vim i powolna edycja plików PHP</a></li>
<li><a href='http://code42.pl/2010/12/24/ignorowanie-plikow-w-svn/' rel='bookmark' title='Ignorowanie plików w SVN'>Ignorowanie plików w SVN</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2009/03/26/vim-znajdowanie-plikow-w-podkatalogach/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

