Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

O tym, jak vimiarz przeszedł na Emacsa

W poprzednim wpisie wspominałem, że będzie jeszcze coś o Emacsie. No to jest. Dość niespodziewany zwrot akcji, nawet dla mnie.

Myśl o poznaniu Emacsa chodziła mi po głowie już od wielu miesięcy. Jakieś podstawy znałem, ale niewiele ponad to. Co mnie skłoniło do przejścia do "obozu wroga" i jakie są moje przemyślenia?

Potrzeba rozwoju

Wiem, że brzmi to jak jakiś nonsens, ale jednym z moich większych problemów stała się przesadna znajomość Vima. Oczywiście nie wiem WSZYSTKIEGO, ale coraz rzadziej odkrywałem w nim coś nowego. Czułem, że potrzebuję nowego wyzwania. Jak się potem okazało, to wyzwanie mnie przytrzymało na dłużej.

Interakcja z zewnętrznymi procesami

Jedną z największych bolączek Vima jest brak możliwości interakcji z zewnętrznymi procesami bez dużego kombinowania. Najbardziej widać to, gdy trzeba debuggować jakiś program. Niby jest projekt Clewn, ale nigdy nie udało mi się go zmusić do działania. W Emacsie po prostu włączam M-x gdb i debugguję jakby nigdy nic. Jak jeszcze dodam potem M-x gdb-many-windows, to zaczynam się zastanawiać po co są nakładki w stylu ddd (które mi jakoś w ogóle nie podchodzi). Przyznam się, że większą przygodę z Emacsem zacząłem właśnie od debuggowania. Najpierw szukałem błędów Emacsem, a naprawiałem Vimem, potem już mi się nie chciało skakać po oknach i naprawiałem już w Emacsie, a na końcu prewencyjnie włączałem Emacsa "bo może będę debuggował".

Wewnętrzny język skryptowy

Na początku wyjaśnijmy sobie jedną rzecz. Vimscript nadaje się świetnie do torturowania wrogów i chyba tylko do tego. Proste rzeczy można w nim zrobić, ale przy bardziej zaawansowanych zadaniach czuć, że ten język był tworzony na przestrzeni wielu lat i dopiero niedawno stał się czymś bardziej rozbudowanym.
Z kolei Elisp używany w Emacsie jest jednym z dialektów poważnego języka jakim jest Lisp. Składnia jest trochę nietypowa, ale można się przyzwyczaić i ma ona swój urok. Używanie Lispa jako główny język edytora ma jeszcze tę zaletę, że kod lispowy można wsadzić niemal wszędzie - w szablon, w wartość zmiennej konfiguracyjnej, podobno nawet w RegEx.
Jako bonus, konfigurując Emacsa uczymy się języka, który być może przyda nam się kiedyś w naszym życiu zawodowym. W Vimscripcie się raczej nie pisze poza Vimem. :P

Uczucie "zaplanowania"
W Emacsie aż czuć, że to wszystko zostało dokładnie przemyślane. Po prostu wszystko do siebie pasuje. Ciężko mi to bardziej opisać. Emacs był od razu planowany jako rozbudowany edytor. Vi, pradziad Vima, był prostym edytorem z nietypowym obłożeniem klawiszy. Przykładem znacznie lepiej przemyślanej funkcji jest wprowadzanie ścieżek - Emacs obsługuje tzw. fuzzy matching jeszcze lepiej niż zsh, z którego to znam. O co chodzi? Wpisuję "~/p/c+/i/sr" i wciskam Tab. Tekst zamienia się w "~/programs/c++/integral/src". Vim obsługuje jedynie standardowe uzupełnianie Tabem bez udziwnień. Niby nic, ale ja z tego korzystam prawie cały czas. Wiem, że Emacs i Vi są w podobnym wieku, ale Emacs sprawia wrażenie znacznie dojrzalszego.

Emacs Daemon

A to, to jest po prostu poezja! Włączam sobie na starcie systemu daemona, a potem każdy kolejny Emacs pracuje na współdzielonych buforach, ustawieniach, wszystkim. Dodatkowo, kolejne Emacsy włączają mi się błyskawicznie (no dobra, to był główny cel, gdy to pisali...) . Vim niby ma jakąś szczątkową obsługę pracy w trybie klient-serwer, ale zawsze mi się wydawało, że to działa na zasadzie "Ej, Heniek! Rąbnijmy tutaj serwera! Może się przyda!".

Zarządzanie wieloma plikami/buforami
W Vimie zawsze irytowało mnie zarządzanie buforami. Domyślnie sam zamykał więcej niż trzeba, za to po włączeniu opcji "hidden" (która w teorii sprawia, że Vim sam nic nie zamyka), działy się czasem dziwne rzeczy. Emacs z założenia nie zamyka nic o ile mu tego wyraźnie nie rozkaże. Przy takich założeniach, musi mieć dobre zarządzanie buforami i na szczęście faktycznie ma.

Problemy

Nie da się ukryć, że Vim ma jednak kilka asów w rękawie.

Uzupełnianie składni

W Emacsie bardzo brakuje mi vimowego Omnicompletion. Podobno da się zrobić jakieś dopełnianie składni. Podobno. Próbowałem już kilku wtyczek i żadna nie zdała egzaminu. CEDET, który wydawał mi się rozwiązaniem, nawet nie chciał się zainstalować.

Inna filozofia

Sporym problemem jest mój styl pracy. Do tej pory wiele robiłem w shellu. Wchodziłem do katalogu, włączałem Vima, pisałem coś, zrzucałem do tła, robiłem coś, itd. Miałem sporo autorskich ułatwień, przez co pracowało mi się naprawdę wygodnie. Emacs kładzie nacisk na robienie wszystkiego z poziomu samego edytora. Niby jest nieźle, ale np. Gita wolę obsługiwać klasycznie. Częściowo udało mi się coś na to zaradzić i zmapowałem sobie jakiś klawisz do uruchamiania xterma (wbudowane w Emacsa emulatory terminali miały problemy z moim wypasionym promptem). Mimo wszystko, wywrócenie stylu pracy do góry nogami trochę boli.

Podświetlanie nie-kodu
Apropos Gita. Vim mi bardzo ładnie podświetlał wszelkie jego pliki tymczasowe np. przy robieniu commita czy interaktywnego rebase'a. Emacs serwuje mi zwykły biały tekst. Ogólnie, Vim znacznie lepiej podświetla zwykłe "generic" pliki konfiguracyjne. Jako ciekawostkę dodam, że Vim podświetla config Emacsa (nie wiem czy nie lepiej niż sam Emacs!), ale w drugą stronę jest już cienko.

Zwijanie tekstu

Boli mnie też brak vimowego zwijania tekstu. Stawiałem gdzieś parę znaczników "{{{" i "}}}" i gotowe. W Emacsie znów podobno coś takiego jest.

Uniwersalność

Tu będzie krótko: nawet mój router ma Vi, czego o Emacsie powiedzieć nie mogę.

Podsumowanie

Wszystko wskazuje na to, że do większości zadań zostanę przy Emacsie. Nie zmienia to jednak faktu, że Vim to wciąż świetny edytor i nadal będę go do pewnych rzeczy używał.

PS: Tak, wiem, że w necie są dosłownie setki podobnych wpisów (z przejściami w obie strony). 

oprogramowanie programowanie

Komentarze

0 nowych
przemo_li   11 #1 22.06.2011 07:27

Szefie Emacs ma uzupełnianie składni. To edytor dość dobry dla programistów więc taką opcję ma od lat. Może korzystasz z nieaktualnych pluginów i/lub instrukcji jak je skonfigurować?

Podświetlanie nie-kodu to też błahostka. Emacs ma domyślnie różne "tryby" pracy, jak jest w trybie "C" to nie będzie dobrze podświetlał pliku z HTML-em i na odwrót. Poszukaj w dokumentacji jak ustawić auto-wykrywanie odpowiedniego trybu na podstawie MIME to powinno być bardzo proste.

Zwijanie tekstu to samo, poszukaj w dokumentacji.

A co do uniwersalności, to rzeczywiście vi jest wszędzie :), i dlatego najlepiej jest nauczyć się obu.

PS w czym programujesz? może znajdę porady pod ten konkretny język.

Vifon   5 #2 22.06.2011 10:17

@przemo_li
Jeśli masz na myśli uzupełnianie przez M-/ (dabbrev), to używam i nawet się sprawdza, ale w Vimie miałem dokładny podgląd namespace'ów, metod i składowych klas w C++ czy to przez ctags, czy przez clanga. Próbowałem ctags (dokładniej etags) w Emacsie, ale jakoś mi to nie chce poprawnie działać.

O trybach wiem, jasna sprawa. Kod podświetla świetnie, czy to C, Perl, czy Haskell. Ale do obsługi Gita nic nie znalazłem, a nie podoba mi się zarządzaniem nim przez same komendy wewnątrz Emacsa.

Zawijanie jakieś znalazłem, ale nie do końca takie, jak chciałem - trzeba w nim ręcznie ustawiać tokeny dla każdego języka (bo musi być razem ze znakiem komentarza).

Programuję głównie w C++, zsh i Perlu, chociaż czasem próbuję liznąć czegoś bardziej egzotycznego, jak wspomniany wyżej Haskell. Parę rzeczy już sobie poustawiałem - do Perla używam cperl-mode zamiast perl-mode, wszędzie poustawiałem odpowiednie wcięcia. Tylko jedno mnie w tej kwestii męczy - nie mogę zmusić Emacsa, do robienia w C++ większych wcięć po public i private w klasach - są na tym samym poziomie co składowe klas. I tak naprawiłem już to, że chciał mi je kłaść z zerowym wcięciem.

Pigmej   5 #3 22.06.2011 17:10

@Vifon...

do gita "magit"

Pozatym jest ELPA oraz El-get (successor jakby ELPY). W emacsie 24 ELPA jest juz w standardzie :)

Apropo C++, `M-x customize-group` i jedziesz :)

Uzupełnianie składni, na pewno jest do CEDET fcja która się łączy z innymi :) (http://cedet.sourceforge.net/intellisense.shtml)

Generalnie google :)

Pigmej   5 #4 22.06.2011 17:14

Apropos terminala

To jeszcze: http://emacs-fu.blogspot.com/2010/06/console-apps-in-emacs-with-multi-term.html

Co do emacsa jeszcze dodatkowo... jesli w emacsie czegos 'ci brakuje' to prawdopodobnie jest to gdzies w necie ;) google, github etc ;)

Vifon   5 #5 22.06.2011 23:48

@Pigmej
Magita próbowałem, ale jak już mówiłem, wolę klasyczną obsługę Gita + rebase i commity przez edytor.
M-x customize już oglądałem i w sumie niewiele ciekawych rzeczy znalazłem, a nawet jak znalazłem, to dawno już ustawione z pomocą Emacs Wiki, StackOverflow i innych przydatnych stron.
CEDET raczej odpada. Raz, że już raz poległem przy instalacji, dwa, że podobno ciężki.
multi-terma próbowałem i działał dopóki go nie dodałem do .emacs. Wtedy wszystko zaczęło wariować. Wiele się od term/ansi-term (BTW, czym one się różnią?) nie różnił, więc nie żałuję.
Tę prawdę o brakach w Emacsie poznałem jeszcze na Vimie. Te dwa edytory mają wszystko. Mogę co najwyżej nie wiedzieć jak coś uruchomić.

Dzięki za garść porad.

Jaahquubel_   13 #6 23.06.2011 17:36

Ty to chyba masz za dużo czasu, co? :P
I co ty tak ciągle programujesz? (Pytanie jak najbardziej poważne.)

Vifon   5 #7 23.06.2011 18:27

@Jaahquubel_
Ty mówisz "za dużo czasu", ja mówię "sesja egzaminacyjna". Jak zwał, tak zwał. xD
A programować lubię. Prawdopodobnie zmieni się to jeśli znajdę pracę jako programista (na co liczę), ale na razie traktuję programowanie jako rozrywkę.

iluzion   5 #8 26.06.2011 19:06

O! Tego się nie spodziewałem. Dobry edytor to podstawa. Jaki będzie następny?;) Trudno o coś potężniejszego od Vima i Emacsa. Może jEdit? Ja mam w planach opisać kiedyś Leo.

http://webpages.charter.net/edreamleo/front.html

Nieco inne podejście, dość ciekawe.

Vifon   5 #9 27.06.2011 01:53

@iluzion
A ja się Ciebie tutaj spodziewałem. ;) Zapamiętałem kilka Twoich wpisów o Emacsie.
Następnego edytora raczej już nie będzie - jak sam zauważyłeś, ciężko o coś potężniejszego. Nie wykluczam za to czegoś więcej w temacie Emacsa lub Vima.
Nie do końca rozumiem ideę tego Leo, ale to pewnie kwestia godziny. Chyba czas spać.