vim-main

Każdy programista wie, że jednym z czynników, który pozwala zachować wysoką produktywność i efektywność, jest edytor kodu z jakiego korzysta na co dzień w swojej pracy. Część korzysta z IDE typu RubyMine, inni używają Sublime Text - a bohaterowie dzisiejszego artykułu - Kazimierz Szołtysik i Adam Winiarczyk - są miłośnikami Vima.

Vim jest narzędziem, które każdy może dostosować do własnego stylu, dlatego zdecydowaliśmy się na formę wywiadu, gdzie każdy z was będzie mógł poznać dwa różne punkty widzenia.

Vim to edytor tekstowy, napisany przez holenderskiego programistę Brama Moolenaara. Jest w pełni darmowy oraz dostępny na większość platform. Cechuje się wysoką konfigurowalnością, wsparciem dla wielu języków programowania oraz możliwością integracji z licznymi narzędziami. Powstał jako klon edytora vi. Sam też posiada odłamy - jednym z nich jest Neovim.

Dlaczego zainteresowałem się Vimem?

Adam:

Od zawsze słyszałem, że Vim potrafi być pomocny w pracy programisty. Tu i ówdzie pojawiał się w kursach, które przerabiałem.

W świecie Rails deweloperów jest całkiem popularnym edytorem, dlatego wielu programistów Rubiego stworzyło liczne wtyczki, które usprawniają jego pracę zarówno z kodem Ruby jak i innymi językami.

Dodatkowo, zawsze starałem się polepszyć zestaw narzędzi, z których korzystam, a Vim dość długo gościł na mojej to-do liście.

Przy pierwszym podejściu nie czułem, żeby moja szybkość oraz wygoda pisania kodu zwiększyły się - wręcz przeciwnie - sporo zwolniłem, co zniechęciło mnie do dalszej nauki.

Na szczęście miałem okazję do kolejnego podejścia, przy pair programmingu i code review z kolegą z pracy. Udało mu się zarazić mnie Vimem ponownie, tym razem już na dobre.

Dzisiaj nie wyobrażam sobie pracy przy użyciu innego edytora.

Kazik:

Gdy pierwszy raz zobaczyłem Vima przeraziłem się.

Co to jest? Jak zapisać plik? Jak z tego wyjść?

Po krótkiej przygodzie stwierdziłem, że to jakiś archaiczny twór niegodny uwagi. Są lepsze, nowocześniejsze edytory, np. Atom, Sublime...

Gdy po roku trafiłem na staż jako programista Ruby, zetknąłem się z Vimem ponownie. Wyszedłem wtedy ‘do ludzi’ i zauważyłem, że sporo pro developerów go używa oraz wygląda on u nich zupełnie inaczej niż ta najprostsza wersja, którą miałem okazję kiedyś odpalać. I że przypomina prawdziwe IDE.

Minęło jeszcze trochę czasu, zanim zacząłem się poruszać dość komfortowo w projektach Ruby on Rails. Zauważyłem wtedy, że moje IDE nie wyrabia przy dużych projektach. Wiesza się, długo startuje, zajmuje mnóstwo zasobów.

Pomyślałem, że może warto wrócić do tego Vima i dać mu szansę. Zbadałem temat ponownie i szybko okazało się, że przy użyciu pluginów mogę z Vima zrobić pełnowartościowe środowisko developerskie, które jest ultra lekkie, bardzo szybkie i całkiem wygodne.

W czym pomaga Vim?

Adam:

Vim:

  • Zdecydowanie pomaga w wykonywaniu naszych zadań bez opuszczania terminala. Często zadania, które wykonywaliśmy przy użyciu wiersza poleceń w terminalu, możemy przenieść do Vima, nie tracąc przy tym na swobodzie ich wykonywania.

  • Zwiększa naszą szybkość poruszania się po pliku, bez konieczności używania myszki, co pozwala nam na ciągłe trzymanie rąk przy klawiaturze.

  • Pozwala na nagrywanie makr, które ułatwią oraz przyspieszą wykonywanie powtarzalnych czynności np. usunięcie wybranych wartości z pliku csv, które spełniają nasze kryteria.

  • Po zainstalowaniu odpowiednich pluginów staje się IDE, w którym nie musimy klikać przez serię okienek, aby wykonać jakąś czynność.

Kazik:

Vim jest programem, w którym położono nacisk na operacje związane z łatwą, szybką i wydajną edycją plików.

Programista zdecydowaną większość czasu spędzonego nad kodowaniem poświęca nie pisaniu kodu, a raczej jego modyfikacjom, wyszukiwaniem czegoś w plikach, wraz z równoległym odpalaniem rozmaitych komend w konsoli (jest to zazwyczaj przełączanie się pomiędzy branchami w GIT, eksploracja historii commitów itp.).

Ponieważ Vim jest w stu procentach konsolowym programem, możliwe jest odpalanie z jego poziomu dowolnych komend systemowych, przekazując do nich dowolne parametry, również na podstawie tego, co np. aktualnie znajduje się pod naszym kursorem.

Zatem:

  • Nie ma więc problemu z odpalaniem testu w RSpec podczas pracy nad nim, bez potrzeby przełączania okien.

  • Można commitować zmiany w GIT ‘bezpośrednio’ z Vima. Vim oferuje też własny język skryptowy (Vimscript) i łatwe tworzenie własnych skrótów klawiaturowych, makr i komend.

Vim pomaga też bardzo w zaznajomieniu się z ‘unixowym sposobem myślenia’.

Dla przykładu:

  • wyszukiwanie łańcuchów znaków działa dokładnie tak samo jak np. w programie less. Ucząc się tej jednej rzeczy w Vimie, zyskujemy więc bonusowo umiejętność przeszukiwania wyników które zwracają nam wiele z unixowych poleceń, np. man, tail, git log itp.

  • jego znajomość przydaje się często w sytuacjach, gdy logujemy się zdalnie na serwer via SSH w celu wyedytowania jakichś plików (np. konfiguracji naszej aplikacji na serwerze testowym).

W czym przeszkadza?

Adam:

Mimo, że podczas sesji pair programmingu potrafi zrobić wrażenie na drugiej osobie, to jednak może być uciążliwy dla kogoś, kto nigdy wcześniej nie używał tego edytora. Praca z nim może stwarzać trudności nawet weteranom, gdy wykorzystamy konfigurację innej osoby dlatego, że w tej kwestii Vim pozwala na wiele (co jest również jego ogromną zaletą). Wspomniane problemy mogą skłonić nas do użycia innego edytora.

Kolejnym minusem może być przyzwyczajenie do sposobu pisania, jaki narzuca nam Vim. Pisząc w Wordzie czy Notatniku, chciałem używać skrótów, które mam zdefiniowane w Vimie i których używam na co dzień, a nie jest to możliwe i przełączanie się na początku sprawia problemy.

Mimo, że Vim istnieje od wielu lat, to cały czas się rozwija: powstają nowe wtyczki, dodawane są nowe funkcjonalności. Używam go od ponad roku, a nie czuje żebym znał jego wszystkie możliwości, cały czas odkrywam coś nowego. Wymaga odrobiny czasu w każdym miesiącu jeśli chcemy nieustannie polepszać swoje środowisko. Nie było chyba tygodnia kiedy bym nie zmienił czegoś w swoim pliku konfiguracyjnym. Niektórych może to po pewnym czasie zacząć męczyć.

Kazik:

Czasami ciężko jest wkleić tekst z systemowego schowka bezpośrednio do Vima i vice versa. Zajęło mi dużo czasu, zanim znalazłem na to dobry i prosty sposób: pbcopy i pbpaste. Są to dwa macowe narzędzia służące do kopiowania tekstu do i z systemowego schowka. Konfiguracja VIM z pbcopy to dodatkowa linijka w pliku ~/.vimrc:

vnoremap \<C-c\> :w !pbcopy\<CR\>\<CR\>

Najprawdopodobniej nie da się zrobić w Vimie wszystkiego tego, co np. w RubyMine - brakuje kilku pluginów, np. takich do zaawansowanego refactoringu.

Jednak największym minusem moim zdaniem jest dość wysoki próg wejścia w to środowisko. Zajęło mi kilka ładnych miesięcy, zanim poczułem się w Vimie na tyle pewnie, aby przestać korzystać z innych edytorów.

Jak przełamać barierę?

Adam:

Początki są ciężkie, zwłaszcza jeśli zdecydujemy się na tworzenie konfiguracji od zera. Czysty Vim, bez dodatkowych wtyczek i w podstawowej konfiguracji może odstraszyć, bo nie pozwala na wiele, co jest uciążliwe dla przesiadających się z innych edytorów lub IDE. Musimy zapamiętać wiele skrótów, nauczyć się je razem łączyć aby wydajniej pracować z Vimem.

Z ratunkiem przychodzi tutaj tworzenie cheatsheetów oraz https://vimawesome.com, kiedy potrzebujemy nowej wtyczki. Nie należy się zniechęcać za pierwszym razem, spadek komfortu pracy oraz wydajności jest czymś normalnym ponieważ Vim jest narzędziem, które musimy poznać, aby czerpać z niego korzyści. Nawet z pozoru proste rzeczy na początku mogą zająć dużo więcej czasu, niż przy użyciu zwykłego edytora.

Kazik:

Należy przede wszystkim zrobić tutorial (komenda w terminalu: vimtutor) i nie zrażać się ilością rzeczy do przyswojenia. Na początku MUSI być trudno, bo będziemy się uczyć czegoś w rodzaju nowego języka programowania.

Poruszanie się po tekście odbywa się w Vimie za pomocą tzw. motions i przynajmniej na początek - musimy poznać ich podstawy. Na szczęście wszystkie najważniejsze rzeczy są w tutorialu. Jeśli nie uda się nam ukończyć tego tutoriala w 30 minut, nie zrażajmy się - mało komu na początku udaje się to zrobić. Warto do niego wracać co jakiś czas, aby ugruntować podstawy.

Co dalej? Szukajmy sposobów na optymalizację naszych działań. Jeśli mamy wrażenie, że jakaś czynność zajmuje nam zbyt dużo ‘ruchów’ w Vimie, poszukajmy sposobu na zrobienie tego szybciej, w myśl zasady ‘1 nowa komenda co tydzień’. Notujmy je sobie i używajmy, aby utrwalić je w pamięci mięśniowej.

Gdzie szukać wsparcia?

Adam:

Aby uniknąć ciągłego wyszukiwania “jak zrobić X w Vimie”, warto przerobić chociaż jeden tutorial, co zaoszczędzi nam sporo czasu i pozwoli lepiej zrozumieć zasady działania edytora. Vim posiada wbudowany darmowy tutorial, który nauczy nas obsługi programu.

Dla początkujących, polecam poradnik w formie gry: https://vim-adventures.com.

Dla bardziej zaawansowanych, przydatne będą krótkie filmy instruktażowe: http://vimcasts.org/episodes. Autor Vimcasts napisał również 2 książki (Practical Vim oraz Modern Vim), które pozwolą nam na lepsze poznanie wybranych wtyczek.

Wiele można się nauczyć z plików konfiguracyjnych znalezionych na githubie, jednak ten sposób polecam również bardziej zaawansowanym.

Ostatnim wartym polecenia tutorialem jest https://github.com/mhinz/Vim-galore, w którym znajdziemy w pełni opisane zasady działania edytora oraz przydatne porady.

Kazik:

Vim jest oprogramowaniem open source ze sporą rzeszą użytkowników, co powoduje, że na praktycznie każde nurtujące nas pytanie znajdziemy w sieci odpowiedź.

Warto korzystać z pluginów, a najlepiej na początek używać specjalnej dystrybucji Vima (np. Vim janus), która posiada już zainstalowane sporo przydatnych pluginów, gotowe skróty klawiaturowe i ma wszystko dobrze udokumentowane w readme.

__

Wiecie już, jakie są za i przeciw korzystania z Vima oraz jak rozpocząć przygodę. W kolejnym artykule opiszemy możliwości wtyczek, które szczególnie przypadły nam do gustu.

Zachęcamy do postawienia pierwszych kroków i pamiętajcie, że Vim jest tylko pomocnym narzędziem i nie zrobi za nas wszystkiego.

__

http://www.vim.org

https://vim-adventures.com

http://vimcasts.org/episodes

https://github.com/mhinz/Vim-galore

https://vimawesome.com

https://github.com/carlhuda/janus

https://github.com/neovim/neovim