Wybrałem dla was 5 wtyczek, które zmieniają Vima w jeszcze lepszy edytor tekstowy oraz przybliżają go do pełnoprawnego IDE.
1. Vim-projectionist
Największą zaletą projectionist jest szybkie przełączanie pomiędzy plikiem bazowym, a jego, wcześniej zdefiniowanym, plikiem alternatywnym (“alternate”), który możemy zdefiniować dla każdego języka osobno:
{
"src/main/java/*.java": {"alternate": "src/test/java/{}.java"},
"src/test/java/*.java": {"alternate": "src/main/java/{}.java"}
}
Mając tak zdefiniowane pliki alternatywne i po wpisaniu :A, gdy znajdujemy się w modelu, zostanie otwarty plik zawierający jego testy. Istnieje kilka odpowiedników komendy :A – różnią się one miejscem, w którym ma zostać otwarty plik alternatywny:
- obecnym oknie (:A)
- obecny oknie, ale w podziale horyzontalnym (:AS)
- obecnym oknie, ale w wertykalnym podziale okna (:AV)
- w nowej zakładce (:AT)
Oprócz “alternate”, możemy zdefiniować także szkielet jaki ma być wstawiony do każdego nowego pliku w podanym folderze.
{
"app/models/*.rb": {
"template": [
"class \{} < ApplicationRecord",
"end"
]
}
}
Przy tworzeniu szkieletów możemy wykorzystać wbudowane funkcje, które odpowiednio zmodyfikują wpisany tekst:
{snakecase}
{dirname}
{underscore}
{backslash}
{camelcase}
{colons}
{hyphenate}
{blank}
{uppercase}
{capitalize} --- alias jako \\{}
{basename}
{dot}
{singular}
{plural}
{open}
{close}
2. Vim-test
Testy można uruchamiać na wiele sposobów: począwszy od ręcznego uruchamiania wszystkich, pojedynczych plików testowych, po automatyczne (przy użyciu narzędzi śledzących zmiany w plikach np. guard).
Wtyczka vim-test pozwala na szybkie uruchamianie testów z poziomu Vima. Posiada wsparcie dla większości języków programowania. Wynik testow wyświetlany jest wewnątrz edytora więc nie musimy się przełączać między oknami. Cały czas pozostajemy w Vimie, co umożliwia nam szybkie poruszanie się, kopiowanie oraz wyszukiwanie w wyniku testów.
Testy możemy uruchamiać w zależności od pożądanego zakresu, co daje nam ogromną kontrolę nad wykonywanymi testami oraz znacznie przyspiesza ich wykonywanie. Poniżej przedstawiam zakresy wraz z przykładowymi skrótami klawiszowymi:
nmap <silent> <leader>t :TestNearest<CR> " Uruchamia najbliższy
test względem aktualnej pozycji w otwartym pliku
nmap <silent> <leader>T :TestFile<CR> " Uruchamia cały plik
testowy, który mamy aktualnie otwarty
nmap <silent> <leader>a :TestSuite<CR> " Uruchamia wszystkie pliki
testowe
nmap <silent> <leader>l :TestLast<CR> " Uruchamia ostatni test
nmap <silent> <leader>g :TestVisit<CR> " Otwiera ostatni plik
testowy, który mieliśmy otwarty np. przed serią poprawek w kodzie
projektu.
Wtyczka umożliwia również zdefiniowanie własnej domyślnej komendy uruchomieniowej testów, dzięki czemu z łatwością uruchomimy je np. na dockerowym kontenerze.
let test#ruby#rspec#executable = 'docker-compose -f ../compose.yml run container_name rspec'
Kolejnym przydatnym ustawieniem jest możliwość zmiany strategii, jeśli nie chcemy, aby wynik testów pojawiał się wewnątrz edytora. Można zamienić ją na np. vtr oraz zainstalowanie pluginu vim-tmux-runner co spowoduje wyświetlenie testów w małym oknie Tmuxa.
let test#strategy = { 'suite': 'vtr' }
Strategie możemy ustawiać osobno dla każdego z zakresów wykonywanych testów (najbliższy, całość itp.). Dodatkowo vim-test przy pomocy pluginu projectionist pozwala na uruchamianie testów z poziomu plików nietestowych ustawionych jako pliki alternatywne.
3. Vim-rails
Vim-rails może okazać się dla was niezbędną wtyczką, jeśli jesteście deweloperami Ruby i korzystacie z frameworka Ruby on Rails. Istnieją odpowiedniki tego pluginu dla innych frameworków np. vim-phoenix które maja zbliżoną funkcjonalność.
Podstawową funkcjonalnością jest integracja z projectionist pod kątem frameworka, co daje nam możliwość skorzystania z pomocnych komend, takich jak:
-
Emodel nazwa_pliku – edycja modelu o podanej nazwie
-
Eview nazwa_pliku – edycja widoku o podanej nazwie
-
Econtroller nazwa_pliku – edycja kontrolera o podanej nazwie
Powyższe komendy mają swoje odpowiedniki w zależności od sposobu, w jaki ma zostać otwarty plik:
-
! – plik o podanej nazwie zostanie utworzony, gdy nie istnieje na dysku. Dodatkowo, będzie zawierał szkielet, jeśli jest dla niego zdefiniowany. Znak ten należy dodać na końcu nazwy pliku.
-
S – plik zostanie otwarty horyzontalnym podziale okna, gdy zastąpimy E w nazwie komendy.
-
V – plik zostanie otwarty wertykalnym podziale okna, gdy zastąpimy E w nazwie komendy.
-
T – plik zostanie otwarty w nowej zakładce, gdy zastąpimy E w nazwie komendy.
Wtyczka integruje również Railsową konsole, generatory oraz serwer, co pozwala nam na pozostanie wewnątrz Vima i wykonywanie praktycznie wszystkich czynności związanych z rozwojem projektu.
-
Rake – pozwala na uruchamianie zadań rake
-
Rails – opakowuje komendę rails
-
Generate – krótsza forma Rails generate
-
Rails console – uruchamia konsole Rails
-
Rails server – uruchamia serwer aplikacji
Bardzo przydatną funkcjonalnością, jaką dostarcza wtyczka jest :Extract. Po zaznaczeniu bloku tekstu oraz wywołaniu tej komendy, zostajemy przeniesieni do nowego pliku z wydzielonym kodem. Zostaje on również automatycznie dołączony do pliku bazowego. W ten sposób możemy wydzielać concerny dla modeli i controllerów oraz partiale dla widoków.
4. Vim-surround
Surround to wtyczka do szybkiego usuwania, modyfikowania, dodawania otaczających tekst nawiasów, tagów xml i html oraz apostrofów.
5. Fzf.vim
Aby wygodnie wyszukiwać i otwierać pliki z poziomu Vima możemy, użyć popularnego pluginu ctrlp, który spełnia swoje zadanie, lecz wymaga cache’owania i odświeżania zaindeksowanych plików. Czasami potrafi działać powoli, a znalezienie konkretnego pliku nie zawsze jest łatwe, zwłaszcza, jeśli mamy wiele plików o tej samej nazwie lub w bardzo zagnieżdżonych folderach.
Lekarstwem na wszystkie bolączki jest plugin fzf, który wykorzystuje fuzzy finder fzf napisany w Go. Zaletą fzf jest błyskawiczne indeksowanie plików, co eliminuje potrzebę cache’owania. Autor przygotował wiele przydatnych, gotowych funkcji oraz api do integracji fzf z własnymi funkcjami. Każda z funkcji zwraca wynik, w którym to możemy wyszukiwać za pomocą fzf fuzzy finder.
Oto lista najbardziej przydatnych:
- Files – zwraca listę wszystkich plików w projekcie
- GFiles – zwraca listę plików znalezionych z użyciem git ls-files
- Ag – zwraca listę plików wraz z numerem linii oraz jej zawartością, w których występuje wyszukiwana fraza
- Lines – zwraca listę linii ze wszystkich plików znajdujących się w buforze
- BLines – zwraca listę linii w aktualnym pliku
- Commits – lista commitów wraz z podglądem zmian
- BCommits – lista commitów dla aktualnego pliku wraz z podglądem zmian
Dodatkowo, każdą z funkcji można uruchomić dodając na końcu !, co spowoduje otwarcie wyniku w pełnym oknie, ignorując nasze wcześniejsze ustawienia rozmiaru okna.
Po wiecej pluginów wraz z ich ustawieniami oraz inne przydatne konfiguracje (tmux, fish shell), odsyłam do moich dotfiles, które umieściłem na githubie.
W kolejnym artykule, Kazik przedstawi 5 wtyczek, których używa na co dzień.
—
https://github.com/daktyr/dotfiles/blob/master/nvim/init.vim
https://github.com/junegunn/fzf
https://github.com/junegunn/fzf.vim
https://github.com/tpope/vim-projectionist
https://github.com/tpope/vim-surround
https://github.com/tpope/vim-rails
https://github.com/janko-m/vim-test
https://github.com/guard/guard