YankRing (1)

YankRing.vim udostępnia funkcjonalność którą parę lat temu poznałem jeszcze jako użytkownik Emacs i polubiłem pod nazwą kill ring. Niestety, podstawowa wersja Vim podobnego mechanizmu nie posiada. Kopiowanie i wstawianie wygląda tu trochę inaczej. Upraszczając, za każdym razem gdy kopiuje się lub usuwa tekst, trafia on do rejestru. Obecnie znajdujące się tam dane są przesuwane o jedno miejsce wyżej, tak aby zwolnić przed zapełnieniem nowymi danymi "0. Zawartość rejestrów można obejrzeć po wydaniu polecenia :reg (:h registers).

Polecenie p wklei zawartość ostatnio zapisanego rejestru, "<symbol>p wstawi to co znajduje się w rejestrze oznaczonym jako <symbol>. Łącząc :reg oraz "<symbol>p można uzyskać wątpliwej wygody kill ring.

YankRing działa jednak dokładnie tak jak kill ring . Jeśli skopiujemy jakiś tekst, <C-p ...

surround.vim i django templates (0)

surround.vim to wtyczka pozwalająca na szybsze wstawianie znaczników otaczających tekst w określony sposób. Sam skrypt zawiera skróty tylko dla nawiasów oraz tagów XML (ponieważ korzysta z text-objects), ale znając wyrażenia regularne, można spróbować napisać własne definicje (:h surround-customizing).

Ponieważ wiele inclusion tagów w Django otacza fragmenty szablonu, dobrym pomysłem może być użycie do ich pisania funkcjonalności surround . Niestety nie udało mi się tego osiągnąć bez pisania paru linijek patcha. Autor w bardzo specyficzny sposób napisał ten skrypt i na pewno nie zamierzał ułatwiać jego rozszerzania, dlatego w pół godziny nie udało mi się osiągnąć niczego więcej poza obsługą wstawiania tagów. Parametrem który dostajemy po nałożeniu łatki jest d (lub D).

Cscope (0)

Czytając kod który napisał ktoś inny, największym problemem jest podążanie za kolejnymi wywołaniami funkcji. Zdarza się też tak, że znam nazwę lub jej fragment i chcę znaleźć wszystkie odwołania. Jak sobie z tym poradzić? Do tej pory używałem grepa uruchamianego przez odpowiedni Vimowy plugin. Rozwiązanie sprawdza się dla projektów z niewielką ilością kodu. Gorzej jeśli na wynik trzeba czekać parę sekund, bo architektura Vima nie pozwala w tym czasie robić cokolwiek innego.

Konkurencyjnym rozwiązaniem jest ctags, który jakoś nie przypadł mi do gustu. Trafiłem jednak na narzędzie o nazwie cscope, które ponoć potrafi jeszcze więcej.

Instalacja

Miłą niespodzianką jest fakt, że aby Vim był w stanie korzystać z cscope, wystarczy skompilować go z flagą --enable-cscope.

Przygotowanie bazy

Aby móc skorzystać ...

Vim Recipes (0)

Kolejna książka o Vim - Vim Recipes. Dostępna między innymi jako PDF i HTML. Źródła przeglądać można na github.

Całej jeszcze nie przejrzałem, ale wygląda obiecująco.

Debugowanie w Pythonie (1)

Każdy o tym wie, wszyscy o tym mówią, ale nikt tego nie robi. Testy, należy pisać testy. Fajnie, jeśli program dodatkowo zapisuje gdzieś ważne w późniejszej analizie działania dane.

Ponieważ ostatnie tygodnie spędzam głównie na debugowaniu dużej aplikacji napisanej w Django, odkryłem lub dopiero doceniłem narzędzia które chyba każdy powinien znać:

  • ipython czyli 'interaktywniejsza' powłoka Pythona

  • pdb i ipdb, czyli interaktywne debugowanie kodu.

  • nose testy i nose-django

  • Grepowanie wszystkich plików w drzewie katalogów: find . -name "*" | xargs grep -i bla, lub jeszcze wygodniej - plugin do Vim

  • Vim NERD tree

  • Odpowiednio skonfigurowane Z Shell to sposób na jeszcze efektywniejszą pracę w konsoli.

  • mpd i ncmpc ;)

Na koniec link - debugowanie kodu w Django - stary, ale wciąż aktualny opis narzędzi przydatnych przy debugowaniu aplikacji ...

Menadżer sesji Vim (0)

Vim używam od ładnych paru lat, ale dopiero od niedawna zacząłem używać go jak IDE. Mnóstwo otwartych zakładek, większość z nich dodatkowo podzielona. W pogotowiu czeka NERDTree i taglist. Krótko mówiąc całe mnóstwo otwartych buforów. Przychodzi jednak koniec dnia, albo Vim umrze w niewyjaśnionych okolicznościach i na nowo muszę wszystko otwierać. Na szczęście istnieją sesje i dzięki :mksession w prosty sposób można zrzucić to wszystko do pliku. Żeby było jeszcze fajniej, napisałem plugin udostępniający prosty interfejs. Instalacja jest banalna - wystarczy zapisać plik w ~/.vim/plugins/, utworzyć katalog ~/.vim_sessions/. Do ~/.vimrc najlepiej dodać skrót:

nmap <F12>  :call SessionManagerToggle()<CR>

A to któtki pokaz możliwości:

:!mkdir testdir
:cd testdir
--> wprowadź jakiś tekst
:w foo1
C^w s
C^w C^w
:e ...
Odzielne okno kompilacji w Vim (0)

Z racji tego, że posiadam macbooka oraz ostatnie dni poświęciłem między innymi na naukę ruby, w chwili słabości zainstalowałem 30 dniową wersję TextMate. Nie będę go oceniał, bo używałem go około 10 minut i kompletnie nie znam jego możliwości, jednak to co od razu rzuciło mi się w oczy to szablony lepsze niż SnippetsEmu. Nie wiem czemu, ale zapragnąłem też żeby podobnie jak w TextMate, to co piszę w Vim kompilowało się/uruchamiało w oddzielnym oknie, plus możliwość szybkiego wysłania wyniku na jakiś serwis nopaste.

Kompilacja/uruchamianie w osobnym oknie

Skrypt napisany został do używania z prawie każdym językiem. Testowany był jednak jedynie dla plików C i Pythona.

Cała moja konfiguracja Vima znajduje się teraz na github, jednak potrzebny będzie ...

Vim: surround plugin (0)

Ostatnie poprawki jakie wprowadzałem w nowym portalu Archa dotyczyły głównie wyglądu. Nowy CSS , poprawki w HTML . Zadanie wyjątkowo nudne, ale kiedyś trzeba to zrobić.

Poprawiając kod, często trzeba zmieniać parami elementy które otaczają inne. Dobrym przykładem jest HTML w którym zmiana tagów jest według mnie szczególnie męcząca. Zamiana tagów, ich odszukanie i skakanie po kodzie potrafi być czasochłonne. Zamiana chociażby zwykłego <span> .. </span> na <div> .. </div> trwa o wiele za długo. Ale może być lepiej, dzięki dostępnemu w Vim surround plugin.

Instalacja

Instalacja, jak prawie każdego plugina Vim jest bardzo prosta. Wystarczy pobrać paczkę i rozpakować w ~/.vim.

W dystrybucji Arch Linux, skrypt dostępny jest w repozytorium community pod nazwą vim-surround.

Wstawianie otoczeń

W aktywnym buforze Vima mam następujący kod ...

awesome revelation (2)

W ostatnim poście opisałem co nowego w awesome 3.1.1, nie zauważyłem jednak czegoś na co od dawna czekałem - moduł revelation.

Użytkownicy OS X mają coś takiego jak exposé. Bardzo wygodna funkcja, szczególnie jeśli mamy tylko jeden pulpit zawalony okienkami. Ten sam pomysł zrealizowany został również na linuksie i dostępny jest chociażby dzięki compizowi. Jednak od 13 listopada 2008, również awesome w wersji developerskiej może się pochwalić, że potrafi skalować okienka. W wersji 3.1.1 biblioteka jest już częścią menadżera okien w wersji stabilnej.

Do pliku konfiguracyjnego (~/.config/awesome/rc.lua) wystarczy dodać

require("revelation")
keybinding({ modkey }, "l", revelation.revelation):add()

Kombinacja Modkey + l przeskaluje i wyświetli okna ze wszystkich pulpitów. Po wybraniu myszką lub strzałkami jednego z ...

awesome 3.1.1 (3)

Wczoraj, w ramach aktualizacji zainstalowałem nowe awesome

# pacman -Qi awesome
Name           : awesome
Version        : 3.1.1-1
...
Build Date     : Sun 18 Jan 2009 05:07:05 PM CET
Install Date   : Thu 22 Jan 2009 10:28:11 PM CET
Description    : A tiling window manager initialy based on a dwm code rewriting.

Zmiany nie są tak duże jak jeszcze jakiś czas temu. Kodu przybywa w coraz mniejszych ilościach. Program osiągnął już według mnie stan, w jakim bez problemu można go używać. Docenić należy przede wszystkim fakt, że zaimplementowana jest znaczna część ze specyfikacji freedesktop, przez co coraz większa ilość aplikacji działa jak należy.

Jedną z takich aplikacji jest xfce4-panel, który wyróżnia się przede wszystkim dość sporą ilością gotowych wtyczek.

xfce4-panel, awesome panel

Wraz z rozwojem ...

« 2 1 /3 0 »