Komputery, oprogramowanie, internet i okolice
Kategorie: Wszystkie | Aplikacje | Blog | Dev | Hacks | Linux | Subversion | Varia | gry | khoomei | książki | mjuzik
RSS
czwartek, 29 kwietnia 2010

Wczoraj podczas czyszczenia klawiatury wpadł mi do głowy pewien genialny pomysł. Aż zacząłem się obawiać, czy nie odpadnie mi stopa (czasem tak się zdarza). Już tłumaczę o co chodzi.

Czy zastanawialiście się, który z klawiszy jest najrzadziej używany? Oczywiście nie licząc ScrollLock oraz Pause Break. Wiele osób pewnie wskaże Insert. Jest to jednak bardzo użyteczny klawisz, z którego bardzo często korzystam. Ctrl-Insert kopiuje zaznaczony tekst, a Shift-Insert wkleja. Działa to praktycznie wszędzie, również w konsoli. Nie wyobrażam sobie korzystania z klawiatury, na której Insert jest umieszczony w jakimś dziwnym miejscu (a już z kilkoma takimi się spotkałem). Jeśli więc nie Insert, to co?

A kiedy ostatnio korzystaliście z CapsLocka? Ja korzystam z niego bardzo rzadko i w sumie tylko mnie denerwuje. Zwłaszcza, że umieszczony jest w bardzo korzystnym miejscu - środkowy rząd klawiszy, praktycznie tuż pod małym palcem lewej ręki. Przecież mógłby się do czegoś przydać a nie leżeć odłogiem i tylko przeszkadzać jeśli przypadkowo się go naciśnie. Gdy to sobie uświadomiłem doznałem olśnienia, prawie jak Pomysłowy Dobromir.

Kandydat do zajęcia miejsca CapsLocka był tylko jeden - klawisz Escape. Po przesiadce na edytor Vim i Vimperatora stał się moim dobrym przyjacielem. Niestety na dzisiejszych klawiaturach nie jest on umieszczony w tak wygodnym miejscu jak na terminalu ADM-3A. Zacząłem szukać sposobu na bezbolesną zamianę. Google pokazywało jakieś rozwiązania ze skryptami w bashu i użyciem xmodmap. Na szczęście jest prostszy sposób. Wystarczy wejść do menu (System →) Preferencje → Klawiatura → Układy → Inne opcje (może się to trochę inaczej nazywać) → CapsLock key behavior i zaznaczyć Swap ESC and CapsLock. (EDIT: To oczywiście w Gnome. Kak to zrobić w KDE, czy w Windowsie niestety nie wiem. Nie powinno być jednak jakimś wielkim problemem)

Muszę przyznać, że jest to rozwiązanie niesamowicie wygodne. Koniec z sięganiem gdzieś daleko w lewy górny róg klawiatury! Jeszcze czasem z przyzwyczajenia sięgam do ESC, ale to kwestia kilku dni na przestawienie się.

17:45, kosciak1 , Hacks
Link Komentarze (12) »
poniedziałek, 26 kwietnia 2010

Jak powszechnie wiadomo w Linuksie konsola fajna jest. Gdy już poznamy kilka prostych sztuczek okazuje się, że bardzo wiele czynności w konsoli można wykonać o wiele wygodniej i szybciej, niż gdybyśmy mieli przeklikiwać się przez różne okienka. Dziś o jednej z takich sztuczek, jakie oferuje powłoka bash.

Brace expansion

Mechanizm Brace expansion polega na rozwijaniu wyrażeń znajdujących się w nawiasach klamrowych. Do dyspozycji mamy:

  • Rozwinięcie listy: {element1,element2,elementN}
  • Rozwinięcie sekwencji znaków lub liczb: {START..STOP}
  • Dołączanie przedrostka i/lub przyrostka do rozwijanych elementów: przedrostek{foo,bar}przyrostek
  • Powyższe można łączyć ze sobą

Oto kilka przykładów działania brace expansion:

$ echo {foo,bar,baz}
foo bar baz
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
$ echo {10..1}
10 9 8 7 6 5 4 3 2 1
$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo {z..a}
z y x w v u t s r q p o n m l k j i h g f e d c b a
$ echo kot_{1..3}
kot_1 kot_2 kot_3
$ echo {biały,czarny}_kot
biały_kot czarny_kot
$ echo foo_{1,2}_bar
foo_1_bar foo_2_bar
$ echo {{a..z},{A..Z}}
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
$ echo {A..C}{0..3}
A0 A1 A2 A3 B0 B1 B2 B3 C0 C1 C2 C3

W bashu 4.0 wprowadzono jeszcze dwa ułatwienie, uzupełnianie o wiodące zera i określenie skoku inkrementacji sekewncji

$ echo {01..10}
01 02 03 04 05 06 07 08 09 10
$ echo {1..10..2}
1 3 5 7 9
$ echo {a..z}
a c e g i k m o q s u w y

Brace expansion w praktyce

Wszystko pięknie, ładnie, rozwija i wypisuje, OK. Ale do czego to się może przydać? Jak niby ma to pomóc w codziennej pracy? Na przykład w sytuacjach takich jak poniżej.

Najczęściej pojawiającym się przykładem jest tworzenie za jednym razem całej struktury katalogów:

$ mkdir -p ~/projekty/nowy-projekt/{trunk,tags,branches}
$ mkdir -p zdjęcia/{rodzina,zwierzaki/{koty,psy}}

Kasowanie wielu plików na raz:

$ rm picture_{1..100}.jpg
$ rm /bardzo/długa/ścieżka/której/nie/chce/nam/się/pisać/{plik1,plik2,plik3}

Wylistowanie tylko plików z wybranymi rozszerzeniami:

$ ls *.{png,jpg,gif}

Pobranie archiwum podzielonego na kilka części:

$ wget http://example.com/download/plik.r0{1..5}

Tworzenie kopii pliku, lub zmiana nazwy:

$ mv ~/.bashrc{,.bak}
$ cp ~/.bashrc{,.bak}

By później sprawdzić jakie dokładnie wprowadziliśmy zmiany:

$ diff ~/.bashrc{.bak,}

Prawda, że proste?

16:17, kosciak1 , Linux
Link Komentarze (1) »
czwartek, 22 kwietnia 2010

Jedną z ważniejszych czynności jaką należy wykonać podczas konfiguracji edytora tekstu jest wybór odpowiedniego schematu kolorów. Dobrze dobrane kolory sprawiają, że praca nad kodem to czysta przyjemność, wszystko widać jak na dłoni, nie musimy domyślać się co jest czym. Natomiast niewłaściwe kolory to najprostsza droga do piekących oczu, bólu głowy i narastającej frustracji. Dlatego dzisiaj kilka słów o doborze schematu kolorów w vimie.

Galeria schematów kolorów

vimcolorschemetest

Domyślnie w vimie dostępnych jest kilkanaście schematów kolorów, zarówno tych jasnych, jak i ciemnych. Jeśli ktoś nie ma jakichś szczególnych wymagań powinien wybrać z tego coś dla siebie. Jeśli natomiast domyślne schematy to mało zawsze można poszukać czegoś nowego. Na stronie vim.org w dziale scripts znaleźć można ponad 400 schematów kolorów. Sporo.

By oszczędzić sobie ręcznego ściągania i testowania kolejnych schematów można skorzystać z vimcolorschemetest. Jest to galeria zawierająca wygenerowane zrzuty 428 schematów kolorów. Można przeglądać jak w danym schemacie wygląda kolorowanie kodu w językach HTML, Java, C, Perl i LaTeX. Dla ułatwienia rozdzielono schematy jasne i ciemne. Strony galerii są bardzo duże i potrafią sprawić problemy

Gdy już wybierzemy coś dla siebie wystarczy wrzucić ściągnięty schemat do katalogu ~/.vim/colors i ustawić go za pomocą :colorscheme nazwa

CSApprox

Jeśli ktoś używa gvima nie powinien mieć żadnych problemów. Natomiast jeśli ktoś woli vima w konsoli... to pewnie już się przekonał, że coś jest nie tak przeglądając domyślne schematy. Niestety większość schematów kolorów jest pisana z myślą o środowisku graficznym, a jeśli nawet są ustawione kolory dla środowiska konsolowego to raczej nie wykorzystują dostępnej palety 256 kolorów. Kolory wyglądają źle lub bardzo źle...

Rozwiązaniem problemu jest plugin CSApprox, który całkiem sprawnie znajduje odpowiedniki kolorów kolorów, by schematy na konsoli wyglądały podobnie jak w gvimie. Wystarczy ściągnąć paczkę i rozpakować w katalogu ~/.vim oraz zgodnie z instrukcją dodać dokumentację. Poniżej kilka przykładów CSApprox w akcji - po lewej gvim, po prawej na zmianę vim w 8 kolorach, 256 kolorach oraz 256 kolorach z użyciem CSApprox.

vim vs gvim - evening colorscheme
Schemat evening - w 8 kolorach nie jest tak źle, w 256 wygląda już bardzo źle.

vim vs gvim - darkblue colorscheme
Schemat darkblue - nie wygląda w konsoli źle, choć pewno nie jest ciemnoniebieski, z CSApprox trochę lepiej, ale szału nie ma.

vim vs gvim - desert colorscheme
Schemat desert - bardzo przyjemny, miły dla oka, ciemny schemat. Bez CSApprox w konsoli jest zupełnie nie do użytku.

vim vs gvim - default colorscheme

Schemat defaultowy - w przeciwieństwie do wcześniejszych najlepiej wygląda w konsoli z 256 kolorami. W gvimie kolory wydają się zbyt intensywne.

22:09, kosciak1 , Linux
Link Dodaj komentarz »
wtorek, 20 kwietnia 2010

A teraz, proszę Państwa, coś naprawdę niesamowitego. Wręcz epickiego. Chyba nie skłamię mówiąc, że jest to jedna z najlepszych rzeczy jakie ostatnio widziałem. W dodatku z godziny na godzinę, z dnia na dzień staje się coraz lepsza. Coraz zabawniejsza, coraz ciekawsza i coraz bardziej wciągająca. Oto przed Państwem...

PlayPen

PlayPen

Czym jest PlayPen? Dobre pytanie! To zdecydowanie coś więcej niż tylko hipertekstowa opowieść, przedstawiona za pomocą rozpikselowanych obrazków, przypominających grafikę z komputerów 8-bitowych. PlayPen to cały świat powstający na naszych oczach. Świat pełen specyficznego humoru i dziwnych skojarzeń. Miejscami trochę psychodeliczny, dziecinny i wulgarny zarazem.

Powyższa animacja to tylko przedsmak tego co znajdziemy w tym przedziwnym świecie. W dodatku w każdym momencie możemy włączyć się w jego tworzenie dorysowując nowe plansze, postacie, kolejne elementy historii. Jedyne co nas i innych odwiedzających ogranicza to wyobraźnia. Dzięki temu za każdym razem gdy wejdziemy na PlayPen będą na nas czekać nowe miejsca do zwiedzenia.

Kto by pomyślał, że można wykorzystać silnik MediaWiki do tak niesamowitych rzeczy. Mam tylko nadzieję, że PlayPen nadal będzie się rozwijał w dobrym kierunku i nie zostanie zniszczony przez internetowych wandali.

EDIT: A tutaj tumblog Best of PlayPen, na którym zbierane są najlepsze prace powstałe w serwisie.

09:16, kosciak1 , Varia
Link Komentarze (2) »
niedziela, 18 kwietnia 2010

W zeszłym tygodniu w Laboratorium Gmail pojawiła się nowa funkcja Zagnieżdżone etykiety (Nested Labels). Pozwala ona wyświetlać etykiety w formie drzewka, upodobniając je do drzewa folderów (wcześniej podobną funkcjonalność oferował skrypt Greasemonkey Folders4Gmail). Niestety domyślnie wszystkie etykiety są zwinięte. Jeśli ktoś jak ja ma zdefiniowanych kilkadziesiąt etykiet w formie rozbudowanego drzewa to może być problemem. Dlatego mając chwilę wolnego czasu napisałem skrypt rozwijający wybrane etykiety.

Zagnieżdżone etykiety

By uruchomić tą funkcję należy wejść do Ustawień Gmaila, przejść do Laboratorium (Labs) i włączyć Zagnieżdżone etykiety (Nested Labels). Następnym krokiem jest stworzenie odpowiedniej struktury etykiet. Poszczególne poziomy drzewa rozdzielamy za pomocą /. Musimy też pamiętać o utworzeniu etykiet dla wszystkich poziomów drzewa. I tak po utworzeniu etykiet Praca, Praca/Pilne, Praca/Klienci, Praca/Klienci/Nowak, Praca/Klienci/Kowalski otrzymamy takie oto drzewko:

Gmail - zagnieżdżone etykiety

W dodatku przy dostępie za pomocą protokołu IMAP również będziemy widzieć strukturę folderow.

Gmail - auto expand Nested Labels

Skrypt Gmail - auto expand Nested Labels automatycznie rozwija wybrane elementy drzewka zakładek po uruchomieniu Gmaila. Jeśli ktoś ma kilkanaście, kilkadziesiąt etykiet tworzących rzbudowaną strukturę ten wie, że ręczne rozwijanie drzewka jest bardzo denerwujące.

Instalacja

Dla posiadaczy Firefoxa:

  1. Instalujemy Greasemonkey
  2. Wchodzimy na stronę skryptu Gmail - auto expand Nested Labels
  3. Klikamy w wielki przycisk "Install"
  4. Uruchamiamy menu NarzędziaGreasemonkeyZarządzaj skryptami, wyszukujemy na liście "Gmail - auto expand Nested Labs" i klikamy edytuj
  5. Przypisujemy zmiennej autoExpand listę etykiet, które mają być automatycznie rozwijane. Należy pamiętać o odpowiedniej wielkości liter ('praca' i 'PRACA' to nie jest to samo), etykiety nadrzędne zostaną rozwinięte automatycznie. Przykład:
    var autoExpand = ['Praca/Klienci', 'powiadomienia'];

Skrypt działa zarówno dla zwykłego Gmaila, jak i dla poczty Gmail we własnej domenie.

Posiadacze innych przeglądarek muszą poradzić sobie sami. Pod Google Chrome nie chce działać symulowania kliknięcia. Nie wiem czy to problem z nieprawidłowym eventem, czy jakiś błąd wykonywania element.dispatchEvent(evt), jeśli ktoś zna rozwiązanie niech da znać.

Changelog:

  • 0.1.1 - poprawka po dzisiejszej zmianie w Gmailu
  • 0.1 - pierwsza wersja
15:32, kosciak1 , Dev
Link Komentarze (2) »
czwartek, 15 kwietnia 2010

Przygotowując poprzedni wpis o kolorowaniu konsolowych narzędzi jakoś umknął mi jeszcze jeden bardzo pożyteczny srypt, który ułatwi pracę z Subversion.

ColorSVN

colorsvn

Narzędzie colorsvn koloruje informacje o zmianach w plikach (svn status, svn add, svn checkoout, etc), dzięki niemu od razu widać które pliki zostały dodane, które zmienione, a które usunięte.

Niestety w przeciwieństwie do wspomnianego poprzednio colordiff w repozytorium Ubuntu nie znajdziemy gotowej paczki dla ColorSVN. Na szczęście instalacja jest banalnie prosta.

  1. Ściągamy źródła z działu Downloads projektu:
    $ wget http://www.console-colors.de/downloads/colorsvn/colorsvn-0.3.2.tar.gz
  2. Rozpakowujemy paczkę:
    $ tar xvfz colorsvn-0.3.2.tar.gz
  3. Przechodzimy do katalogu ze źródłem i instalujemy:
    $ cd colorsvn-0.3.2/
    $ .configure
    $ make
    $ sudo make install
  4. Jeśli, jak radziłem w poprzednim wpisie mamy ustawioną zmienną $TERM o wartości xterm-256color musimy jeszcze dopisać ten typ terminala do pliku konfiguracyjnego (gdzie przy okazji możemy zmienić też definicje kolorów). W linii 15 pliku /etc/colorsvnrcdopisujemy xterm-256color
  5. Teraz już tylko pozostało dopisać do ~/.bashrc odpowiedni alias:
    alias svn='colorsvn'

Jeśli wszystko wykonaliśmy poprawnie możemy już się cieszyć jeszcze wygodniejszą pracą z Subversion.

Na marginesie dodam, że na stronie projektu znaleźć można jeszcze między innymi ColorCVS, ColorMake i ColorGCC

wtorek, 13 kwietnia 2010

Dzisiaj Google wprowadziło gadżet, na który wielu bloggerów czekało od dawna - przyciski Google Buzz, dzięki którym czytelnicy mogą napisać na Buzzie o czytanej właśnie notce. Wcześniejsze rozwiązania, jak na przykład przyciski Buzrr.com wykorzystywały mechanizm polecania wpisów w Google Readerze. Teraz można już wysyłać bezpośrednio na Buzza.

Wygląd przycisku

Narzędzie służące do wygenerowania kodu HTML przycisków można znaleźć pod adresem google.com/buzz/stuff Obecnie mamy do wyboru jedynie przyciski do publikacji wpisów oraz przycisk śledzenia użytkownika, jednak adres sugeruje, że to dopiero początek dodatków dla Buzza.

Po wybraniu przycisku do publikacji w Buzz dostępnych jest kilka różnych wersji do wyboru:

Przycisk Google Buzz

Odpowiedni kod HTML zostanie wygenerowany w polu tekstowym poniżej.

Instalacja przycisku na Blox

Instalacja jest banalnie prosta. Wystarczy przejść do panelu administracyjnego Blox, wejść w Ustawienia, wybrać Wpisy, a następnie wkleić wygenerowany kod w pole Dodaj pod każdym wpisem. By ułatwić właściwe ostylowanie dobrze jest dodać unikalny atrybut, na przykład id="przycisk_buzz"

<a id="przycisk_buzz" title="...

Teraz podczas edycji CSS możemy odwoływać się do przycisku Google Buzz za pomocą #przycisk_buzz, by ustalić jego dokładne położenie.

Efekt można zobaczyć pod poniżej (na stronie wpisu). A tutaj możecie przeczytać jak zainstalować przycisk RE.BLIPI, który znajduje się tuż obok.

Skryptozakładka "Publikuj w Google Buzz"

Przy okazji przygotowałem skryptozakładkę (czyli fragment kodu Javascript uruchamianego jako zakładka). Wystarczy przeciągnąć poniższy odnośnik do paska zakładek (lub po prostu dodać wskazany adreso-skrypt jako zakładkę):

Publikuj w Google Buzz

Teraz po kliknięciu w zakładkę powinno otworzyć się okienko dodawania nowego buzznięcia. Działa w Firefoxie, Chrome i Operze.

Zauważyłem, że ostatnio coraz więcej czasu spędzam pracując w konsoli. Niewątpliwie jest to jeden ze skutków ubocznych poznawania Vima, który z każdym dniem coraz bardziej mi się podoba. Podczas prac nad jego konfiguracją natknąłem się na problem ilości dostępnych kolorów dostępnych. Polecenie tput colors zwracało 8, mimo że zarówno gnome-terminal jak i xterm potrafią wyświetlić 256 kolorów (co można sprawdzić uruchamiając skrypt colortest.pl). Przy okazji rozwiązywania tego problemu zająłem się "kolorowaniem" kilku narzędzi.

bash

bash - 256 kolorów

Pierwszą rzeczą jaką musimy zrobić to pobranie paczki ncurses-term - zawiera ona między innymi definicję terminalu xterm-256colors, którą zamierzamy ustawić. Teraz pora na edycję ~/.bashrc i ustawienie zmiennej $TERM, wystarczy dopisać następujący fragment:

if [ -e /usr/share/terminfo/x/xterm-256color ]; then
    export TERM='xterm-256color'
else
    export TERM='xterm-color'
fi

Przy kolejnym uruchomieniu konsoli powita nas kolorowy znak zachęty. Jeśli nie podobają nam się jego domyślne ustawienia możemy je zmienić ustawiając zmienną $PS1

ls, grep

Tu sprawa jest dosyć prosta, wystarczy uruchomić ls lub grep z --color=auto (auto, by nie było problemu z zapisaniem wyniku ls do pliku). Najprościej ustawić w ~/.bashrc odpowiednie aliasy:

alias ls='ls --color=auto'
alias grep='grep --color=auto'

Jednak problem pojawia się, gdy chcemy użyć jakiegoś pagera (more, less, czy też most). Podobnie jak w przypadku zapisu wyniku polecenia do pliku, tak i przy użyciu potoku (z ang. pipeline) znaki sterujące kolorami nie są wysyłane. Musimy użyć --colors a w przypadku użycia less dodatkowo wywołać go z -r, na przykład:

ls -al | less -r

Pagery more i most w domyślnych ustawieniach nie mają problemu z kolorami.

diff

colordiff

Kolejnym narzędziem proszącym się o kolory jest diff. Z pomocą przychodzi colordiff - skrypt koloryzujący wynik pracy diff. Jest on dostępny w repozytorium Ubuntu. Teraz wystarczy w ~/.bashrc ustawić alias diff='colordiff' i od razu robi się o wiele czytelniej.

W przypadku Subversion konieczna będzie jeszcze zmiana w ~/.subversion/config i ustawienie właściwego narzędzia do wyświetalania różnic między wersjami.

man

Kolorowy man

Na koniec jak pokolorować pliki pomocy. Jednym z rozwiązań jest użycie most do wyświetlania dokumentacji. Wystarczy ustawić zmienną $MANPAGER='/usr/bin/most' lub uruchamiać man w następujący sposób:

man --pager=most [temat] 

Niestety most nie wykorzystuje skrótów klawiaturowych Vima. Dlatego zdecydowałem się na drugie rozwiązanie, polegające na dodaniu do ~/.bashrc następujących linii:

export LESS_TERMCAP_mb=$'\E[01;31m'       # begin blinking
export LESS_TERMCAP_md=$'\E[01;38;5;74m'  # begin bold
export LESS_TERMCAP_me=$'\E[0m'           # end mode
export LESS_TERMCAP_se=$'\E[0m'           # end standout-mode
export LESS_TERMCAP_so=$'\E[33;01;44m'    # begin standout-mode - info box
export LESS_TERMCAP_ue=$'\E[0m'           # end underline
export LESS_TERMCAP_us=$'\E[04;38;5;146m' # begin underline

Kolory oczywiście można sobie dowolnie pozmieniać. By zrozumieć o co chodzi z tym całym \E[...m można zerknąć na przykład tutaj.

czwartek, 08 kwietnia 2010

Czytając o planowanej na dzisiaj przerwie technicznej Bloxa zdałem sobie sprawę, że nie mam na dysku kopii zapasowej bloga. Postanowiłem jakoś temu zaradzić. Dostępny jest ciekawie wyglądający program DeBergeraca pod tytułem Blex, jednak ze względu na użycie platformy .NET na Linuksie nie dane mi z niego skorzystać. Nie pozostało nic innego jak zerknąć do API Bloxa i napisać własne narzędzie.

Blox-exporter

Skrypt blox-exporter napisany jest w Pythonie i służy do pobierania i archiwizowania treści wpisów na blogach umieszczonych na platformie Blox.pl. Skrypt można pobrać z działu Downloads projektu (znaleźć tam można również skrypt dropbox-index), lub z repozytorium Subversion. Po ściągnięciu wystarczy skrypt uruchomić, zapytani zostaniemy o login i hasło do Bloxa, następnie musimy potwierdzić chęć pobrania naszych blogów. Pełna instrukcja obsługi wyświetli się po wywołaniu skryptu z --help

Po uruchomieniu w bieżącym katalogu utworzona zostanie struktura plików podobna do poniższej:

/nazwa_bloga
/2010
    /01
      /tytul_notki.html
  /index.html
  /resources.html

Plik index.html zawiera spis wszystkich wpisów (wraz ze szkicami) w kolejności chronologicznej. Plik resources.txt zawiera spis zasobów (wszystkie użyte obrazy i pliki z zasobów Blox linkowane we wpisach). By je pobrać polecam użycie programu wget. Wykonanie polecenia:

wget -i resources.txt -P resource

Spowoduje pobranie wszystkich wyszczególnionych w resources.txt plików do folderu /resource

Skrypt testowałem na Ubuntu z Pythonem 2.5 oraz na Windows z Pythonem 2.6. Niestety pod Windowsem są problemy z wyświetlaniem polskich znaków w konsoli i szczerze powiedziawszy na razie nie chce mi się szukać rozwiązania, te kilka "krzaczków" jakoś specjalnie nie powinno przeszkadzać.

Jeśli mi się będzie chciało (lub dostatecznie dużo osób wyrazi takie zapotrzebowanie) i znajdę trochę czasu to może w przyszłości dodam pobieranie tagów do notek, generowanie stron dla poszczególnych kategorii, eksport do BlogML i poprawię wygląd generowanych stron.

17:27, kosciak1 , Dev
Link Komentarze (6) »
środa, 07 kwietnia 2010

Do Vima podchodziłem już wiele razy. Po raz pierwszy zakończyło się jak w starym kawale1, zupełnie spanikowałem gdy żaden ze znanych mi skrótów klawiaturowych nie działał jak należy. Potem próba zrobienia tutoriala, dobrnąłem może do połowy. Jakiś czas później kolejna i kolejna. Z jednej strony przerażała mnie wizja nauki tych wszystkich dziwnych komend, z drugiej coś niesamowicie mnie w Vimie fascynowało i przyciągało. Wiedziałem, że w końcu uda mi się go zrozumieć, a może nawet pokochać.

Dawno, dawno temu...

ASR33
Zdjęcie autorstwa DanCentury na licencji CC-BY-SA

Dawno temu, gdy komputer zajmował spory pokój, a dinozaury chodziły po ziemi, do obsługi komputera używano dalekopisów (TeleTYpe). Użytkownik wpisywał na klawiaturze odpowiednie komendy, a komputer za pomocą drukarki wypluwał odpowiedź. Właśnie z myślą o takim sposobie komunikacji z komputerem powstawały wierszowe edytory tekstu. Wierszowe, gdyż pracowało się z nimi na pojedynczych liniach tekstu.Takim właśnie edytorem był napisany na przełomie 1965 i 1966 roku QED.

Na jego podstawie Ken Thompson napisał edytor ed, standardowy edytor tekstowy systemu UNIX. To właśnie sposób implementacji wyrażeń regularnych w edytorze ed wpłynął na powstanie takich narzędzi jak sed (stream editor) czy grep (global/regular expression/print). Ale wróćmy do edytorów tekstu. Rozwinięciem ed'a był napisany przez Billa Joy'a ex (EXtended), zawierał on wiele zmian ułatwiających edycję plików. Najważniejszą z nich było wprowadzenie trybu wizualnego, który wkrótce przerodził się w samodzielny edytor. Tak właśnie, w 1976 roku, powstał vi.

Vi powstawał już dla terminali z monitorami (Bill Joy używał terminala Lear-Siegler ADM-3A), wyświetlanie więcej niż jednej linii tekstu było już więc możliwe. Nadal jednak ograniczeniem była prędkość ówczesnych modemów.

Filozofia ZenVi(m)

Dlaczego tyle miejsca poświęciłem (pre)historii? Bo wydaje mi się, że poznanie kontekstu w jakim powstawał edytor vi pozwala lepiej zrozumieć i docenić dlaczego wygląda on i zachowuje się akurat tak a nie inaczej. Dlaczego jest tak różny od edytorów jakie używane są obecnie.

Tym co najbardziej na początku dziwi to modalność. Po pierwsze trzeba sobie uzmysłowić, że wpisywanie tekstu zajmuje tylko część czasu poświęcanego na edycję tekstu, czy kodu. O wiele więcej czasu spędzamy na poruszaniu się po tekście szukając miejsc, które wymagają poprawek. Dzięki wydzieleniu osobnych trybów do poruszania się po tekście, wykonywania poleceń i wpisywania tekstu, każdy z nich może może posiadać własny zestaw skrótów klawiaturowych i komend. Można więc do poruszania się po tekście wykorzystać klawisze leżące tuż pod palcami (korzystając z vi palce cały czas leżą na rzędzie podstawowym), bez potrzeby tworzenia niewygodnych skrótów z użyciem Ctrl, Shift, Alt.

Drugi problem to mnogość komend. Gdy jednak rozpoczniemy naukę vi przekonamy się, że wszystkie te komendy są do bólu logiczne i bardzo łatwe do zapamiętania. Przyjrzyjmy się przykładom edycji tekstu. Przejście do trybu wpisywania do tekstu to i (jak insert), lub a (jak append), kasowanie słowa to dw (jak delete word), zmiana 3 słów to c3w (jak change 3 words). Poruszanie się po tekście jest równie proste. Przejście do kolejnego słowa to w (jak word), na koniec słowa e (jak end), poprzednie słowo to b (jak back). I tak jest praktycznie ze wszystkimi komendami. Prościej chyba się nie da.

Obsługa vi to tak na prawdę rozmowa. Jak w powyższym przykładzie zmiany słów po prostu mówimy (i to praktycznie pełnym zdaniem!) co chcemy zrobić. Zmień znak, zmień tekst do końca linii, kasuj 2 słowa, kopiuj zdanie, kopiuj linię, idź do następnego zdania, idź do poprzedniego akapitu, ustaw wcięcie dla bloku tekstu objętego nawiasami klamrowymi, przejdź do kolejnego wystąpienia znaku. Wykonujemy polecenie na zakresie tekstu wskazanym przez ruch, lub na obiekcie tekstowym. Zamiast skakać strzałkami pomiędzy znakami możemy operować logicznymi fragmentami edytowanego tekstu. Jednym słowem maksymalna efektywność minimalnym kosztem.

Do tego możliwość zapamiętywania miejsc w tekście, wiele schowków, obsługa wyrażeń regularnych, rozbudowane komendy edytora ex, możliwość tworzenia makr, wielkie możliwości konfiguracyjne i gigantyczna baza pluginów. To wszystko sprawia, że vi jest bardzo uniwersalnym edytorem, który można dostosować do praktycznie każdego zadania. Do tego Vim dodaje szereg nowych możliwości, jak choćby możliwość pracy na wielu plikach jednocześnie (dzielenie okna, praca z kartami).

Jak się nauczyć?

Przede wszystkim nie można się bać vim'a. Owszem, wymaga on trochę czasu na zrozumienie sposobu działania, lecz nie jest taki straszny jak mogłoby się wydawać. Wystarczy kilka razy przerobić vimtutor, by nauczyć się podstaw pozwalających na swobodne poruszanie się po pliku i podstawową edycję. Potem zerknąć na ściągawkę oraz to wprowadzenie do vima. W wolnych chwilach dobrze jest też przeczytać sobie :help (świetnie napisany!). Choć i tak najważniejszy by po prostu zacząć używać vim'a na codzień.

________________
1 Jak wygenerować losowy ciąg znaków? Posadzić laika przed Vim'em i kazać mu wyjść z programu. (powrót)

 
1 , 2
Spis Treści
Kanały RSS
Add to Google
Add to Netvibes