Zaawansowana edycja w vim II (3)

Od ponad 4 lat do edycji wszystkiego co ma litery używam Vim. Dzięki jego niesamowitym możliwościom konfiguracji, mój vimrc nie raz zmieniał się w zależności od zadań jakim musiał sprostać. Od ponad pół roku pracuje jako programista i chyba nie muszę tłumaczyć jak bardzo praca nad własnym małym projektem różni się od rozwijania aplikacji nad którą pracuje paręnaście osób.

Poniższy opis to zbiór "sztuczek" jakie odkryłem i jakich nauczyłem się używać na co dzień, w pracy nad dużą aplikacją.

Wyszukiwanie

Znalezienie odpowiedniego fragmentu kodu, to zazwyczaj połowa sukcesu. Gdyby projekt zawierał się w paru plikach, każdy byłby w stanie szybko wskazać odpowiednią linijkę. Tylko że nigdy nie wiadomo czego tak naprawdę szukamy, aż do momentu znalezienia. A wtedy i tak ...

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 ...

uzupełnianie w Vim (3)

Pracując w Vim, pisanie długich wyrazów można ułatwić sobie poprzez używanie skrótu <Ctrl-p> lub <Ctrl-n>. Kombinacje dopełniają lub proponują dopełnienie wyrazu stosując bardzo prosty algorytm. Gdy dodatkowo zainstalujemy skrypt SuperTab, uzyskamy auto uzupełnianie przy pomocy <Tab>. Gdy jednak zaczyna się pracę nad projektem który zawiera się w więcej niż 200 liniach i paru plikach, takie proste uzupełnianie może się okazać niewystarczające. Na szczęście <Ctrl-p> i <Ctrl-n> to nie szczyt możliwości Vima.

ctags

Ctags to program indeksujący kod. Pozwala wygenerować plik tags który może być wykorzystany przez inne aplikacje (na przykład Vim) i wygląda na przykład tak:

TAGS_H  tags.h  2;" d
bbpile  bbpile.h    /^typedef struct bbpile$/;" s
bbpile  bbpile.h    /^} bbpile;$/;" t   typeref:struct:bbpile
bbpile_contain  bbpile.c    /^bbpile_contain ...
« 2 1 /2 0 »