/vim-workshop

vim-workshop

GNU General Public License v2.0GPL-2.0

Vim

vim cheatsheet

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/

top

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.

top

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

top

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

top

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

fPRJavaDelDelEsc

po każdym wykonaniu komend można przywrócić stan pliku z początku komendą :e! lub komendą u (undo)

5ecwJavaEsc

4wdwiJavaEsc

}dbiJavaEsc

f!dbiJavaEsc

29l6xiJavaEsc

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

top

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

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 ;)

VIM as IDE

top

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:

regexp cheatsheet

Ż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 #

top

Dodatkowe pomoce

vim.wikia

search patterns

vim-adventures

shortcutfoo

top