Vim
Spis treści
Konfiguracja
.vimrc
Możemy sami konfigurować vima wedle naszych upodobań, poniżej mamy dwa przykłady:
Super extra mega pluginy
Jednak na czas tutorialu prosiłbym o zainstalowanie janusa
ja dodatkowo instaluje sobie temacik monokai
git clone https://github.com/sickill/vim-monokai ~/.janus/
O co loto?
Na vim trzeba patrzeć jak na jezyk, podstawą jest poznanie normal mode, gdyż większość czasu właśnie w nim się spędza.
Motion
Wyedytujmy pierwszy plik vim 1
Tutaj poznamy zakres ruchów jakie możemy robić w vim'ie
M - środek ekranu
h - kursor w lewo
j - kursor w dol
k - kursor do gory
l - kursor w prawo
L - koniec ekranu
H - początek ekranu
{ - początek/poprzedni akapit
} - koniec/następny akapit
( - początek/poprzednie zdanie
) - koniec/następne zdanie
w W - następne słowo / SŁOWO
b B - poprzednie słowo / SŁOWO
e E - koniec słowa / SŁOWA
ge - koniec poprzedniego słowa
* - następne słowo pod kursorem
# - poprzednie słowo pod kursorem
0 - początek linijki
^ - początek tekstu w linijce
$ - koniec linijki
G - koniec pliku
gg - początek pliku
:q - wyjście bez zapisu jeśli nie było zmian
:q! - wyjście bez zapisu
:wq - wyjście z zapisem
ZQ - wyjście bez zapisu
ZZ- wyjście z zapisem
Spróbujmy nawigować po kodzie i wykorzystajmy wszystkie powyższe komendy
vim 2
gg
13gg
*
*
w
3*
G
40gg
#
2(
M
{
}
{
{
L
10B
10k
3l
6k
15E
e
2#
etc etc etc
akcja w vimie poprzedzona liczbą zostanie powtórzona odpowiednią ilość razy np:
10j - dziesięć linijek w dół
10k - dziesięć linijek w górę
2l - dwa znaki w prawo
7h - siedem znaków w lewo
4w - czwarte słowo
5E - koniec piątego SŁOWA
3} - koniec trzeciego akapitu
ale
12gg - przeniesie kursor do odpowiedniej linijki
Operatory
y - kopiuj
d - wytnij do rejestru
c - change
< - indent w lewo
> - indent w prawo
powielenie operatora spowoduje wykonanie go na danej linijce
yy - kopiuj linjke
dd - usun linjke
etc
Zaraz po operatorze używamy motion mówimy co chcemy zrobić np:
cw - zamień słowo
d10gg - usuń wszystko od tej linijki do 10
yG - kopiuj wszystkie linjki stąd do końca pliku
d$ - usuń znaki od kursora do końca linijki
Commands
Komenda różni się od operatora, że nie potrzebuje modyfikatora zaraz za nią
i - wbija w tryb insert
R - wbija w tryb replace
x - usuwa znak (delete)
X - usuwa znak poprzedni (backspace)
I - insert na początku linii (^i)
S - kasuje linijkę i wbija w insert (ddi)
s - kasuje znak i wbija w insert (xi)
A - idzie na koniec linijki i wbija w tryb insert ($i)
a - znak w prawo i insert (li)
p - wstawia z bufora linijke niżej
P - wstawia z bufora linijke wyżej
o - nowa linijka poniżej
O - nowa linijka powyżej
u - undo
Naciskając d vim poczeka na motion, naciskając x usunie od razu jeden znak.
vim 3
Możemy wykorzystać naszą wiedzę i zacząć walić kombosy!
Chcemy zmienić słowo Python na np: Java, jest na to wiele
sposobów spróbujemy różnych ucząc sie przy tym kolejnych vimowym zwrotów
fPRJava
DelDelEsc
po każdym wykonaniu komend można przywrócić stan pliku z początku
komendą :e!
lub komendą u (undo)
5ecwJava
Esc
4wdwiJava
Esc
}dbiJava
Esc
f!dbiJava
Esc
29l6xiJava
Esc
Przywrócmy stan pierwotny :e!
yy3p - skopiuje linijke i powieli ją poniżej 3 razy
d3d - przesunie 3 linijki do nienazwanego rejestru
p - wklei zawartość nienazwanego rejestru
. - powtórzy poprzednią akcję czyli p
Jeśli wcześniej nie było takiego kontaktu z vimem to faktycznie może to być dużo do przyjęcia na raz, ale warto zawsze wrócić do podstaw i przypomnieć sobie jak być bardziej produktywnym i korzystać z całego słownika językowego vima.
Na końcu tego READme są linki do innych tutoriali/ćwiczeń, gorąco polecam. Janusz TouK
Vim jako IDE
Na początek sklonujmy sobie repo z githuba
git clone https://github.com/TouK/sputnik /tmp/sputnik
cd /tmp/sputnik
vim -p *
Taby
Vim otworzył nam siedem zakładeczek, jeśli nie macie żadnych bindingów to
ctrlaltpgup
ctrlaltpgdown
pozwoli nam poruszać się miedzy zakładkami. Ja korzystam z tego tak, że w każdej mam inny projekt, a pliki które edytujemy w każdej z nich znajdują się w buforze. Choć raczej korzystam z fuzzy search'a ;)
Bufory
:ls
Pokazuje pliki które są w pamięci, można się przełączać między nimi korzystając z np:
:b4
gdzie 4 to unikalny identyfikator bufora.
Możemy też skorzystać z pluginu który wyświetla bufory trochę ładniej
,b
Fuzzy search
Mój ulubiony skrót to
ctrlp
po jego wciśnięciu uzyskujemy dodatkowe okno w którym możemy szukać plików w danym katalogu. Np:
srjpeviscrps
znajdzie nam kilka plików schowanych głęboko w strukturze katalogów. Oczywiście sposobów na znalezienie plików korzystając z wyszukiwania rozmytego jest sporo
Git
Doskonały plugin fugitive umożliwia nam commitowanie zmian i pushowanie ich od razu do repozytorium. Janus binduje je jako
,gs - tutaj - zaznacza nam co chcemy commitować
,gc - commit
,gp - push it
Code snippets
Będąc w kodzie javy możemy napisać main
i naciskając tab
rozwinie się to nam do pełnego snippetu. cl
, in
, co
, d.hs
etc
etc. Jest ich pełno, a dodanie swojego jest bjest bajecznie proste ;)
Surroundings
Korzystając z klawisza s możemy edytować otoczenie np: wyrazu dodając potrzebne nawiasy lub apostrofy. Ten plugin nie ogranicza się do wyrazów, możemy używać w nim oczywiście innych przydatnych nam motionsów już poznanych :)
ysiw} stworzy nam nawiasy {} wokół słowa
ysiW( stworzy nam nawiasy ( ) wokół SŁOWA
gdy już mamy okrągłe nawiasy wokół SŁOWA możemy je zamienić korzystając z komendy
cs(}
lub usunąć
ds(
SED
Najpierw krótkie przypomnienie z wyrażeń regularnych:
Żeby skorzystać z wyrażeń regularnych wbijamy do trybu command naciskając
:
:s mówi że będziemy chcieli podmieniać
:s/Python/Java zamieni w bieżącej linijce słowo python na java
Między : i s możemy wstawiać modyfikatory:
-
:1,3s od pierwszej do trzeciej linijki
-
:.,$s od bieżącej linijki do końca pliku
-
:.,+7s od bieżącej linijki
-
:%s w całym pliku
-
:g/^baz/s/foo/bar/ szuka słowa baz i zamienia foo na bar
-
i jeszcze trochę innych s & r
Jeśli tak się składa, że szukacie lub zamieniacie na coś co ma /
to
możecie użyć innego rozdzielnika np ! lub #