Nie jestem hardkorem, choć Vim jest moim ulubionym edytorem!

nie jestem hardkorem chociaż vim jest moim ulubionym edytorem

Parę tygodni temu, po 5 latach, zdecydowałam się zmienić pracę. Od niedawna pracuję w firmie, której jednym z celów jest “odczarowanie” terminala i sprawienie, że praca z konsolą nie będzie ani żmudna, ani straszna. Terminal (a raczej — emulator terminala) jest jednym z moich głównych narzędzi pracy, tuż obok Vima — edytora kodu, którego używam. Kiedy wspomniałam o tym na fanpage “Programistki są super” pojawiło się parę szyderczych komentarzy o tym, że Vim to tylko dla hardkorów (jestem pewna, że pisała to frakcja użytkowników Emacsa!). Pomyślałam jednak, że podzielę się z Tobą tym, dlaczego i jak korzystam z Vima. Może uda mi się go dla Ciebie “odczarować”, tak jak w pracy odczarowujemy terminal. Do dzieła!

ViM — początki edytora

ViM ujrzał światło dzienne 2 listopada 1991 roku (zabawne, dokładnie 5 miesięcy przed moimi narodzinami!). Jest ulepszoną wersją edytora vi — programu, który od 45 lat służy użytkownikom systemów Uniksowych w wizualnej edycji kodu (stąd nazwa: “vi” od “visual”). ViM – Vi iMproved – jest darmowy i z otwartym źródłem.

Główną cechą odróżniającą Vim od współczesnych edytorów i IDE jest tryb poleceń i tryb edycji oraz brak paska zadań. Do pełnej obsługi Vima nie potrzeba myszki, wszystkie operacje można wykonać za pomocą klawiatury. Do tego Vim pozwala na korzystanie z różnych rozszerzeń i pluginów, dzięki czemu można dostosować wygląd i funkcje programu do swoich potrzeb.
W 2006 roku Vim był uznany za najpopularniejszy edytor, ale jeszcze w 2019 roku w ankiecie przeprowadzonej przez portal StackOverflow, uplasował się na 5 miejscu – 25% programistów biorących udział w ankiecie wciąż korzysta z Vima w swojej codziennej pracy. Ja jestem jedną z nich.

“Mamy VSCode, na co komu Vim?”

Nie chcę tym tekstem rozpoczynać kłótni o to, który edytor kodu jest najlepszy (i dlaczego na pewno nie Emacs). Popularny dziś VSCode zdobył serca wielu i wcale nie zamierzam Cię od niego odciągać. Czasem jednak nie ma opcji wyboru i trzeba sobie radzić z tym, co jest dostępne. 
Sytuacje takie jak praca z zewnętrznym serwerem, czy nawet całą chmurą i konieczność zdalnej konfiguracji i edycji plików, czy przeglądania logów wręcz wymuszają korzystanie z edytorów dostępnych w konsoli (bądź spędzenia naprawdę długiego czasu na ustawianiu swojego ulubionego edytora do zdalnej pracy nad plikami…). Vim jest też niesamowicie szybki i w przeciwieństwie do wielkich IDE, które uruchamiają się długo, a potem zżerają wiele zasobów – “lekki” dla naszego komputera.
W moim wypadku to przede wszystkim kwestia przyzwyczajenia. Pracuję w Vimie od 10 lat, wiem, jak z niego efektywnie korzystać, kombinacje takie jak :wq to już raczej kwestia pamięci mięśniowej. I wiem, że nauka korzystania z innego programu byłaby dla mnie zbyt nudna i czasochłonna, a ja wciąż nie miałabym gwarancji, że mogę być równie produktywna. Fakt, że mogę pracować, korzystając tylko z klawiatury, niesamowicie usprawnia mój dzień. 
Jednocześnie zdaję sobie sprawę z tego, że dla wielu Vim wypada dość mdło. Wystarczy spojrzeć na ten wątek o tym, jak w ogóle wyjść z aplikacji, żeby skutecznie zniechęcić się do jej ponownego uruchomienia. Ewentualnie można też kupić książkę “Jak wyjść z Vima”.

Jeśli nie korzystałaś wcześniej z Vima, to polecam zapoznać się z tymi interaktywnymi tutorialiami:

  • https://vim-adventures.com/ – interaktywna gra przeglądarkowa, która w ciekawy sposób przeprowadzi Cię przez proces nauki (i wypracowania odpowiednich nawyków);
  • https://www.openvim.com/ – taki jakby interaktywny podręcznik, w którym krok po kroku opisano, jak używać Vima wraz z ćwiczeniami;
  • http://www.vimgenius.com/ – ineraktywny quiz, w którym sprawdzisz, jak dobrze sobie radzisz! 🙂

Vim – moje ustawienia i ulubione pluginy

Jeśli przeszłaś już przez Vim Adventures, albo już wcześniej korzystałaś z Vima (i wiesz, jak z niego wyjść), to teraz przyszła pora na “mięsko” tego tekstu. Jak ja korzystam z Vima? Przez ostatnie 10 lat sprawdziłam naprawdę wiele różnych pluginów. Często okazywało się, że funkcjonalność oferowana przez dany plugin w ogóle nie była mi potrzebna, a czasem – że konfiguracja zajmowała znacznie więcej czasu i wolałam zrezygnować z danego ustawienia. Poniżej znajdziesz listę pluginów, które naprawdę przydają się  w mojej codziennej pracy i od kilku lat dzielnie zapisuję sobie wszystkie ustawienia w moim prywatnym repozytorium.

#1 NERDTree
Plugin, który umożliwia szybkie przeglądanie zawartości katalogu i operowanie na plikach i ich hierarchii. Przypomina trochę widok typowy dla popularnych dziś IDE. 


#2 fzf.vim
Wiesz, że gdzieś w repozytorium był plik, który nazywał się jakoś na ‘k’, ale równie dobrze mogło to być ‘c’? Fzf to narzędzie, które w takich chwilach przychodzi z pomocą – wyszukiwarka plików, które “jakoś tak” się nazywają. Sam program fzf jest wymagany, żeby plugin w vimie działał. Od kiedy korzystam z tego pluginu, prawie nie potrzebuję innych metod otwierania nowych plików!


#3 vim-gitgutter
Plugin, który oznacza, które miejsca i pliki zostały zmienione, a zmiany te jeszcze nie zostały zapisane w gicie. Tylko tyle i aż tyle.


#4 NERDTree git plugin
Ten plugin dodatkowo rozszerza możliwości NERDTree, pokazując informacje o plikach i zmianach w gicie w okienku hierarchii katalogu.


#5 auto-pairs
Męczy Cię wstawianie zamykającego nawiasu, albo “ciapków”? Auto-pairs zrobi to za Ciebie. 


#6 syntastic
Pisanie kodu to nie przelewki. Kod, poza tym, że musi się łatwo czytać, powinien też działać (i w większości wypadków – kompilować się). Syntastic sprawdza takie rzeczy, dzięki czemu nie trzeba samodzielnie odpalać kompilatora, a błędy (wraz ze wskazaniem, która linijka i krótkim opisem) pojawią się tuż pod edytorem. Co prawda korzystam z tego pluginu dopiero od niedawna (używałam go wieki temu pisząc w C++, i teraz – kiedy piszę w Ruście), to jednak doceniam jego przydatność i to, jak znacznie przyspiesza pracę.


#7 YouCompleteMe
Plugin, który jest jednym z potężniejszych, chociaż jednocześnie najtrudniejszym do skonfigurowania. Odpowiada za podpowiadanie składni, maczując nie tylko słowa, ale syntax i pokazując sygnatury proponowanych funkcji. Dodatkowo rozbudowuje domyślną funkcjonalność tzw. “go to definition” otwierając odpowiednie pliki i pokazując definicje funkcji.


#8 Moja konfiguracja
Jedną z moich ulubionych cech Vima jest to, że nie ma raczej dwóch osób na świecie, które korzystają z tego samego Vima. Różnią się ich pluginy, układy kolorystyczne, czy skróty klawiszowe. Wszystko to zapisane jest w pliku .vimrc (w katalogu domowym użytkownika). 


Poza instalacją wyżej wymienionych pluginów (i wtyczek specyficznych do języków, z którymi pracuję bądź pracowałam), mój plik konfiguracyjny zawiera następujące ustawienia:

  • układ kolorystyczny (solarized dark);
  • ustawienie obsługi myszki (set mouse=a) i włączone numerowanie linii (set number);
  • szybkie uruchomienie fzf przez kombinację klawiszy ctrl+f (map <C-f> :Files<CR>);
  • obsługę tabów (podczas pracy z kodem nowe pliki otwieram w zakładkach) i skróty klawiszowe (ctrl+o otwiera nową zakładkę, a ctrl+n i ctrl+m przechodzą odpowiednio do poprzedniej i następnej zakładki);
  • szybkie wyszukiwanie słowa pod kursorem w aktywnym katalogu z wykorzystaniem polecenia grep (map f yw <bar> :tabnew <bar> :vimgrep! <C-r>0 **<CR> – wystarczy, że ustawisz kursor na jakimś słowie i wciśniesz f, by otworzyła się nowa zakładka z wynikami wyszukiwania!);
  • i wiele tego typu, w tym ustawienia specyficzne do używanych pluginów.

Mój plik .vimrc ma obecnie ponad 150 linijek, chociaż muszę przyznać, że tworzę go w sumie od ponad 5 lat – miałam więc dużo czasu, żeby rozkminić, które ustawienia mi pasują. Wcześniej zwyczajnie nie zapisywałam swoich ustawień w repozytorium i rozpoczynając pracę na nowych sprzętach działałam z domyślnymi ustawieniami Vima – było w porządku, serio!

Do instalacji i zarządzania pluginami polecam korzystać z jakiegoś managera. Ja od lat używam pathogena i uważam, że jest bardzo wygodny.
Tutaj znajdziesz przykładowy plik .vimrc wraz z komentarzem do poszczególnych części. Tak naprawdę poza tym przykładem nie potrzebowałam nic więcej, by nauczyć się dodawać własne ustawienia.

Na zakończenie

Właśnie przeczytałam ten tekst jeszcze raz. Piszę w nim o początkach Vima i z czym się to je, by następnie opowiedzieć Ci o pluginach i zaawansowanych opcjach, których używam. Trochę tak, jak na poniższym memie:

Mam nadzieję jednak, że jeśli nie znasz Vima – zaciekawiłam Cię wystarczająco, żeby spróbować go poużywać chociaż przez moment. A jeśli wiesz już jak z Vima wyjść (zatem można Cię zaliczyć do grona użytkowników średniozaawansowanych!) – to znajdziez tu ciekawe pluginy, które pomogą Ci być jeszcze bardziej produktywną. 
Tak czy siak – daj znać, co wybrałabyś w tzw. “holy wars” – Vim czy Emacs? No i czy zostaniesz z Vimem na dłużej, czy jednak wolisz swój dotychczasowy edytor (jaki?) – podziel się w komentarzu!