Vi, Vim, gVim i Neovim
Vi, Vim, gVim i Neovim należą do tej samej rodziny modalnych edytorów, ale różnią się zakresem funkcji i konfiguracji. Na minimalnym serwerze vi może wskazywać na różne implementacje, dlatego przed założeniem konkretnego zestawu funkcji warto sprawdzić vi --version, vim --version albo nvim --version.
Powiązane tematy: Debian - shell, FreeBSD - shell, SSH i zdalna administracja oraz Visual Studio Code.
1. Jak sprawdzić, z czym pracujesz
Na różnych systemach polecenie vi może uruchamiać klasyczne vi, Vim w wariancie minimalnym albo inną zgodną implementację.
Sprawdzenie:
command -v vi vim gvim nvim
vi --version
vim --version
nvim --version
Nie zakładaj, że vi na każdym serwerze ma ten sam zestaw funkcji.
2. Czego używać i kiedy
vi
Uruchomienie:
vi plik.conf
Używaj go przede wszystkim jako:
- treningu bazowego
vi, - edytora awaryjnego,
- przygotowania do pracy na minimalnych systemach,
- sposobu na poprawienie configu przez SSH,
- wspólnego mianownika dla świata Unix/Linux.
To nie jest oryginalny historyczny vi, lecz zachowuje jego podstawowy model pracy.
vim
Uruchomienie:
vim plik.txt
Pełny Vim działający w terminalu.
W porównaniu z vi dostajesz m.in.:
- lepsze kolorowanie składni,
- więcej opcji,
- więcej komend,
- bufory,
- splity,
- taby,
- makra,
- pluginy,
- rozbudowaną konfigurację.
Do normalnej pracy w CLI jest wygodniejszy od minimalnego vi.
gvim
Uruchomienie:
gvim plik.txt
To pełny Vim w graficznym oknie.
Dostajesz:
- normalne okno GTK,
- obsługę myszy,
- integrację ze schowkiem systemowym,
- menu,
- łatwiejsze korzystanie na GNOME/KDE.
Wewnątrz nadal jest to Vim i obowiązuje ten sam model:
NORMAL -> INSERT -> NORMAL
oraz te same komendy typu:
i
Esc
dd
:w
:wq
nvim
Uruchomienie:
nvim plik.txt
Neovim to nowoczesny fork Vima.
Podstawowa obsługa pliku jest praktycznie taka sama jak w Vimie:
i
Esc
dd
yy
p
:w
:q
/
Największe różnice pojawiają się później:
- nowocześniejsza architektura,
- Lua do konfiguracji,
- LSP,
- Tree-sitter,
- współczesny ekosystem pluginów,
- łatwiejsze budowanie terminalowego IDE.
Do prostego edytowania configu różnica między Vimem a Neovimem jest niewielka.
3. Najważniejsza rzecz: tryby
Edytory z rodziny vi są modalne.
Po uruchomieniu pliku jesteś zwykle w trybie:
NORMAL
W nim klawisze są poleceniami.
Aby zacząć pisać:
i
Przechodzisz do:
INSERT
Aby wrócić:
Esc
Podstawowy rytm pracy:
NORMAL
|
| i
v
INSERT
|
| Esc
v
NORMAL
Jeżeli nie wiesz, w jakim jesteś trybie:
Esc
To najbezpieczniejszy odruch.
4. Otwieranie plików
vi plik.txt
vim plik.txt
gvim plik.txt
nvim plik.txt
Plik systemowy:
sudo vi /etc/example.conf
Nowy plik:
vim nowy.txt
Jeśli nie istnieje, zostanie utworzony przy zapisie.
5. Zapis i wyjście
Najważniejsze polecenia:
:w
zapisz plik.
:q
wyjdź.
:wq
zapisz i wyjdź.
:q!
wyjdź bez zapisywania zmian.
Najbezpieczniejszy schemat:
Esc
:wq
Enter
Jeśli zrobiłeś bałagan i chcesz porzucić wszystko:
Esc
:q!
Enter
Alternatywnie:
ZZ
w trybie NORMAL zapisuje plik i wychodzi.
Do nauki lepiej jednak używać:
:wq
6. Wchodzenie w tryb pisania
i
i
Insert - pisz przed kursorem.
a
a
Append - pisz za kursorem.
I
I
Pisz od początku tekstu w bieżącej linii.
A
A
Pisz na końcu bieżącej linii.
o
o
Utwórz nową linię poniżej i zacznij pisać.
O
O
Utwórz nową linię powyżej i zacznij pisać.
Najbardziej praktyczne na początku:
i
a
o
O
7. Poruszanie kursorem
Możesz używać strzałek.
Klasyczne sterowanie vi:
h lewo
j dół
k góra
l prawo
Przydatniejsze ruchy:
w następne słowo
b poprzednie słowo
e koniec słowa
Początek i koniec linii:
0 początek linii
^ pierwszy niepusty znak linii
$ koniec linii
Początek i koniec pliku:
gg początek pliku
G koniec pliku
Konkretny numer linii:
50G
przejdź do linii 50.
W Vimie i Neovimie możesz również:
:50
8. Przewijanie
Ctrl-f ekran w dół
Ctrl-b ekran w górę
Ctrl-d pół ekranu w dół
Ctrl-u pół ekranu w górę
Na początku możesz zwyczajnie używać Page Up / Page Down, jeśli terminal poprawnie je obsługuje.
9. Usuwanie
Usuń znak pod kursorem:
x
Usuń całą linię:
dd
Usuń kilka linii:
3dd
Usuń słowo:
dw
Usuń od kursora do końca linii:
d$
Ważna zasada:
d + ruch
czyli:
dw delete word
d$ delete to end of line
10. Cofanie i ponawianie
Cofnij:
u
Ponów:
Ctrl-r
W minimalnym vi / vim.tiny nie wszystkie zaawansowane mechanizmy undo muszą być tak rozbudowane jak w pełnym Vimie lub Neovimie.
11. Zmiana istniejącego tekstu
Zmiana słowa:
cw
Vim usuwa fragment i automatycznie przechodzi do INSERT.
Zmiana całej linii:
cc
Zmiana od kursora do końca linii:
C
Zastąp pojedynczy znak:
r
Przykład:
rX
zamieni znak pod kursorem na X.
12. Kopiowanie i wklejanie
W terminologii Vima kopiowanie to yank.
Kopiuj linię:
yy
Wklej:
p
Wklej przed kursorem:
P
Kopiuj słowo:
yw
Kopiuj kilka linii:
3yy
Usuń linię i wklej ją gdzie indziej:
dd
przejdź w inne miejsce:
p
W Vimie usuwanie również trafia do rejestru, dlatego dd + p działa jak wytnij/wklej.
13. Wyszukiwanie
Szukaj w dół:
/tekst
potem:
Enter
Następny wynik:
n
Poprzedni wynik:
N
Szukaj w górę:
?tekst
Przykład:
/PermitRootLogin
Bardzo przydatne w długich configach.
14. Zamiana tekstu
Zamiana pierwszego wystąpienia w bieżącej linii:
:s/stare/nowe/
Wszystkie wystąpienia w bieżącej linii:
:s/stare/nowe/g
W całym pliku:
:%s/stare/nowe/g
Z potwierdzeniem każdej zamiany:
:%s/stare/nowe/gc
To działa w pełnym Vimie i Neovimie.
W minimalnym vim.tiny część bardziej zaawansowanych możliwości może być ograniczona.
15. Liczby przed komendami
Wiele poleceń można poprzedzić liczbą.
Przykłady:
5j
pięć linii w dół.
3w
trzy słowa naprzód.
4dd
usuń cztery linie.
10x
usuń dziesięć znaków.
To jeden z najbardziej użytecznych mechanizmów vi.
16. Tryb VISUAL
Pełny Vim i Neovim mają tryb zaznaczania.
v
zaznaczaj znakami.
V
zaznaczaj całymi liniami.
Potem:
d usuń
y kopiuj
c zmień
Przykład:
V
j
j
d
zaznaczy kilka linii i je usunie.
vim.tiny może mieć bardziej ograniczony zestaw funkcji niż pełny Vim.
17. Powtarzanie ostatniej zmiany
W Vimie i Neovimie:
.
powtarza ostatnią zmianę.
Przykład:
- zmieniłeś jedno słowo,
- przechodzisz do kolejnego podobnego miejsca,
- naciskasz
..
To bardzo charakterystyczna i potężna funkcja Vima.
18. Praca z nawiasami
Skok między pasującymi nawiasami:
%
Działa m.in. dla:
()
[]
{}
Przydatne w kodzie i plikach konfiguracyjnych.
19. Operacje „wewnątrz” elementu
To jest już bardziej Vim niż klasyczne minimum vi.
Przykład:
ci"
change inside quotes.
Masz:
name="old"
ustawiasz kursor wewnątrz old:
ci"
i wpisujesz nową wartość.
Podobnie:
ci(
ci[
ci{
Usuń wnętrze:
di"
di(
di[
di{
Bardzo wygodne w Vimie i Neovimie.
20. Kilka plików
Vim / Neovim
Otwórz inny plik:
:e plik.txt
Lista buforów:
:ls
Następny bufor:
:bn
Poprzedni:
:bp
gVim
To samo działa w GUI.
vi / vim.tiny
Do prostych operacji lepiej traktować go jako edytor jednego pliku.
21. Splity
Pełny Vim / gVim / Neovim:
Poziomy:
:split plik.txt
krócej:
:sp plik.txt
Pionowy:
:vsplit plik.txt
krócej:
:vsp plik.txt
Przełączanie między oknami:
Ctrl-w h
Ctrl-w j
Ctrl-w k
Ctrl-w l
22. Tab-y
Pełny Vim / gVim / Neovim:
Nowy tab:
:tabnew
Otwórz plik w tabie:
:tabedit plik.txt
Następny tab:
gt
Poprzedni:
gT
W Vimie tab nie jest dokładnie tym samym, czym tab w Sublime czy przeglądarce. Jest raczej zestawem okien.
23. Uruchamianie poleceń shella
Pełny Vim / Neovim:
:!ls
:!git status
:!make
:!go test ./...
Powrót następuje po zakończeniu komendy.
Można również uruchomić shell:
:shell
Powrót:
exit
24. Numery linii
W Vimie / gVim / Neovim:
:set number
Wyłącz:
:set nonumber
Numery względne:
:set relativenumber
Przydatne do poleceń takich jak:
5j
3dd
25. Kolorowanie składni
Pełny Vim:
:syntax on
Neovim domyślnie zapewnia nowoczesne mechanizmy highlightingu i może być dodatkowo rozbudowany przez Tree-sitter.
gvim korzysta z tego samego mechanizmu co Vim, tylko renderuje go w GUI.
vim.tiny ma mniej funkcji niż pełny Vim.
26. Schowek systemowy
To ważne przy GUI.
gVim
Najwygodniejszy z całej rodziny Vima pod kątem klasycznego desktopowego schowka.
pełny Vim
Jeśli build ma obsługę clipboardu:
"+y
kopiuje do schowka systemowego.
"+p
wkleja ze schowka systemowego.
Sprawdzenie:
vim --version | grep clipboard
Neovim
Potrafi integrować się ze schowkiem systemowym, ale w środowisku Wayland/X11 może wymagać odpowiedniego programu pomocniczego, np. wl-clipboard.
vi / vim.tiny
Nie traktuj go jako narzędzia do wygodnej pracy ze schowkiem GUI.
27. Konfiguracja
vi / vim.tiny
Do treningu nie konfiguruj.
Ma przypominać środowisko minimalne.
Vim / gVim
Główny config:
~/.vimrc
Przykład:
set number
set tabstop=4
set shiftwidth=4
set expandtab
syntax on
gVim może dodatkowo używać:
~/.gvimrc
Neovim
Nowoczesny config:
~/.config/nvim/init.lua
lub starszy styl:
~/.config/nvim/init.vim
Przykład Lua:
vim.opt.number = true
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.expandtab = true
28. Najważniejsze różnice
| Funkcja | vi / vim.tiny | Vim | gVim | Neovim |
|---|---|---|---|---|
| Terminal | tak | tak | nie jako główny tryb | tak |
| GUI | nie | nie | tak | przez osobne frontend-y |
| Tryby vi | tak | tak | tak | tak |
| Podstawowe komendy vi | tak | tak | tak | tak |
| Syntax highlighting | ograniczony | tak | tak | tak |
| Bufory | ograniczone | tak | tak | tak |
| Splity | ograniczone | tak | tak | tak |
| Taby | ograniczone | tak | tak | tak |
| Pluginy | praktycznie nie | tak | tak | tak |
| Lua | nie | nie jako główny model | nie jako główny model | tak |
| LSP | nie | pluginy | pluginy | nowoczesna integracja |
| Tree-sitter | nie | nie jako rdzeń | nie jako rdzeń | tak / integracja |
| Najlepsze zastosowanie | awaria / minimum | pełny CLI | desktop GUI | nowoczesny CLI/IDE |
29. Co warto znać absolutnie na pamięć
Jeżeli masz znać tylko minimum do pracy z configiem:
i pisz
a pisz za kursorem
o nowa linia poniżej
O nowa linia powyżej
Esc wróć do NORMAL
h lewo
j dół
k góra
l prawo
0 początek linii
$ koniec linii
gg początek pliku
G koniec pliku
x usuń znak
dd usuń linię
u cofnij
/tekst szukaj
n następny wynik
:w zapisz
:q wyjdź
:wq zapisz i wyjdź
:q! wyjdź bez zapisu
30. Minimum trochę wygodniejsze
Kiedy podstawy wejdą w ręce, dodaj:
w następne słowo
b poprzednie słowo
dw usuń słowo
cw zmień słowo
yy kopiuj linię
p wklej
Ctrl-r redo
. powtórz zmianę
To już wystarcza do bardzo sprawnej edycji configów.
31. Typowy scenariusz edycji configu
Otwierasz:
sudo vi /etc/example.conf
Szukasz:
/hostname
Enter
Przechodzisz do odpowiedniego miejsca.
Edytujesz:
i
lub:
cw
Po zmianie:
Esc
Zapisujesz:
:w
Enter
Jeśli wszystko jest OK:
:q
Enter
albo od razu:
:wq
Enter
Jeśli coś poszło źle:
:q!
Enter
32. Najważniejszy model mentalny
Nie myśl:
Vim = dziwny Notatnik
Lepiej:
NORMAL = wydaję polecenia
INSERT = wpisuję tekst
Typowa operacja:
i
tekst
Esc
:wq
Po kilku dniach Esc zaczyna działać automatycznie.
33. Którego używać na co
Na obcym/minimalnym systemie:
vi
Na swoim Debianie w CLI:
nvim
lub:
vim
Jeżeli chcesz klasycznego Vima w GUI:
gvim
Jeżeli chcesz rozwijać własne nowoczesne środowisko programistyczne:
nvim
Dobra praktyka:
naucz się języka vi
używaj narzędzia, które jest najwygodniejsze
Dzięki temu potrafisz pracować zarówno na gołym FreeBSD przez SSH, jak i w pełnym środowisku desktopowym.
34. Ściąga końcowa
TRYBY
i INSERT
Esc NORMAL
RUCH
h j k l
w b
0 $
gg G
EDYCJA
x usuń znak
dd usuń linię
dw usuń słowo
cw zmień słowo
yy kopiuj linię
p wklej
u undo
Ctrl-r redo
SZUKANIE
/tekst
n
N
ZAPIS
:w
:q
:wq
:q!
PRZYDATNE
o nowa linia poniżej
O nowa linia powyżej
. powtórz zmianę
% pasujący nawias
PEŁNY VIM / NVIM
:e plik
:ls
:bn
:bp
:sp plik
:vsp plik
:tabedit plik
:!polecenie
Najważniejsze dwa zestawy ratunkowe:
Esc
:wq
Enter
oraz:
Esc
:q!
Enter
Oficjalne źródła
- Vim documentation: https://www.vim.org/docs.php
- Neovim documentation: https://neovim.io/doc/