Archiwum

Archiwum dla ‘Vim’ Kategoria

Vim: dopełnianie dowolnego tekstu (np. słów kluczowych PHP)

Styczeń 13th, 2010 zergu Brak komentarzy

Vim posiada dwa bardzo przydatne skróty klawiszowe: ctrl-n oraz ctrl-p. Obydwa służą do dopełniania słów, pierwszy zaczyna szukać za kursorem, drugi przed nim. Domyślnie Vim korzysta ze słów z bieżącego pliku oraz z wszystkich otwartych buforów.

Można jednak tę funkcjonalność rozszerzyć dodając własny słownik. Sam słownik, to zwykły plik tekstowy, w którym słowa są oddzielone białymi znakami. Posiada on jednak dość dziwne ograniczenie — czyta tylko 511 znaków w jednej linii, dlatego nie wolno przesadzać z ich długością.

Słownik może być np. takiej postaci:

dzięciowodoronaftalen
dziewięciodoronaftalen
antypolonazsiderywizacjaimigtenwadsioptaweertyytna
fluorochlorowęglanowodoroazotanocydy
konstantynopolitańczykowianeczka
cześć

Aby skorzystać ze słownika należy dodać 2 linijki (właściwie może być jedna) do ~/.vimrc:

set dictionary+=~/sciezka/do/slownika
set complete+=k

Pierwsza komenda ładuje słownik, druga sprawia, że możemy go przeszukiwać za pomocą wcześniej wspomnianych skrótów (domyślnie trzeba byłoby wciskać ctrl-x-k). Słowników może być wiele.

Słownik możemy sobie utworzyć na bazie plików Vima ze składnią do języków programowania (pod debianopodobnymi w katalogu /usr/share/vim/vim72/syntax/). Należy tutaj jednak pamiętać o ograniczeniu długości linii. Dlatego dla samego PHP udostępniamy gotowy słownik słów kluczowych.

Kategorie:Vim Tagi:

Zen Coding – snippety do kosza

Listopad 23rd, 2009 reinmar 3 comments

Snippety do htmla? Nieeee. Zobaczcie Zen Coding. W skrócie działa to tak. Wpisuję w edytorze CSSową składnią:

div#content>h1+p

Wciskam jakąś kombinację klawiszy i dostaję:

<div id="content">
<h1></h1>
<p></p>
</div>

Sprytne, nie? :) Ale to jeszcze mało. Spróbujcie tego:

div#top>h1>a[title=Do strony głównej]{Moja strona}<ul#menu>li.pos$*3>a
<div id="top">
    <h1>
        <a href="" title="Do strony głównej">Moja strona</a>
    </h1>

    <ul id="menu">
        <li class="pos1">
            <a href=""></a>
        </li>
        <li class="pos2">

            <a href=""></a>
        </li>
        <li class="pos3">
            <a href=""></a>
        </li>

    </ul>
</div>

Chyba nie muszę mówić jak bardzo taka pomoc przyspiesza pracę. Napisanie z palca kodu z drugiego przykładu zajęłoby mi przypuszczalnie więcej niż 2 minuty. Gdybym użył snippetów (do których przy HTMLu nie mogę się przyzwyczaić) może skróciłbym ten czas dwukrotnie. Zaś używając wynalazku Zen Coding całość naklepałem w 20s (i to nie mając wprawy). Tak więc gorąco polecam.

Gdyby ktoś szukał wtyczki do VIMa, to powstał plugin, którego twórca zainspirował się Zen Codingiem.

Wpis ten opublikowałem też na swoim prywatnym blogu.

Kategorie:HTML + CSS, Vim Tagi:, , , ,

Vim: Znajdowanie plików w podkatalogach

Marzec 26th, 2009 zergu Brak komentarzy

Jak wiadomo, Vim nie jest IDE. I w sumie dobrze. Jednak jest kilka funkcjonalności, 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 może działać takie wyszukiwanie? Otóż, w naszym przykładzie, po naciśnięciu ctrl+f i wpisaniu interesującej nas nazwy pliku (np. BestPlace) otrzymujemy taki wynik:

vim-find

Rozwiązanie tego problemu jest przedstawione na stronie http://vim.wikia.com/wiki/Find_files_in_subdirectories. Jednakże, jest ono dość chaotyczne, a efekt końcowy ma pewne wady. Dlatego przedstwiamy sprawę po naszemu.

Cały kod podany poniżej trzeba wstwić do własnego .vimrc. Pierwsza część to funkcja do znajdowania, w niezmienionej postaci:

" Find file in current directory and edit it.
function! Find(name)
  let l:list=system("find . -name '".a:name."' | perl -ne 'print \"$.\\t$_\"'")
  let l:num=strlen(substitute(l:list, "[^\n]", "", "g"))
  if l:num < 1
    echo "'".a:name."' not found"
    return
  endif
  if l:num != 1
    echo l:list
    let l:input=input("Which ? (CR=nothing)\n")
    if strlen(l:input)==0
      return
    endif
    if strlen(substitute(l:input, "[0-9]", "", "g"))>0
      echo "Not a number"
      return
    endif
    if l:input<1 || l:input>l:num
      echo "Out of range"
      return
    endif
    let l:line=matchstr("\n".l:list, "\n".l:input."\t[^\n]*")
  else
    let l:line=l:list
  endif
  let l:line=substitute(l:line, "^[^\t]*\t./", "", "")
  execute ":e ".l:line
endfunction
command! -nargs=1 Find :call Find("")

Następnie funkcja w Pythonie, również pochodząca ze wcześniej wspomnianej strony. Jednak tutaj zaszło klika zmian:

  • szukanie jest niewrażliwe na wielkość znaków,
  • szukanie ignoruje katalogi .svn
  • 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.
python << EOL
import vim

def Finder(*args):
    start_dir = vim.eval('getcwd()')
    find_cmd = (r'find %s -iname "*%s*" ! -name "*.svn*" -type f -printf %%p:1:-\\n' % (start_dir, args[0]))
    vim.command("cgete system('%s')" % find_cmd)
    vim.command('botright copen')
EOL
command! -nargs=1 Find :py Finder("")

I na koniec przypisanie sobie funkcji do klawisza:

map! <C-f> <Esc>:Find 
map  <C-f> :Find 

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

Kategorie:Vim Tagi:,

Vim: powolna edycja plików PHP

Styczeń 26th, 2009 zergu Brak komentarzy

Vim potafi bardzo spowolnić (szczególnie poruszanie kursorem) podczas edycji plików PHP, co jest spowodowane najprawdopodobniej dopasoywaniem nawiasów (aby podświetlić parę). Jeśli ten ficzer nie jest dla krytyczny do pracy, warto go wyłączyć dodając w swoim .vimrc linię:

let loaded_matchparen = 1

Oczywiście wciąż można używać kombinacji shift-5, aby „ręcznie” odnaleźć nawias z pary.

Kategorie:Vim Tagi:,