Aplikacje które kocham - Emacs, Edytor przez duże “E”
poniedziałek, 30 styczeń 2006, w kategoriach: Emacs, Programowanie
Wybór edytora dla programisty czy webmastera jest sprawą wręcz religijną, i dobrze. W końcu edycja tekstu jest jedną z podstawowych czynności jaką wszyscy bez wyjątku wykonujemy na komputerze, i nieważne czy jest to wypracowanie, e-mail czy też program albo strona www. Dlatego opanowanie dobrego edytora tekstu, może zaoszczędzić nawet zwykłym ludziom niejednokrotnie mnóstwo czasu, a już dla programisty / administratora / webmastera jest koniecznością. Ktoś kto dodatkowo opanuje dobrze shell i jakiś język skryptowy (Ruby, Perl, Python), będzie w stanie zautomatyzować każdą żmudną czynność, osiągając coś w rodzaju unixowej nirvany :> Kto przekonał się o “potędze czystego tekstu”, powinien także poświęcić chwile na pomyślenie jak tą potęge najlepiej wykorzystać.
Pytanie, co to jest dobry edytor? Jakie cechy przydają się podczas codziennych zadań? Oto lista funkcji bez których mi ciężko wyobraźić sobie prace:
Podświetlanie składni - ładnie wygląda, pozwala zorientować się wizualnie w strukturze kodu, a co najważniejsze, jeśli jest dobrze zrobione, pozwala szybko wyłapać jakaś literówke w słowie kluczowym
czy tagu.
Automatyczne wcinanie kodu - bez komentarza, nikt nie lubi ciągle wciskać taba.
Zaawansowana nawigacja - możliwość skoku w przód, skoku w tył czy skasowania słowa/zdania/s-expression(nieustająco usiłuje nauczyć się Lispa)/funkcji/paragrafu jednym klawiszem jest po prostu niezastąpiona.
Dopełnianie - wpisywanie piedziesiąt razy jakiegoś trudnego, długiego słowa np. zautomatyzowany jest bardzo uciążliwe, szczególnie że łatwo w nim o literówke, dla tego miło jest wpisać sobie np. “zaut” i wcisnąć control tab żeby dopełnić wyraz który już w tekście wystąpił. Dobry edytor powinien szukać dopełnień także wśród standardowych funkcji danego języka programowania, w plikach w danym katalogu itp. Im więcej możlwości, tym lepiej.
Możliwość przypisania każdej funkcji każdej możliwej kombinacji klawiszy - sięganie po mysz w trakcie edytowania tekstu jest bardzo upierdliwe. “Pojedyńcze” kombinacje klawiszy przy dużej liczbie funkcji edytora szybko się wyczerpują i są trudne do zapamiętania, dla tego powinno dać się także przypisywać kombinacje “wielokrotne” np. najpierw Control + x, a potem Control + s. Daje to możliwość tworzenia grup skrótów dla danych funkcjonalności, zaczynających się od tego samego klawisza, a różniących jedynie klawiszem drugim. Wszystkie funkcje związane z edytowaniem prostokątym możemy więc przypisać kombinacjom zaczynającym się przykładowo od control r.
Edytowanie prostokątne - chodzi o to, że możemy w tekście zaznaczyć w dowolnym miejscu prostokąt tekstu i usunąć go, bądź też np. dopisać do każdej linii jakąś treść. Ciężkie do wytłumaczenia, ale diablenie przydatne.
Znajdź i zamień z użyciem wyrażeń regularnych, także w wielu plikach - przydaje się od czasu do czasu, ale kiedy już to robi, pozwala zaoszczędzić nawet długie godziny.
Szybka nawigacja - skakanie po plikach w projekcie ze skomplikowaną strukturą katalogów bywa naprawde, naprawde denerwujące i czasochłonne, dlatego wszelkie usprawnienia, sprytne rodzaje dopełniania nazw i odnajdywania plików (jest np. taki standardowy programik locate który tworzy baze plików filesystemie, a później pozwala szybko odnaleźć dany plik po nazwie bez dokładnej ścieżki, więc wystarczy zrobić do niego interfejs w edytorze), są bardzo miło widziane.
Makra - kiedy jakiejś zmiany trzeba dokonać na wielu sekcjach pliku, wtedy te przychodzą z pomocą.
Kompilacja i skakanie do znalezionych błędów - chyba nie wymaga komentarza
Roszerzalność - żeby dopisać te funkcje, których brakuje, albo np. dodać wsparcie dla języka programowania który się właśnie pojawił.
Zwijanie pewnych sekcji pliku (folding, outlining, narrowing) - notatki również trzymam w plikach tekstowych, więc chciałbym mieć możlwiość ich podzielenia na logiczne częśći w edytorze, a takie “chowanie” części dokumentu bywa użyteczne także wielu innych sytuacjach
Widok na pare plików naraz, najlepiej z możliwością skrolowania dwóch okien jednym guzikiem, przydatne np. przy tłumaczeniu z jednego języka na drugi.
Wsparcie dla systemów kontroli wersji
Wstawianie często używanych konstrukcji, z możliwościa wcześniejszego uzupełnienia w nich odpowiednich pól czy ustawienia gdzie ma się znaleźć kursor po tymże wstawieniu.
Zapisywanie sesji - żeby zaczynać pracę tam, gdzie się ją skończyło
Sprawdzanie pisowni
Dostęp do dokumentacji wszelkiej formy wprost z edytora
Edytowanie plików jako inny użytkownik (root), a także na zdalnym komputerze (przez ftp, ssh, scp…)
Historia “schowka”
Uruchomienie polecenia shella na danych liniach dokumentu
Ktoś, kto widział wszystkie te funkcje w praktyce w działaniu, dwie dlaczego uśmiecham się pobłażliwie kiedy słysze o tym jaki to wspaniały jest edytor Xyz, bo potrafi np. cztery z wyżej wymienionych. Od czasu do czasu ktoś wypuszcza coś interesującego, to fakt, np. taki TextMate… Ale krzyczenie wokół, że mamy “nowego króla” jest przesadą, nie da się przeskoczyć długich lat rozwoju najlepszych edytorów na rynku w kilka miesięcy. A już kompletnie nie rozumiem ludzi, którzy najważniejszym narzędziem pracy czynią, nie oszukujmy się, niezłe gnioty. Ale cóż, de gustibus non est disputandum, że posłuże się zwrotem obcojęzycznym.
Emacs zaś, ma to do siebie, że potrafi wszystkie wymienione wyżej rzeczy i jeszcze kupe innych, w dodatku dla każdego możliwego języka, czy to naturalnego (mówie w tym momencie np. o wsparciu dla utf-8), czy programowania. W dodatku przez cały czas twórcy mieli na uwagę efektywność pisania i wraz z nauką zaczyna się ten wkład doceniać - i np. używać Control p i Control n, zamiast kursorów górę i w dół itp. W każdym miejscu mamy też dostęp do różnego rodzaju podpowiedzi i dopełnień, liczba klawiszy jakie musimy wcisnąć jest więc ograniczona do minimum.
To prawda, nauka i konfiguracja wymaga czasu (właściwie trwa całe życie, włączając w to naukę Lispa, jak to zgrabnie ujął autor artykułu, do którego link podaję na końcu) i bywa bolesna, co sam na sobie przerobiłem, ale moim zdaniem warto - wychodzi chyba szybciej niż zmienianie środowiska co pare miesięcy bo obecne przestało wystarczać, albo bo zmieniło się język programowania, albo bo brakuje jakiejś funkcji… Argumenty przeciwników w rodzaju “potrzebuje edytora, a nie systemu operacyjnego” są dość dziecinne, bardzo trudno bowiem o lepszy edytor tekstu, a nikt nikomu nie każe instalować jak leci wszystkich pakietów. A posiadanie kalendarza, przeglądarki www czy kalkulatora bywa w edytora wbrew pozorom bardzo przydatne.
Prawdziwa wada Emacsa leży gdzie indziej - jest nią raczej kwesia przestarzałego interfejsu. Ciężko tu choćby o tab bar, nie wspominając o bajerach jak jakiś graficzny, “przyczepiony” otwieracz plików. Inna sprawa, że przełączanie buforów za pomocą ido-mode jest dwa razy szybsze niż klikanie po tabbarze, ale jednak _możliwość_ “udialogowania” pewnych funkcji byłaby mile widziana. Tak czy tak, Emacs długo jeszcze pozostanie jednym z moich najbardziej ukochanych programów.
Zasoby:
Moja konfiguracja emacsa: http://sztywny.titaniumhosting.com/config.tar.bz2
http://opal.cabochon.com/~stevey/blog-rants/effective-emacs.html - bardzo ciekawy i wartościowy artykuł o emacsie.
http://www.emacswiki.org/cgi-bin/wiki - całe wiki o emacsie, skarbnica wiedzy
http://www.gnu.org/software/emacs/manual/ - manual emacsa w formie html.
Te trzy linki powinny wystarczeć każdemu na długie, naprawde dłuuuuie godziny nauki. Powodzenia.
P. S. Pozdrowienia dla Martineza i Szymona, którzy wciągneli mnie w to wszystko :>
Dodaj do del.icio.us | Dodaj do wykop.pl
Komentarze ():
sztywny, 30 styczeń 2006, 11:01 pm
Speedbar jest mojej definicji niezbyt “graficzny”, chodzi mi o coś takiego jak ma prawie każdy edytor teraz, osadzoną kontrolkę z drzewkiem plików, tak że razem mam jedno okno itp. Nie to żeby mi tego bardzo brakowało, ale fajnie by było mieć do wyboru zarówno robienie pewnych rzeczy w sposób “masta-hacka”, a robieniem ich poprzez interfejs graficzny. A dla takich rzeczy w Emacsie w tej chwili totatlnie nie ma wsparcie, ba, nie ma nawet wygładzania czcionek pod Linuxem (chociaż, o ironio, jest pod Windowsem) :S To jest jedyna chyba rzecz, w której wiele innych edytorów ma jakąś przewagę nad emacsem.
sztywny, 31 styczeń 2006, 12:01 pm
O jeny, chodzi o idee przecież, a to tylko przykład :D W emacsie prawie nic nie da się wygodnie zrobić z ubogiego GUI, a czasem jest to bardziej efektywne niż klepanie z keyboardu, to wszystko.
martinez, 31 styczeń 2006, 12:01 pm
Ok, ale po co? Zasłania toto 1/5 ekranu, szkoda miejsca. W Eclipse może wygląda fajnie, ale nigdzie indziej.
Poza tym, trzeba sięgać ręką do myszy, to nieefektywne jest. ;)
martinez, 2 luty 2006, 11:02 pm
A czemu nazwałeś go Config Patrysa, skoro to pliki sztywnego? :S
sztywny, 2 luty 2006, 11:02 pm
Jakiego znowu patrysa? Z tego co widzę to config sztywnego :>
kameowy, 2 luty 2006, 11:02 pm
dla leniwych co nie chcą rozpakowywać config.tar.bz2 polecam: config patrysa
Szymon Stanisławowicz, 12 marzec 2006, 11:03 pm
Niezły ten konfig, mój się chowa..