Vim/Ściąga
Nauka VIMa przy użyciu ściągi może okazać się jednym z bardziej skutecznych sposobów na poznanie możliwości tego narzędzia. I nie jest to w żadnym wypadku kucie na blachę, choć z pozoru może tak wyglądać. Po prostu - piszemy coś w vimie potem zadajemy sobie pytanie np. "a jak przenosić się między zdaniami a nie męczyć się z b/w"? Zaglądamy tutaj, wiemy już jak, używamy i już zapamiętaliśmy.
Wstęp
[edytuj]Opcje które używają słowa :set można dodać do pliku konfiguracyjnego vima, którego lokalizację znajdziemy wpisując:
:scriptnames
lub
:edit ~/.vimrc
jeśli uważamy, że wpisywanie tylu komend naraz by wykonać jedną konkretną czynność (np. wklejanie) jest zbyt trudne, możemy je zmapować, czyli na przykłąd, zamiast używać komendy do wklejania tekstu ze schowka do Vima:
"+gP
użyć częściej przez nas używanego CTRL+V:
map <C-V> "+g
Powyższego przykładu nie musisz stosować, jest domyślnie zmapowany podczas pracy w Gvim w pliku mswin.vim
Pierwsze kroki
[edytuj]k h l j
komenda | opis |
---|---|
vim plik.txt | otwiera edytor tekstu razem z plikiem |
h | Lewo |
j | dół |
k | góra |
l | prawo |
x | usuwa znak |
dd | wycina wiersz |
J | usuwa znak nowej linii |
u | Cofnij |
U | ponów |
a | Przechodzi w tryb wstawiania (insert) i wstawia kursor za tekstem |
i | przełącza w tryb wstawiania (insert) |
o | tworzy nową, pustą linię poniżej kursora i przenosi Vima do trybu Insert. |
:q | wyjście z programu, jeśli nie dokonałeś żadnych zmian |
:q! | wychodzenie z programu bez zapisywania zmian |
:wq | wyjście i zapis zmian |
:w | zapis zmian w bieżącym dokumencie |
:help | Strony pomocy |
:help x | Pomoc na temat komendy, w tym wypadku x |
:help deleting | pomoc na temat usuwania tekstu |
:help index | Kompletny indeks wszystkich komend Vima |
Poruszanie się
[edytuj]Do przesunięcia kursora o jeden wyraz do przodu należy użyć komendy ”w”. Tak jak przy większości komend Vima możesz użyć mnożnika – liczbowego prefiksu – by przenieść się o kilka wyrazów. Na przykład ”3w” przenosi o 3 wyrazy. Działa to praktycznie z każdą komendą wymienioną poniżej:
komenda | opis |
---|---|
w | przesuwa kursor o następny wyraz |
b | poprzedni wyraz |
$ | przenosi kursor do końca linii |
fx | szuka w przód linii pojedynczego wystąpienia znaku "x" |
F | szuka w kierunku początku linii |
t | działa tak jak polecenie ”fx” z wyjątkiem tego, że zatrzymuje się jeden znak PRZED szukanym znakiem |
T | działa tak jak polecenie ”fx” z wyjątkiem tego, że zatrzymuje się jeden znak PO szukanym znakiem |
% | Szuka parującego elementu, czyli (), [], {} |
G | przenosi nas na KONIEC dokumentu |
g | przenosi nas na POCZĄTEK dokumentu |
CTRL+D | przemieszcza okno o pół ekranu w dół |
CTRL+U | przemieszcza okno o pół ekranu w górę |
CTRL-E | przewija jedną linię w dół |
CTRl+Y | przewija o jedną linię w górę (tylko Linux) |
CTRL+F | przewija cały ekran do przodu |
CTRL+B | przewija cały ekran do tyłu |
/tekst | szuka w dokumencie napisu "tekst" w dół |
?tekst | szuka w dokumencie napisu "tekst" w górę |
n, N | powtarza ostatnie wyszukiwanie w odwrotnym kierunku |
:set ruler | pokazywała pozycję kursora w prawym dolnym rogu |
CTRL+G | Komunikat wyświetla nazwę pliku, który jest edytowany, numer linii gdzie znajduje się kursor, całkowitą liczbę linii, procentowe miejsce w pliku oraz kolumnę kursora (tylko jeśli mamy opcję ruler) |
/tu\> | znajduje tylko słowa, które kończą się na „tu”: |
/\<tu\> | dopasowuje początek wyrazu |
:set hlsearch | podświetla dopasowania podczas wyszukiwania |
:set nohlsearch | wyłącza powyższą opcję |
:set incsearch | Wyszukiwanie w czasie rzeczywistym |
r | podmiana pojedynczego znaku (można używać mnożnika) |
R | podmiana całego wiersza |
. (kropka) | Powtarza ostatnią zmianę |
Zaawansowana edycja
[edytuj]Lista wyrażeń regularnych, pozwalających podmieniać wiele więcej (białe znaki, puste wiersze, enter na końcu zdania) tutaj
komenda | opis | |||
---|---|---|---|---|
:%s/br0/eth1/g | zamienia ciąg znaków br0 na eth1 w całym pliku | |||
:#,#s/OLD/NEW/g | pomiędzy liniami # i # | |||
:%s/([0-9]+) OLD/1 NEW/g | w całym dokumencie z użyciem backreferencji (trzeba poprzez „” wyescapować znaki specjalne, następnie poprzez „1” wstawić wyciągnięte dane) | |||
g/abc/s//\='xyz_'.i/ | let i=i+1 | zamienia abc na xyz_N, gdzie N to iteracja (xyz_1, xyz_2, xyz_3...) | |||
:%s/^/\=printf('%-4d', line('.')) | Operacja odwrotna od wyżej wymienionej - dodaje do każdego wyrazu numer linii na której się znajduje (zamiast abc jest 1 abc 2 acab itd.) więcej | :%g/^$/d | Usuwa puste wiersze |
Praca w zakładkach
[edytuj]komenda | opis |
---|---|
:mks | Zapis sesji |
:tabs | wyświetlenie informacjie o aktualnie otwartych zakładkach |
:tabnew | otwarcie pustej zakładki |
:tabnew FILE | otwarcie pliku FILE w nowej zakładce |
:tabf FILE | otwarcie pliku w nowej zakładce |
:tabn | przejście do następnej zakładki |
gt | przejście do następnej zakładki (działa w trybie NORMAL) |
gT | przejście do poprzedniej zakładki (działa w trybie NORMAL) |
n gt | przejście do zakładki o numerze n (działa w trybie NORMAL) |
n gT | cofnięcie się do zakładki znajdującej się w odległości n od aktualnej (działa w trybie NORMAL) |
:tabp | przejście do poprzedniej zakładki |
:tabl | przejdź do ostatniej zakładki |
:tabc | zamknięcie aktualnej zakładki, gdy jest jedna karta, to nie będzie zamknięta |
:tabo | zamknięcie wszystkich zakładek oprócz tej która jest aktualnie używana |
:tabd KOMENDA | wykonuje komendę na wszystkich otwartych zakładkach |
Tryb wizualny
[edytuj]komenda | opis |
---|---|
v | Rozpoczęcie trybu wizualnego |
CTRL+V | zaznaczanie całych bloków tekstu |
p | wkleja tekst (tekst przenosimy komendami dd lub x) |
P | wkleja tekst przed kursorem |
y, yy, Y | kopiuje tekst (yy i Y natomiast całe wiersze) |
R | przejście w tryb zamiany (replace) |
Sprawdzanie pisowni
[edytuj]komenda | |
---|---|
:setlocal spell spelllang=pl | Uruchamia sprawdzanie pisowni, w tym wypadku w języku Polskim. Jeżeli jest to pierwsze uruchomienie tego polecenia, to należy jeszcze odpowiedzieć na kilka pytań dotyczących pobrania odpowiedniego słownika. |
[s | przechodzimy do nastepnego błędnego słowa |
]s | przechodzimy do poprzedniego błędnego słowa |
zg | dodanie słowa do słownika |
zG | oznaczenie słowa jako poprawnego, zapisane w pamięci RAM |
zw | zignorowanie błędnego słowa |
zW | zdefiniowanie słowa jako błędnego, zapisane w pamięci RAM |
z= | Wyświetla ponumerowaną listę podpowiedzi |
zug | cofa dodane słowo ze słownika |
zuw | cofa usunięcie słowa ze słownika |
Inne
[edytuj]Choć Vim został napisany w języku C, to normalny tryb ma możliwość obsługi znaków PERLo-podobnych. Stąd też ten podstawowy tryb posiada wbudowaną funkcję rozumienia wyrażeń regularnych. Znając ten język, jesteśmy praktycznie ograniczeni jedynie swoją własną wyobraźnią do tego, i tylko od nas zależy, do czego będziemy potrafili zaprząc Vima:
komenda | |
---|---|
:for i in range(1,10) | put ='twoj tekst'.i | endfor | Tworzy listę słów z oznakowaniem iteracyjnym. 1,10 oznacza zakres, tekst może być zastąpiony np. 127.0.0.x (gdzie x to podmiana cyfry kolejno 1, 2 itd.) |
Makra
[edytuj]Vim wspiera także makra - czyli nic innego jak nagrany przez pogram ciąg poleceń wyklepanych na klawiaturze.
q<letter><commands>q
q uruchamia tryb makra, litera (letter) przyporządkowuje go pod konkretny klawisz w celu wywołania, komendy (commands) które makro ma przechwycić i kończymy pracę ponownie wciskając q.
qq zaczyna nagrywanie do rejestru q
... twoja złożona seria poleceń
q zakończ nagrywanie
@d uruchom swoje makro
@@ uruchom swoje makro ponownie
aby zobaczyć jakie komendy makro przechwyciło, wpisujemy
:reg <letter>
Przykład:
chcemy zmienić taki ciąg:
foo bar
na:
foo && bar
w powłoce bash, operator && służy do łączenia poleceń, by można było wykonać jedno za drugim. Ciąg poleceń który dokonuje ww. modyfikacji:
"q A && ^[<80>kd^i<80>kb^[A^[
Pomoc
[edytuj]Online
[edytuj]- help.txt
- vim faq.txt
- quickref.txt
- USER MANUAL - by Bram Moolenaar
- VimTips - sztuczki i kruczki
- 100-vim-commands-every-programmer-should-know
offline
[edytuj]Zainstaluj pakiet:
- vim-doc
sudo apt-get install vim-doc
Strona manuala
man vi
info vi