Jak używać edytora Vi/Vim na Ubuntu: Kompletny przewodnik techniczny
Vi i Vim (Vi Improved) to modalne, sterowane klawiaturą edytory tekstu działające wyłącznie w terminalu, co czyni je niezastąpionymi w administracji serwerami, zdalnej edycji konfiguracji i skryptowych przepływach pracy na Ubuntu i innych dystrybucjach Linux. Vim rozszerza Vi o podświetlanie składni, wielopoziomowe cofanie zmian, podzielone okna, obsługę wtyczek i skryptowalną warstwę konfiguracji — przy minimalnym zużyciu zasobów systemowych.
Jeśli zarządzasz środowiskiem VPS Hosting lub serwerem dedykowanym, biegłość w Vimie nie jest opcjonalna — to podstawowa umiejętność. Sesje SSH nie zawsze mają dostęp do GUI, a Vim jest niemal powszechnie dostępny w każdym systemie uniksowym, z którym kiedykolwiek będziesz pracować.
Dlaczego Vim nadal dominuje w środowiskach serwerowych
Nowoczesne IDE są potężne, ale stają się nieistotne, gdy o 2 w nocy łączysz się przez SSH z bezgłowym serwerem Ubuntu, debugując uszkodzoną konfigurację Nginx. Modalna konstrukcja Vima oznacza, że każde naciśnięcie klawisza jest poleceniem — bez zależności od myszy, bez narzutu renderowania i bez opóźnień wprowadzanych przez warstwę graficzną.
Kluczowe powody, dla których administratorzy systemów polegają na Vimie:
- Zero zewnętrznych zależności: Działa przez dowolne połączenie SSH, w tym łącza o niskiej przepustowości lub wysokich opóźnieniach
- Spójna dostępność: Preinstalowany lub trywialnie instalowalny na Debian, Ubuntu, CentOS, Alpine i praktycznie każdej dystrybucji Linux
- Szybkość na dużą skalę: Edycja plików konfiguracyjnych, logów lub skryptów liczących kilka tysięcy linii jest szybsza w Vimie niż w jakimkolwiek edytorze GUI po opanowaniu pamięci mięśniowej
- Skryptowalność: Wbudowany język skryptowy Vima (Vimscript) i obsługa Lua (w Neovim) umożliwiają pełną automatyzację powtarzalnych zadań edycyjnych
Instalacja Vima na Ubuntu
Ubuntu jest dostarczany z minimalnym pakietem `vim-tiny`, któremu brakuje podświetlania składni, obsługi wielu plików i wielu zaawansowanych funkcji. Aby uzyskać pełną funkcjonalność, zainstaluj kompletny pakiet:
“`bash
sudo apt update
sudo apt install vim -y
“`
Aby zweryfikować zainstalowaną wersję i potwierdzić pełną obsługę funkcji:
“`bash
vim –version
“`
Szukaj `+syntax`, `+clipboard`, `+python3` i `+multi_byte` w flagach funkcji. Prefiks `-` oznacza, że dana funkcja została skompilowana bez tej funkcji w pliku binarnym. Jeśli potrzebujesz tych funkcji, a ich brakuje, zainstaluj zamiast tego `vim-gtk3` lub `vim-nox`:
“`bash
sudo apt install vim-nox -y # Headless full-feature build
sudo apt install vim-gtk3 -y # GTK3 build with clipboard integration
“`
Krytyczny przypadek brzegowy: Na minimalnych obrazach serwera Ubuntu — takich jak te używane w kontenerach Docker lub serwerach Dedicated Servers inicjowanych przez cloud-init — nawet `vi` może być nieobecny. W takim przypadku przed próbą edycji jakichkolwiek plików konfiguracyjnych zainstaluj jawnie `vim`.
Otwieranie, tworzenie i odzyskiwanie plików
“`bash
vim filename.txt # Open existing file or create new one
vim /etc/nginx/nginx.conf # Open a system configuration file (use sudo if needed)
sudo vim /etc/ssh/sshd_config # Edit privileged files
vim +42 filename.txt # Open file and jump directly to line 42
vim +/searchterm file.txt # Open file with cursor on first match of searchterm
“`
Odzyskiwanie pliku wymiany: Vim automatycznie tworzy ukryty plik wymiany (`.filename.txt.swp`) podczas edycji. Jeśli sesja ulegnie awarii lub połączenie SSH zostanie przerwane, otwórz ponownie ten sam plik, a Vim wyświetli monit o odzyskanie niezapisanych zmian. Zawsze najpierw wybierz `(R)ecover`, zapisz odzyskaną zawartość, a następnie usuń plik wymiany za pomocą `:e` i `:!rm ~/.filename.txt.swp` lub uruchamiając `vim -r filename.txt`.
Ten mechanizm odzyskiwania jest szczególnie cenny podczas edycji krytycznych plików konfiguracyjnych na serwerach produkcyjnych — przerwane połączenie nie oznacza utraty pracy.
Zrozumienie modalnej architektury Vima
Modalna konstrukcja Vima jest najważniejszą koncepcją do przyswojenia. W przeciwieństwie do standardowych edytorów, gdzie każde naciśnięcie klawisza wstawia znak, Vim rozdziela nawigację, edycję i wykonywanie poleceń na odrębne tryby.
| Tryb | Aktywacja | Główny cel |
|---|
| — | — | — |
|---|
| **Normal** | `Esc` (domyślny przy otwarciu) | Nawigacja, usuwanie, kopiowanie, wklejanie, wykonywanie makr |
|---|
| **Insert** | `i`, `a`, `o`, `O`, `I`, `A` | Wpisywanie i wstawianie tekstu |
|---|
| **Visual** | `v` (znakowy), `V` (liniowy), `Ctrl+v` (blokowy) | Zaznaczanie zakresów tekstu |
|---|
| **Visual Block** | `Ctrl+v` | Zaznaczanie i edycja kolumnowa |
|---|
| **Command-Line** | `:` | Operacje na plikach, wyszukiwanie/zamiana, ustawienia, polecenia zewnętrzne |
|---|
| **Replace** | `R` | Nadpisywanie istniejących znaków |
|---|
| **Ex** | `Q` | Wsadowe wykonywanie poleceń (rzadko używane interaktywnie) |
|---|
Najczęstszy błąd początkujących to naciskanie klawiszy w trybie Normal w oczekiwaniu, że pojawi się tekst, a następnie panika, gdy `dd` usuwa linię lub `gg` przeskakuje na początek pliku. Zawsze sprawdzaj bieżący tryb w lewym dolnym rogu ekranu — tryb Insert wyświetla `– INSERT –`, tryb Visual wyświetla `– VISUAL –`, a tryb Normal nie pokazuje nic.
Polecenia nawigacji w trybie Normal
Efektywna nawigacja to to, co odróżnia użytkownika Vima jedynie funkcjonalnego od naprawdę szybkiego. Ucz się ich według priorytetu:
Podstawowy ruch kursora
| Klawisz | Akcja |
|---|
| — | — |
|---|
| `h` | Przesuń o jeden znak w lewo |
|---|
| `l` | Przesuń o jeden znak w prawo |
|---|
| `j` | Przesuń o jedną linię w dół |
|---|
| `k` | Przesuń o jedną linię w górę |
|---|
| `w` | Przeskocz na początek następnego słowa |
|---|
| `b` | Przeskocz na początek poprzedniego słowa |
|---|
| `e` | Przeskocz na koniec bieżącego słowa |
|---|
| `0` | Przeskocz na początek linii |
|---|
| `^` | Przeskocz do pierwszego znaku niebędącego białym znakiem w linii |
|---|
| `$` | Przeskocz na koniec linii |
|---|
Nawigacja na poziomie pliku
| Klawisz | Akcja |
|---|
| — | — |
|---|
| `gg` | Przeskocz do pierwszej linii pliku |
|---|
| `G` | Przeskocz do ostatniej linii pliku |
|---|
| `:42` | Przeskocz do linii 42 |
|---|
| `Ctrl+f` | Przewiń o całą stronę do przodu |
|---|
| `Ctrl+b` | Przewiń o całą stronę do tyłu |
|---|
| `Ctrl+d` | Przewiń o pół strony w dół |
|---|
| `Ctrl+u` | Przewiń o pół strony w górę |
|---|
| `%` | Przeskocz do pasującego nawiasu, nawiasu okrągłego lub klamrowego |
|---|
| `*` | Przeskocz do następnego wystąpienia słowa pod kursorem |
|---|
| `#` | Przeskocz do poprzedniego wystąpienia słowa pod kursorem |
|---|
Wskazówka dla zaawansowanych: Poprzedź dowolne polecenie ruchu liczbą, aby je powtórzyć. `5j` przesuwa w dół o 5 linii. `3w` przeskakuje o 3 słowa do przodu. `10dd` usuwa 10 linii. Ten numeryczny mnożnik stosuje się do praktycznie każdego polecenia trybu Normal i jest kluczem do szybkiej edycji.
Wchodzenie i wychodzenie z trybu Insert
| Klawisz | Zachowanie |
|---|
| — | — |
|---|
| `i` | Wstaw przed kursorem |
|---|
| `a` | Dołącz za kursorem |
|---|
| `I` | Wstaw na początku linii |
|---|
| `A` | Dołącz na końcu linii |
|---|
| `o` | Otwórz nową linię poniżej i wejdź w tryb Insert |
|---|
| `O` | Otwórz nową linię powyżej i wejdź w tryb Insert |
|---|
| `s` | Usuń znak pod kursorem i wejdź w tryb Insert |
|---|
| `S` | Usuń całą linię i wejdź w tryb Insert |
|---|
| `Esc` lub `Ctrl+[` | Powróć do trybu Normal |
|---|
Kluczowy nawyk: Wyrabiaj odruch naciskania `Esc` natychmiast po zakończeniu wstawiania tekstu. Pozostawanie w trybie Insert, gdy zamierzasz nawigować, jest źródłem większości przypadkowych edycji.
Zapisywanie, wychodzenie i zarządzanie plikami
Te polecenia są wykonywane z trybu Command-Line (najpierw naciśnij `:`):
| Polecenie | Akcja |
|---|
| — | — |
|---|
| `:w` | Zapisz (zapisz) bieżący plik |
|---|
| `:w filename.txt` | Zapisz pod nową nazwą pliku |
|---|
| `:q` | Wyjdź (tylko jeśli nie ma niezapisanych zmian) |
|---|
| `:q!` | Wymuś wyjście, odrzucając wszystkie niezapisane zmiany |
|---|
| `:wq` lub `:x` | Zapisz i wyjdź |
|---|
| `ZZ` | Zapisz i wyjdź (skrót trybu Normal) |
|---|
| `ZQ` | Wyjdź bez zapisywania (skrót trybu Normal) |
|---|
| `:w !sudo tee %` | Zapisz plik otwarty bez uprawnień sudo |
|---|
Sztuczka `:w !sudo tee %` to niezbędna wiedza dla administratorów serwerów. Gdy otworzysz plik systemowy, taki jak `/etc/fstab`, bez sudo i wprowadzisz zmiany, nie możesz zapisać za pomocą `:w`. To polecenie przesyła zawartość bufora przez `sudo tee` w celu zapisania pliku z podwyższonymi uprawnieniami — bez konieczności zamykania i ponownego otwierania Vima.
Operacje edycji: usuwanie, kopiowanie, wklejanie i cofanie
Model edycji Vima jest zbudowany na operatorach + ruchach. Operator (jak `d` dla usunięcia lub `y` dla yank/kopiowania) połączony z ruchem (jak `w` dla słowa lub `$` dla końca linii) tworzy precyzyjną akcję edycyjną.
Podstawowe polecenia edycji
| Polecenie | Akcja |
|---|
| — | — |
|---|
| `x` | Usuń znak pod kursorem |
|---|
| `X` | Usuń znak przed kursorem |
|---|
| `dd` | Usuń (wytnij) całą bieżącą linię |
|---|
| `D` | Usuń od kursora do końca linii |
|---|
| `dw` | Usuń od kursora do końca słowa |
|---|
| `d$` | Usuń od kursora do końca linii |
|---|
| `d0` | Usuń od kursora do początku linii |
|---|
| `yy` lub `Y` | Yank (skopiuj) całą bieżącą linię |
|---|
| `yw` | Yank od kursora do końca słowa |
|---|
| `p` | Wklej za kursorem (lub poniżej bieżącej linii dla yanków liniowych) |
|---|
| `P` | Wklej przed kursorem (lub powyżej bieżącej linii) |
|---|
| `u` | Cofnij ostatnią zmianę |
|---|
| `Ctrl+r` | Ponów ostatnio cofniętą zmianę |
|---|
| `.` | Powtórz ostatnią zmianę (jedno z najpotężniejszych poleceń w Vimie) |
|---|
| `~` | Przełącz wielkość liter znaku pod kursorem |
|---|
| `>>` | Wcięcie bieżącej linii o jeden poziom |
|---|
| `<<` | Usuń wcięcie bieżącej linii o jeden poziom |
|---|
Polecenie `.` (kropka) jest prawdopodobnie najbardziej niedocenianą funkcją Vima wśród początkujących. Powtarza ostatnią złożoną akcję — jeśli usunąłeś słowo za pomocą `dw`, naciśnięcie `.` usuwa następne słowo. Jeśli zmieniłeś słowo za pomocą `cw` i wpisałeś zamiennik, `.` stosuje tę samą zamianę do następnego wystąpienia. Eliminuje to powtarzalne ręczne edycje w dużych plikach.
Tryb Visual: precyzyjne zaznaczanie tekstu
Tryb Visual zapewnia trzy granularności zaznaczania:
- `v` — Zaznaczanie znakowe
- `V` — Zaznaczanie liniowe (zaznacza całe linie)
- `Ctrl+v` — Zaznaczanie blokowe (edycja kolumnowa)
Po dokonaniu zaznaczenia zastosuj operatory:
| Klawisz | Akcja na zaznaczeniu |
|---|
| — | — |
|---|
| `d` | Usuń zaznaczony tekst |
|---|
| `y` | Yank (skopiuj) zaznaczony tekst |
|---|
| `c` | Zmień (usuń i wejdź w tryb Insert) |
|---|
| `>` | Wcięcie zaznaczenia |
|---|
| `<` | Usuń wcięcie zaznaczenia |
|---|
| `~` | Przełącz wielkość liter zaznaczenia |
|---|
| `:` | Wejdź w tryb Command-Line z wstępnie wypełnionym zakresem |
|---|
Praktyczny przypadek użycia blokowego trybu Visual (`Ctrl+v`): Masz plik konfiguracyjny, w którym musisz zakomentować 15 kolejnych linii, dodając `#` na początku. Zaznacz pierwszą kolumnę tych linii za pomocą `Ctrl+v`, nawiguj w dół za pomocą `j`, naciśnij `I` (wielkie i), wpisz `#`, a następnie naciśnij `Esc`. Vim stosuje wstawienie do każdej zaznaczonej linii jednocześnie. To zadanie wymagałoby wyrażenia regularnego lub ręcznego powtarzania w większości innych edytorów.
Wyszukiwanie i zamiana
Wyszukiwanie
“`
/pattern Search forward for pattern (regex supported)
?pattern Search backward for pattern
n Jump to next match
N Jump to previous match
- Search forward for word under cursor
Search backward for word under cursor
:noh Clear search highlighting
“`
Składnia wyszukiwania i zamiany
“`
:%s/old/new/g Replace all occurrences in entire file
:%s/old/new/gc Replace all with confirmation prompt for each
:%s/old/new/gi Case-insensitive replace across entire file
:10,20s/old/new/g Replace only within lines 10 through 20
:'<,'>s/old/new/g Replace within visually selected range
:%s/bwordb/new/g Replace whole word only (word boundary anchors)
“`
Obsługa wyrażeń regularnych: Vim używa własnego dialektu wyrażeń regularnych. Dostępne są: `b` dla granicy słowa, `d` dla cyfr, `s` dla białych znaków i `+` (jeden lub więcej). Dla rozszerzonej składni wyrażeń regularnych użyj prefiksu `v`: `:%s/v(foo|bar)/baz/g` dopasowuje „foo” lub „bar” i zastępuje „baz”.
Praca z wieloma plikami, buforami i podzielonymi oknami
Tutaj moc Vima staje się najbardziej widoczna podczas złożonych sesji edycyjnych.
Bufory
Bufor to reprezentacja pliku w pamięci. Vim może jednocześnie przechowywać wiele otwartych buforów.
“`
:e filename Open a file into a new buffer
:ls or :buffers List all open buffers
:b2 Switch to buffer number 2
:bnext or :bn Switch to next buffer
:bprev or :bp Switch to previous buffer
:bd Delete (close) current buffer
“`
Podzielone okna
“`
:split filename Horizontal split, open file in upper pane
:vsplit filename Vertical split, open file in right pane
Ctrl+w h/j/k/l Navigate between split panes
Ctrl+w = Equalize split pane sizes
Ctrl+w q Close current pane
“`
Karty
“`
:tabnew filename Open file in a new tab
:tabnext or gt Switch to next tab
:tabprev or gT Switch to previous tab
:tabclose Close current tab
“`
Praktyczny scenariusz: Podczas edycji konfiguracji serwera WWW na VPS z cPanel może być konieczne odwołanie się do głównego `nginx.conf` podczas edycji pliku wirtualnego hosta. Otwórz oba w pionowym podziale za pomocą `:vsplit /etc/nginx/nginx.conf` i nawiguj między panelami za pomocą `Ctrl+w l` i `Ctrl+w h` — nie ma potrzeby zamykania jednego pliku, aby skonsultować drugi.
Konfiguracja Vima za pomocą .vimrc
Plik `.vimrc` w katalogu domowym to trwała konfiguracja Vima. Jest wykonywany jako Vimscript za każdym razem, gdy Vim się uruchamia.
“`bash
vim ~/.vimrc
“`
Zalecana konfiguracja dla serwerów produkcyjnych
“`vim
" Display settings
set number " Show absolute line numbers
set relativenumber " Show relative line numbers (great for jump commands)
set cursorline " Highlight the current line
set scrolloff=8 " Keep 8 lines visible above/below cursor when scrolling
" Indentation
set autoindent " Copy indent from current line on new line
set smartindent " Context-aware indentation for code
set expandtab " Convert tabs to spaces
set tabstop=4 " Tab width = 4 spaces
set shiftwidth=4 " Indentation width for >> and <<
" Search behavior
set hlsearch " Highlight all search matches
set incsearch " Show matches as you type
set ignorecase " Case-insensitive search
set smartcase " Override ignorecase if search contains uppercase
" Usability
set mouse=a " Enable mouse in all modes
syntax on " Enable syntax highlighting
set encoding=utf-8 " Default encoding
set clipboard=unnamedplus " Use system clipboard for yank/paste
set undofile " Persist undo history across sessions
set undodir=~/.vim/undo " Directory for persistent undo files
" Visual
set showmatch " Briefly jump to matching bracket
set laststatus=2 " Always show status line
set wildmenu " Enhanced command-line completion
“`
Ważne: Dyrektywa `set undofile` tworzy trwałą historię cofania przechowywaną na dysku. Oznacza to, że możesz zamknąć plik, otworzyć go ponownie kilka dni później i nadal cofać zmiany z poprzedniej sesji. Utwórz katalog cofania przed włączeniem tej opcji:
“`bash
mkdir -p ~/.vim/undo
“`
Jest to szczególnie cenne przy wprowadzaniu przyrostowych zmian w plikach konfiguracyjnych na systemach produkcyjnych — na przykład podczas dostrajania ustawień PHP-FPM lub dostosowywania parametrów SSL na serwerze obsługującym SSL Certificates dla wielu domen.
Makra: automatyzacja powtarzalnych edycji
Makra są jedną z najpotężniejszych i najrzadziej używanych funkcji Vima. Makro rejestruje sekwencję naciśnięć klawiszy i odtwarza je.
“`
qa Start recording macro into register 'a'
[actions] Perform any sequence of Normal/Insert mode commands
q Stop recording
@a Replay macro stored in register 'a'
@@ Replay the last executed macro
10@a Replay macro 'a' ten times
“`
Przykład z życia wzięty: Masz plik CSV z 200 liniami i musisz otoczyć drugie pole każdej linii podwójnymi cudzysłowami. Nagraj makro na pierwszej linii, odtwórz je 199 razy za pomocą `199@a`, a transformacja zostanie ukończona w mniej niż sekundę. Nie jest wymagane żadne skryptowanie.
Znaczniki i skoki
Znaczniki pozwalają na zakładkowanie pozycji w pliku i natychmiastowy powrót do nich.
“`
ma Set mark 'a' at current cursor position
'a Jump to the line of mark 'a'
`a Jump to the exact position of mark 'a'
'' Jump back to position before last jump
Ctrl+o Jump to previous position in jump list
Ctrl+i Jump to next position in jump list
:marks List all current marks
“`
Vim vs. Nano vs. Emacs: wybór odpowiedniego edytora terminalowego
| Funkcja | Vim | Nano | Emacs |
|---|
| — | — | — | — |
|---|
| **Krzywa uczenia się** | Stroma (system modalny) | Minimalna | Bardzo stroma |
|---|
| **Czas uruchamiania** | Niemal natychmiastowy | Niemal natychmiastowy | Wolniejszy |
|---|
| **Zużycie pamięci** | Bardzo niskie | Bardzo niskie | Umiarkowane do wysokiego |
|---|
| **Podświetlanie składni** | Pełne | Podstawowe | Pełne |
|---|
| **Ekosystem wtyczek** | Rozbudowany | Minimalny | Rozbudowany |
|---|
| **Obsługa makr** | Natywna, potężna | Brak | Natywna |
|---|
| **Podzielone okna** | Tak | Nie | Tak |
|---|
| **Zdalna edycja** | Przez SSH natywnie | Przez SSH natywnie | Protokół TRAMP |
|---|
| **Złożoność konfiguracji** | Umiarkowana (.vimrc) | Minimalna | Wysoka (Elisp) |
|---|
| **Najlepszy dla** | Zaawansowanych użytkowników, administratorów systemów | Szybkich edycji, początkujących | Programistów, użytkowników Lisp |
|---|
Do zadań administracji serwerami — edycji plików konfiguracyjnych, pisania skryptów powłoki, przeglądania logów — Vim zapewnia najlepszą równowagę między mocą, dostępnością i szybkością. Nano jest akceptowalny do jednorazowych edycji, gdy nie możesz sobie pozwolić na kognitywne obciążenie. Emacs jest uzasadnionym wyborem dla programistów żyjących w terminalu, ale jego ślad zasobów i czas uruchamiania czynią go mniej praktycznym w ograniczonych środowiskach serwerowych.
Typowe pułapki i jak ich unikać
1. Edycja plików produkcyjnych bez kopii zapasowej
Zawsze twórz kopię zapasową przed edycją krytycznych plików systemowych:
“`bash
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
sudo vim /etc/nginx/nginx.conf
“`
2. Zapomnienie o użyciu sudo
Jeśli otworzysz uprzywilejowany plik bez sudo i wprowadzisz zmiany, użyj `:w !sudo tee %` do zapisania bez utraty edycji.
3. Mylenie rejestrów
Gdy usuwasz tekst za pomocą `dd`, trafia on do domyślnego rejestru `"`. Jeśli następnie skopiujesz coś za pomocą `yy`, usunięty tekst zostanie nadpisany. Aby zachować yank przed usunięciem, użyj nazwanych rejestrów: `"ayy` kopiuje do rejestru `a`, a `"ap` wkleja z niego.
4. Pozostawianie plików wymiany na współdzielonych systemach
Pliki wymiany Vima w `/tmp` lub katalogu roboczym mogą dezorientować innych użytkowników lub zautomatyzowane procesy. Skonfiguruj dedykowany katalog wymiany w `.vimrc`:
“`vim
set directory=~/.vim/swap//
“`
Podwójny ukośnik na końcu powoduje, że Vim koduje pełną ścieżkę pliku w nazwie pliku wymiany, zapobiegając kolizjom.
5. Problemy z końcami linii w plikach wieloplatformowych
Jeśli edytujesz plik pochodzący z systemu Windows, może on mieć końce linii CRLF (`rn`). Vim wyświetli `^M` na końcu każdej linii. Napraw to za pomocą:
“`bash
:%s/r//g
“`
Praktyczna lista kontrolna kluczowych wniosków
Użyj tego jako szybkiej macierzy decyzyjnej przed sesjami Vima i w ich trakcie:
- Przed edycją jakiegokolwiek pliku produkcyjnego: Utwórz kopię zapasową z sygnaturą czasową za pomocą `cp file file.$(date +%Y%m%d%H%M%S).bak`
- Świadomość trybu: Jeśli naciśnięcia klawiszy nie wstawiają tekstu, naciśnij `Esc` i potwierdź swój tryb
- Nawyk szybkiego zapisywania: Naciśnij `Esc` a następnie `:w` po każdej znaczącej zmianie — nie czekaj do końca
- Użyj `:set number` tymczasowo, jeśli musisz przejść do konkretnej linii i nie masz jej w `.vimrc`
- Dla globalnego wyszukiwania/zamiany: Zawsze testuj z `:%s/old/new/gc` (z potwierdzeniem) przed ślepym uruchomieniem `:%s/old/new/g`
- Monit o plik wymiany przy otwarciu: Zawsze wybierz `(R)ecover`, zapisz zawartość, a następnie usuń plik wymiany
- Dla edycji kolumnowych: Użyj blokowego trybu Visual `Ctrl+v` zamiast ręcznego powtarzania
- Trwałe cofanie: Skonfiguruj `set undofile` w `.vimrc` na każdym serwerze, którym regularnie administrujesz
- Integracja ze schowkiem: Jeśli `p` wkleja nieoczekiwaną zawartość, sprawdź, czy `set clipboard=unnamedplus` jest ustawiony i czy `xclip` lub `xsel` jest zainstalowany
- W razie wątpliwości: `:help keyword` otwiera wbudowaną dokumentację dla dowolnego polecenia lub opcji
Niezależnie od tego, czy zarządzasz plikami konfiguracyjnymi w środowiskach Shared Web Hosting, czy utrzymujesz złożoną infrastrukturę na Dedicated Servers, efektywność Vima kumuluje się z czasem — każde przyswojone polecenie trwale usuwa tarcie z Twojego przepływu pracy.
FAQ
P: Jaka jest różnica między Vi a Vim na Ubuntu?
`vi` w nowoczesnych systemach Ubuntu jest zazwyczaj dowiązaniem symbolicznym do `vim` w trybie ograniczonej kompatybilności lub do `vim-tiny`. Prawdziwe Vi to oryginalny edytor z 1976 roku bez podświetlania składni, wielopoziomowego cofania i obsługi wtyczek. Vim dodaje ponad 100 funkcji do Vi, zachowując pełną wsteczną kompatybilność z wiązaniami klawiszy Vi.
P: Jak wyjść z Vima, gdy jestem całkowicie zablokowany?
Naciśnij `Esc` kilka razy, aby upewnić się, że jesteś w trybie Normal, a następnie wpisz `:q!` i naciśnij Enter. To wymusza wyjście bez zapisywania. Jeśli nawet to nie działa (rzadkie, ale możliwe w rekurencyjnych stanach poleceń), najpierw naciśnij `Ctrl+c`, a następnie `:q!`.
P: Czy Vim może edytować pliki przez SSH bez kopiowania ich lokalnie?
Tak. Użyj `vim scp://user@hostname//path/to/file` do bezpośredniej edycji zdalnych plików przez SCP. Vim obsługuje transfer w sposób przezroczysty. Alternatywnie użyj `rsync` do pobrania pliku, edycji lokalnej i przesłania z powrotem — jest to szybsze w przypadku dużych plików.
P: Jak włączyć podświetlanie składni dla określonego typu pliku, którego Vim nie rozpoznaje?
Uruchom `:set filetype=nginx` (lub `python`, `yaml`, `bash` itp.), aby ręcznie przypisać typ pliku dla bieżącej sesji. Aby uczynić to trwałym dla określonego rozszerzenia pliku, dodaj `autocmd BufRead,BufNewFile *.conf set filetype=nginx` do swojego `.vimrc`.
P: Czy Neovim jest lepszym wyborem niż Vim do użytku serwerowego?
Do czystych zadań administracji serwerami standardowy Vim jest wystarczający i bardziej powszechnie dostępny. Neovim oferuje konfigurację opartą na Lua, lepszą obsługę asynchronicznych wtyczek i wbudowanego klienta LSP — zalety, które mają znaczenie głównie w przepływach pracy programistycznej. Na serwerach produkcyjnych, gdzie instalujesz tylko to, co niezbędne, Vim pozostaje pragmatycznym wyborem.
