Aug 24 2010

Vim – nazwane rejestry

W edytorze Vim jeżeli coś kopiujemy lub usuwamy przez dto wpada to do specjalnego rejestru, z którego potem wklejamy w innym miejscu. Dla ułatwienia pracy Vim oferuje dodatkowe rejestry, z których możemy korzystać podczas tych operacji. Rejestry te oznaczone są literkami od a do z.

Aby skorzystać z jednego z nich musimy poprzedzić go znakiem cudzysłowu bezpośrednio przed operacją. Np.

"dyy
kopiuje całą linijkę do rejestru d.
Aby wkleić zawartość tego rejestru w innym miejscu wpisujemy :

"dp

Domyślnie gdy skorzystamy z rejstru do ustawienia w nim danych, to dane te wypełnią cały rejstr – jeżeli już coś w tym rejestrze było to zostanie usunięte. Istnieje możliwość jednak, aby dopisać do rejestru coś nowego. Wystarczy wpisać literkę rejestru jako dużą.

"dyy - kopiuje całą linijkę do rejestru d
"Dyy - dopisuje całą linijkę do rejestru d.

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Aug 24 2010

Vim – folding

Gdy programujemy warto jest czasem schować kawałek kodu, np. gettery i settery w klasach Javy. Vim oferuje taką funkcjonalność. Aby ją włączyć musimy wykonać dwa kroki:
Pierwszym jest uruchomienie foldowania:

:set foldenable

Drugim krokiem jest wybranie logiki zagnieżdżania, a jest ich kilka:

manual - samodzielnie definiujemy gdzie tekst ma byż zagnieżdżany,
indent - zagnieżdżanie zależne od poziomu wcięcia
expr - zagnieżdżanie zależne od wyrażenia regularnego
diff - różnice pomiedzy dwoma plikami definiują zagnieżdżenia,
syntax - zagnieżdżanie zależne od semantyki typu pliku (np. w ruby, javie są to klasy, metody, pętle.
marker - zagnieżdżanie w miejscach oznaczonych specjalnym markerem (także jest to definiowalne)

Gdy już wybierzemy (dla programistów prawdopodobnie będzie to metoda syntax
to wydajemy komendę :

:set foldmethod=syntax

Automatycznie powinno nam zagnieździć tekst, np. 8 linijkowa metoda slug w ruby zostanie schowana a w tym miejscu zostanie wyświetlona linijka:

+--- 8 lines: def slug-----------------------------------------

Co najważniejsze foldowanie może być zagnieżdżone.

Funkcje związane z foldowaniem

Wszystkich komend związanych z tą funkcjonalnością jest ok. 20. Postaram się opisać chociaż najważniejsze z nich. Wszystkie komendy związane z foldowaniem rozpoczynają się od literki

z

wpisywanej w trybie normalnym.


zi - zmiana funkcjo foldowania włączone/wyłączone (tak samo jak użycie :set foldenable)

za - zmienia stan foldingu z otwartego na zamknięty i odwrotnie,
zc - zwija zagnieżdżenie
zo - rozwija zagnieżdżenie
zd - usuwa zagnieżdżenie

zA, zC, zO i zD - analogicznie jak powyższe, z tym że działają rekursywnie

liczbazF - tworzy zagnieżdżenie od obecnej linijki , ilość linijek zagnieżdżonych określone jest liczbą

czyli np. 12zF otworzy zagnieżdżenie z 12 linijek zaczynając od obecnej

zf - tworzy zagnieżdżenie od obecnej linijki do miejsca określonego wskaźnikiem ruchu

czyli zf2j zaczyna zagnieżdżenie w obecnjej linijce a kończy w linijce, w której wylądujemy wykonując ruch 2j (jj ) czyli dwie niżej.

Poruszanie się po zagnieżdżeniach


zj - przejście na początek następnego zagnieżdżenia
zk - przejście na koniec poprzedniego zagnieżdżenia
zm - przejście do zagnieżdżenia wyżej (w przypadku hierarchicznych)
zr - przejście do zagnieżdżenia niżej w hierarchii,

zM - przejście do zagnieżdżenia na najwyższym poziomie

To wszystko, należy tylko dodać że tworzenie i usuwanie zagnieżdżeń są dostępne, gdy ustawimy metodą zagnieżdżania na manulaną.

PS. Dobrze tłumaczę folding jako zagnieżdżanie? bo nie podoba mi się ;)

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Aug 24 2010

Vim jest doskonały

Tłumacząc na język polski Arthura Tateishi’ego:

Teza: Vim jest doskonały

Dowód:
VI w zapisie romańskim oznacza liczbę 6,
Naturalne liczby mniejsze od 6 które są dzielnikami 6: 1,2 i 3.
Suma 1,2 i 3 = 6, czyli 6 jest liczbą doskonałą.

Wniosek: Vi jest doskonały :)

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Aug 23 2010

Vim – dzielenie okna

Każdy kto chociaż trochę popracował z edytorem Vim, wie, że można podzielić okno na kilka i każdym z nich edytować inny plik. Trochę to ułatwia pracę gdy edytujemy kilka plików na raz.
Do tego służą komendy:

:sp - dzielenie okna w pionie
:vsp - dzielenie okna w poziomie.

Można także przekazać edytorowi za którą kolumną (wierszem) ma zostać dokonane podzielenie (domyślnie dzieli na równe części).

:15sp - pierwsze okno będzie miało szerokość 15kolumn, drugie zajmie pozostałą część.

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Aug 23 2010

Vim – skróty

Gdy we wprowadzanym tekście często pojawiają się jakieś długie nazwy, których wpisywanie chcielibyśmy uprościć – Vim przychodzi nam z pomocą komendą :ab. Z jej pomocą możemy ustawić skróty długich zamienników. Np. Gdy wpiszemy
:ab BiP Biuletyn Informacji Publicznej

to za każdym razem gdy we wprowadzanym tekście użyjemy BiP, zostanie on automatycznie rozwinięty do pełnej nazwy.

:ab

Listę zdefiniowanych skrótów można zobaczyć po użyciu komendy :ab bez parametrów.

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Aug 23 2010

Vim – mapowanie skrótów do sekwencji komend

Jeżeli często wykonujemy jakieś sekwencje komend, możemy zmapować je w vimie w taki sposób, aby były wykonywane pod jednym przyciskiem. Dla przykładu jeżeli chcemy zamienić miejscami dwa wyrazy to musimy: usunąć (d) cały wyraz (W), przejść do końca następnego wyrazu (e) i na spację za niego (l) po czym wkleić ze schowka wyraz usunięty (p). Czyli wykonujemy sekwencję komend dWelp. Jeżeli chcielibyśmy zmapować tą sekwencję pod klawisz vpowinniśmy :

:map v dWelp

Użycie :map bez parametrów wyświetli wszystkie ustawione mapowania.

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Aug 23 2010

Vim – zmiana wielkości litery

W edytorze Vim w trybie normalnym możemy skorzystać ze znaku ~ (tylda) aby zmienić wielkość znaku.

~ - zmiana wielkości znaku

Jeżeli chcemy zamienić cały wyraz musimy go wpierw go zaznaczyć w trybie wizualnym.

ve~ zamiana wielkości liter całego wyrazu.
  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Aug 21 2010

Vim – wprowadzanie znaków UTF-8

Podczas edycji potrzebujemy czasem wprowadzić znak, który nie znajduje się w standardowej tablicy np. chcielibyśmy wprowadzić znak: © – Copyright. Znak ten w tablicy UTF8 ma wartość 00A9.

Aby to zrobić wchodzimy w tryb wprowadzania i wciskamy

Ctrl-v u

oraz wartość znaku, czyli

Ctrl-vu00a9

.

Jeżeli chcemy odczytać wartość dowolnego znaku to wpisujemy komendę :asc gdy kursor się na nim znajduje. W dolnej linijce zobaczymy informacje o tym znaku w postaci podobnej do:

<©> 169, Hex 00a9, Octal 251
  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Aug 20 2010

Vim – edycja

W poprzednim artykule opisałem selektory, z których można korzystać podczas pracy z Vim’em. Czas na opis jak edytować pliki.

Z wprowadzaniem tekstu nie powinno już być problemu, wystarczy przejść w tryb wprowadzania i wszystko co wpiszemy pojawi się w tekście. Co jednak, gdy chcemy zmienić lub usunąć wpisany tekst?

Zacznijmy od usuwania:
x – usuwa znak pod kursorem
X – usuwa znak za kursorem (Backspace)
d – usuwa ciąg znaków od kursora do miejsca wskazanego następną komendą

No właśnie jak to działa? Tu są potrzebne selektory poznane w poprzednim rozdziale a także komendy ruchu poznane dwa rozdziały prędzej, Np.:
diw – usunie cały wayraz
di( – usunie zawartość nawiasu
d]) – usunie zawartość od kursora do końca nawiasu
da) – usunie zawartość nawiasu wraz ze znakami nawiasu
d$ – usunie zawartość od kursora aż do końca lini
dg_ – usunie zawartość od kursora aż do ostatniego nie białego znaku w linii.

… i tak dalej…

Kopiowanie:
Za kopiowanie odpowiada literka y (yank) i potrzebuje modyfikatorów analogicznie jak wyżej. np.:

yaw – kopiowanie całego wyrazu wraz z białymi znakami, aż do następnego wyrazu.

Zmiana:
dodatkową opcją edycji jest Change oznaczona literką c. Działa ona w ten sposób, że wycina cały wybrany fragment i przechodzi do trybu wprowadzania. Wycięty fragment będzie można wkleić.

Jeżeli chcemy którąś z tych komend zastosować na całej linijce to wpisujemy ją podwójnie.

dd – usuwa całą linijkę
yy – kopiuje całą linijkę
cc – wycina całą linijkę.

Wklejanie tekstu
p – wkleja tekst za kursorem
P – wkleja tekst przed kursorem

Trochę bardziej zaawansowane:

Vim nie przechowuje w schowku tylko ostatniej kopiowanej (czy też wycinanej rzeczy), tylko kilka ostatnich. Jeżeli nie precyzujemy konkretnie, to oferowany jest ostatni wpis w rejestrze. Możemy jednak sami definiować gdzie ma być kopiowane i co wklejane.
Rejestry można zobaczyć wydając komendę :registers
Jeżeli chcemy użyć komendy do konkretnego rejestru to wpisujemy symbol rejestru poprzedzony cudzysłowem bezpośrednio przed komendą, np.:

"1yy – kopiuje całą linijkę do rejestru "1
"1p – Wkleja zawartość rejestru o nazwie "1

Zastępowanie znaków.

r – zastępuje obecny znak tym, który zostanie wprowadzony
s – zastępuje tekst od obecnej pozycji kursora aż do miejsca wskazanego następną komendą, przez tekst, który będzie wpisany.

Dokładne zrozumienie działania tych komend wymaga trochę dłuższego opisu. Zacznijmy od prostrzej sprawy czyli Replace r:
W najprostrzej postaci komenda ta służy do poprawiania literówek, najeżdżamy na znak który chcemy zmienić, wciskamy “r” wciskamy znak, który ma być w tym miejscu i następuje zamiana. Nic prostrzego. Komendę możemy wykorzystać do trochę bardziej zaawansowanych zadań. Np. mamy kilkanaście spacji pomiędzy wyrazami i chcemy je zastąpić znakiem kropki. Umieszczamy w takim przypadku kursor na pierwszej spacji pomiędzy wyrazam, wpisujemy komendę viw która urochomi tryb wizualny i zaznaczy całą przestrzeń pomiędzy wyrazami, następnie wciskamy r jako że chcemy zastąpić znak i na koniec znak kropki. Całe zaznaczenie zostanie zamienione na kropki.

Podobnie jak “r” działa “s”, z tą różnicą, że nie zmienia jednego znaku, ale pozwala wprowadzić dowolny tekst, którym zastąpi wybrane zaznaczenie. Jeżeli utworzymy zaznaczenie blokowe w trybie wizualnym, to możemy zmienić tekst w kilku linijkach. Przydatne to jest np. podczas edycji zapytań sql lub danych pseudotabelkowych.

Słowo na koniec.

Na sam koniec zostawiłem perełkę, którą warto poznać. Jest nią znak . (symbol kropki). Wciśnięcie tego znaku wykonuje ponownie ostatnią komendę z grupy edycji (czyli te poznane dzisiaj).

Trenujcie, jutro jedziemy dalej…

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark

Aug 20 2010

Vim – perełki

Pisząć o vimie warto wspomnieć o kilku wbudowanych perełkach. Nie warto wyjaśniać co one robią tylko proszę sprawdzić samemu :)


:set rightleft
:help!
:help 42
:help quotes
:help holy-grail

:D

  • Wykop
  • Blip
  • Twitter
  • Facebook
  • DZone
  • Digg
  • Blinklist
  • Delicious
  • Evernote
  • LinkedIn
  • Google Bookmarks
  • Google Buzz
  • Google Reader
  • Share/Bookmark