Sep 3 2010

Recenzja książki “Enterprise Rails”

Od dłuższego czasu patrząc najpierw na plany wydawnicze, potem na nowości – natykałem się na dość ciekawy tytył: “Rails. Projektowanie systemów klasy eneterprise”

Ciekawy, bo jestem natywnym programistą Java, który kojarzony jest właśnie z enterprise.
Mimo ciekawości powstrzymywałem się od zakupu tej książki, z kilku powodów. Po pierwsze oryginalna wersja została opublikowana w 2008 roku więc jest już dość leciwa biorąc pod uwagę szybkość rozwijania się frameworka Rails. Po drugie lada dzień wspomniany framework zostanie opublikowany w wersji 3.0, który wprowadza wiele rewolucyjnych zmian. Bałem się po prostu, że książka ta stanie się nieaktualna już w momencie zakupu.
Szczęśliwym trafem stałem się posiadaczem kupony, który musiałem zrealizować w jednej z trójmiejskich księgarni danego dnia. Będąc jednak w środku zupełnie nie byłem zachwycony zawartością półki (a raczej półeczki) opatrzonej tabliczką “Informatyka”. Większość tytułów to były podręczniki szkolne, które jak na razie jeszcze mnie nie interesują (zainteresują jak dzieciaki pójdą do szkoły :) ). Jedyną pozycją nadającą się do kupna był wymieniony wyżej tytuł. Nie mając większego wyboru kupiłem tą książkę.
Obawy co do nieważności książki były tak duże, że o mało co, nie wylądowała na półce bez czytania. No ale skoro książka już jest to chociaż pierwszy rozdział… i tak już do końca.

Moje obawy stały się w pełni niesłuszne. Książka porusza problemy “okołoprogramistyczne” i jeżeli już w niej natkniemy się na fragmenty kodu, to łatwo go zaadaptować do nowej wersji Rails. Co więcej – po przeczytaniu książka awansowała w moim osobistym rankingu z “książki do starych wersji, częściowo nieaktualne” do “książki, które powinny być pod ręką albo w pamięci”.
Lektura tej książki dostarczyła mi bardzo dużo przydatnych informacji. Co w środku:

Pierwszą rzeczą, której nauczyłem się z książki było pisanie nowych funkcjonalności i wprowadzenie ich do projektu w postaci gemów. Nie ukrywam, że jestem początkującym programistą Ruby’ego i ten rozdział przyniósł mi dużo wiedzy na ten temat. Niezamierzenie przez autora przyniósł mi także sporo wiedzy o Ruby reflection.

Kolejnym tematem w książce są bazy danych i ich optymalizacja. Poruszane jest tu na prawdę dużo ciekawych tematów, walidacja na poziomie baz danych, normalizacja, triggery, korzystanie z “widoków bazodanowych” w aplikacji. Opisane jest także dziedziczenie wielotabelarczyne, które dostarczyło całkiem nowe spojrzenie na railsy. Wiele razy spotkałem się z problemem, które zdają się błahe po przeczytaniu tego rozdziału. Myślę, że dla samego opisu dziedziczenia wielotabelarycznego warto zaopatrzyć się w tą pozycję.

Kolejne rozdziały opisują webservices i jak z nich korzystać efektywnie, oraz problemy cache’owania aplikacji.

Myślę, że książka ta powinna znaleźć się na półce każdego programisty Rails. Mimo, że na wiek książki nie wszystkie (jednak..) informacje są aktualne, jest ich na prawdę niewiele. Reszta w całości lub w części może być śmiało zastosowana w naszym projekcie, aby zwiększyć jego bezpieczeństwo lub optymalne działanie.

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

Sep 2 2010

Vim – trochę więcej o rejestrach

W jednym z poprzednich artykułów wyjaśniałem zasady używania nazwanych rejestrów. Teraz należy się trochę więcej informacji na ten temat.
Czym właściwie są te całe rejestry? Rejestry są to miejsca w pamięci, do których lądują dane, które kopiujemy lub wycinamy podczas edycji dokumentu. Jak wyjaśniłem w cytowanym artykule, podczas kopiowania lub usuwania danych, możemy podać nazwę rejestru, do którego te dane lądują. Rejestry te oznacza się literkami od a do z. Nie są to jednak jedyne rejestry dostępne w edytorze Vim. Jeżeli jesteśmy ciekawi pozostałych, wystarczy że w lini komend wpiszemy :registers i zawartość wszystkich rejestrów zostanie wyświetlona na ekranie.
Zapamiętać także musimy, że wybrany rejestr poprzedzamy znakiem cudzysłowa przed komendą operacji, czyli "addoznacza że usuwamy całą linijkę i umieszczamy ją w rejestrze ‘a’.

Jakie jeszcze rejestry widnieją w edytorze.

Rejestr anonimowy (nienazwany) – dostajemy się do niego poprzez podwójny znak cudzysłowu. Rejestr ten przechowuje ostatnią informację umieszczaną w dowolnym rejestrze. Czyli "add usuwa całą linijkę i umieszczą ją zarówno w rejestrze ‘a’ jak i nienazwanym.

Rejestr małych usunięć.

Jeżeli usuwamy fragment tekstu, który jest krótszy niż linijka i jednocześnie nie wskazujemy żadnego rejestru, to fragment ten zostaje umieszczony w tym rejestrze. Dostęp do niego określony jest przez znak myślnika "-

Rejestry ponumerowane

Analogiczne jak rejestry nazwane działają rejestry numerowane. Jednak sami nie możemy wybrać do którego będziemy wprowadzać dane. Rejestry te oznaczone cyframi od 0 do 9 przechowują 10 ostatnich operacji. Jeżeli coś usuwamy (’d’ lub ‘x’) lub zmieniamy (’c') to ląduje to w rejestrze “0″. Zatem rejestr zawiera ostatnią zmianę/usunięcie. Do rejestru “1″ także ląduje ostatnie usunięcie/zmiana, chyba że podczas operacji został określony rejestr, lub tekst jest krótszy niż linijka, gdzie w tym przypadku tekst ten ląduje w rejestrze małych usunięć. Gdy następny framgent ma wylądować w rejestrze “1″ to przedtem zawartość tego jest przesuwana do rejestru “2″ itd.
Jednym zdaniem można powiedzieć, że są to ostatnie 10 wykonanych operacji.

Rejestry tylko do odczytu

Edytor Vim posiada także kilkoma rejestrami, z których można tylko dane odczytywać, a nie można ich zapisywać. Dane zapisywane są w nich podczas wykonywania określonych operacji.

"% – ten rejestr zawiera nazwę pliku w aktualnym buferze,
"# – zawiera nazwę poprzedniego pliku otwartego w tym buferze(inaczej zwanego plikiem alternatywnym)
". – ten rejestr zawiera ostatni wprowadzony tekst.
": – ten rejestr zawiera ostatnią komendą wprowadzoną w linii komend.

Przy używaniu graficznego interface’u dostajemy także:
"* – rejestr przechowywujący zawartość schowka systemowego (Clipboard)

Rejestr czarnej dziury

Nie spotkałem się jeszcze z taką sytuację, ale być może jest potrzeba aby usunąć coś z dokumenty tak aby nie było przechowywane w żadnym z rejestrów. Jeżeli chcemy coś takiego zrobić, to musimy użyć rejestru czarnej dziury. Oznacza się go myślnikiem "-. czyli jeżeli chcemy jakąś linijke pernamentnie usunąć to wykonujemy komendę: "-dd.

Rejestr wyszukiwania.

Kolejnym rejestrem jest rejestr wyszukiwania, który przechowuje ostatni wzorzec wyszukiwania użyty w buforze. Rejestr ten oznacza się: "/

Rejestr wyrażeń

Ostatnim rejestrem jest rejestr wyrażeń oznaczony "=. Rejestr ten przechowuje ostatnie wyrażenie wprowadzone w edytorze. Co to są wyrażenia i jak z nich korzystać to jest temat na cały artykuł, więc nie będę tego tutaj wyjaśniać. Jeżeli ciekawość jednak nie da wam spokoju to proszę zerknąć do :help expression

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

Aug 30 2010

Wzorce Projektowe, źródło książkowe

Znajomość wzorców projektowych zdaje się być jedną z ważniejszych umiejętności posiadanych przez wprawnego programistę. Dlaczego jest zatem tak, że nie każdy programista je zna? Składa się na to kilka współczynników. Po pierwsze: wzorce wymagają pewnego doświadczenia programistycznego, aby podczas nauki można było znaleźć dla nich praktyczne zastosowanie. Po drugie: oryginalna książka bandy czworga jest śmiertelnie nudna i nauka wzorców z tej książki wymaga solidnego samozaparcia. Te czynniki sprawiają, że nawet jak wzorce są omawiane na studiach, to studenci w większym stopniu o nich zapominają. Zostaje zatem samonauczanie podczas swojej pracy – poznając wzorce szukamy dla nich praktycznego zastosowania w obecnym projekcie.

Gdzie jednak szukać dobrego źródła na ten temat? Jeżeli szukamy wśród pozycji książkowych to godną polecenia pozycją jest: Head First Design Patterns. Mimo, iż jest to chyba jedyna pozycja na polskim rynku dotycząca tego tematu, to zdecydowanie jest godna polecenia. Książka pisana w dość luźnym stylu wyjaśnia stosowanie wzorców na praktycznych przykładach. Budując krok po kroku fragmenty kodu czytelnik widzi te same funkcjonalności zarówno z wykorzystaniem wzorców jak i bez nich. Jest to bardzo dużą zaletą książki, bo początkowi programiści mają największy problem ze znalezieniem miejsca na wzorzec w swoich projektach. Po lekturze tej książki na pewno będzie to łatwiejsze.
Pamiętając, że wzorców jest razem 23 – 14tu z nim zostały poświęcone całe, dość spore rozdziały. Pozostałe 9 zostało opisane dość skrótowo, co nie znaczy, że nie zrozumiale. Uważam jednak, że wzorzec Proxy ze względu na swoją specyfikę i dość rzadkie zastosowanie powinien być potraktowany opisowo, natomiast rozdział ten powinien zostać poświęcony na wzorzec Builder albo Chains of responsibility. Być może jednak jest to tylko moje odczucie.
Zdecydowanie polecam tą książkę zarówno tym, którzy nie potrafią wzorców jak i tym, którym się zdaje że je potrafią. Książka potrafi ukazać problem z całkowicie innej perspektywy. Bardzo łatwo z nią nauczyć się lub utrwalić wiedzę na temat wzorców.
hfdepa

Jeżeli nauka wzorców ma być tylko jednym z kroków do nauki poprawnego programowania obiektowego to z tego miejsca polecam drugą książkę z tej serii: Head First Object-Oriented Analysis and Design. Obie pozycje w duecie dostarczają bardzo duży zasób wiedzy z programowania obiektowego.

Obie pozycje zdecydowanie polecam,

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

Aug 26 2010

Vim – wykonanie operacji na wszystkich buferach jednocześnie

Jeżeli edytujemy jednocześnie kilka plików i chcemy wykonać jakąś operację jednocześnie na wszystkich buferach to komendę, którą chcemy wydać musimy poprzedzić

:bufdo - wykonanie operacji na wszystkich buferach, np.
:bufodo w! - zapisanie wszystkich plików.

Analogicznie możemy wykonać jedną komendę jednocześnie na wszystkich otwartych oknach edytora:

:windo

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

Aug 26 2010

Vim – zapisywanie fragmentu pliku jako inny plik

Jeżeli chcemy zapisać fragment pliku do innego pliku musimy w trybie rozszerzonym określić zasięg który chcemy zapisać oddzielnie i wydać komendę zapisującą:

:200,$w newfile - zapisuje fragment pliku od linijki 200 do końca jako newfile

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

Aug 25 2010

Vim – kopiowanie pomiędzy plikami

Jeżeli chcemy skopiować coś pomiędzy plikami to nic trudnego, generalnie nie ma co tu opisywać. Jeżeli edytujemy dwa pliki w dwóch Zakładkach lub buferach, to cały proces jest bardzo prosty:
1. w pierwszym buferze wydajemy komendę kopiującą, np. yy,
2. przełączamy się na drugi bufer,
3. wydajemy komendę wklejającą np. p
to wsio.

Jednak jeżeli poruszyliśmy ten temat przypomnijmy dwa kolejne rodzaje kopiowania:
1. Nazwane rejestry:
- kopiowanie do rejestru “a” 4 linijek:
“a4yy
- wklejanie z rejestru a:
“a

2. Tryb rozszerzony:
- kopiowanie 4 linijek do rejestru “a”:
:.;+4ya a
- wklejanie z rejestru “a”
:pu a

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

Aug 25 2010

Vim on Rails

Ostatnio natrafiłem na screencast Ben Orenstein’a jak używać Vima do programowania w rails. Screencast ma 36 minut i został podzielnony, na kilka części:

  1. Podstawy efektywnego programowania
  2. opis pluginu rails.vim
  3. Opis pluginu Snipmate
  4. Tags, i ich efektywne wykorzystanie
  5. kilka słów o wyszukiwaniu
  6. jak edytować jeszcze szybciej

Wg mnie screencast powinien być obejrzany zaraz po podstawowej nauce Vima. Filmik jest dobrze nakręcony i dobrze pokazuje jak programować w railsach za pomocą tego edytora.

W związku, że vim jest coraz częściej wykorzystywany do pracy z rails, (sam Yehuda Katz przesiadł się na ten edytor) warto poświęcić te kilka dolarów aby zapoznać się z tym narzędziem.

Good work Ben!
It’s worth to spend few bucks to watch that great screencast. We can learn how to use this efficient editor for more efficient productivity with rails development.

Thanks A lot.

Dziękuję autorowi za udostępnienie screencasta.

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

Aug 25 2010

Najlepszy edytor do Rails (czyli dlaczego Vim a nie Textmate)

Patrząc na te wszystkie screencasty pokakzujące programowanie w ruby on rails zauważyć można że, wsród edytorów prym wiedzie Textmate. Czy jest on jednak aż tak produktywny do wytwarzania aplikacji? Sprawdźmy.

Najpierw przeanalizujmy jakie narzędzia mamy do wyboru:
- Netbeans,
- Rubymine,
- Aptana,
- Textmate,
- Emacs,
- Vim,
- Redcar.

Nie znam innych narzędzi, które są wykorzystywane do tworzenia aplikacji w rails wśród moich znajomych.

Pierwsze trzy to typowe IDE z podpowiadaniem składni, debuggerami i innymi dodatkami. Można powiedzieć, że jest to wyższa klasa niż pozostałe. Nie będę porównywał który z nich jest lepszy. Napiszę tylko, że z pośród tych wszystkich zalet, które ze sobą niosą, mają jedną ale bardzo znaczną wadę. Nie wspierają wersji języka, czy też frameworku, dopóki autor edytora go nie zaimplementuje. Więc czasami musimy walczyć walkę z narzędziem a nie z samym frameworkiem.

Spójrzmy na pozostałem 4 edytory. Zacznijmy od ostatniego: redcar – dość ciekawa propozycja napisana w jruby, czyli międzyplatformowa. Niestety nadal jest w fazie alfa więc na razie nie ma co sobie głowy zawracać tym produktem. Poza tym jako jeden z głównych Feature’s wymieniana jest zgodność z bundlami Textmate’a. Czy to aż taka zaleta?

Pozostają 3. Znam Zarówno Emacsa jak i Vima, jednak ten drugi jest popularniejszy. Mają zbliżone funkcjonalności jednak Vima łatwiej rozszerzać o własne funkcje. Poza tym emacs ma 2,9mln wyników w google a Vim ponad 11mln – więc emacsem nie będziemy się zajmować.

Doszedłem do etapu, który sowicie zaplanowałem, porównanie Vim z Textmate. Sprawdźmy ze strony Textmate Główne cechy tego edytora i porównajmy go do VIma.:

Ability to Search and Replace in a Project

Sic! bzdura aby wypisywać coś takiego jako feature, nawet windowsowy notatnik coś takiego potrafi. Aby nie było – Vim także potrafi. Potrafi szukać w górę, w dół, wyszukuje zgodnie z regexpem.

Auto-Indent for Common Actions Like Pasting Text

Hm, ciekawe, w Vim proszę ustawić :set autoindent i po sprawie mamy to samo.

Auto-Pairing of Brackets and Other Characters

Dla przypomnienia z nauki Vima: % - przenosi na parujący znak. Czyli vim też to ma.

Clipboard History

Ha! Vim nawet ma tzw. nazwane rejestry gdzie możemy decydować do którego rejestru kopiujemy i z którego wklejamy. Historię też ma.

Column Selections and Column Typing

Mamy, mamy. Podstawowy vi tego nie ma, ale Vim wprowadza tryb wizualny, gdzie możemy zaznaczać tekst blokowo i pisać w kilku linijkach to samo.

Completion of Words from Current Document

Vim ma nie tylko autouzupełnianie z obecnego dokumentu, ale i z zewnętrznych, z historii, wklejanie całych linijek z obecnego dokumentu i trochę więcej.

Declarative Language Grammars for Graceful Mixing and Hacking

Vim potrafi sam rozpoznać, który syntax wykorzystywać po rozszerzeniu pliku. Dodatkowo, można w pliku konfiguracyjnym włączać lub wyłączać odpowiednie pluginy przy edycji poszczególnych plików.

Dynamic Outline for Working With Multiple Files

No dobra, Textmate w wbudowany drawer, w którym widać całe drzewko plików projektu. Vim tego nie ma, ale ma plugin NerdTree, który dodaje tą funkcjonalność.

Expand Trigger Words to Code Blocks With Tab-able Placeholders

Vim też tak ma, co prawda wbudowana werjsa :ab jest dośc uboga, ale pluginami takimi jak “sniepty” można już dużo zrobić.

File Tabs when Working With Projects

Vim has tabs. Dodatkowo może obszar zakładki podzielić na kilka części (bufery) i w każdej z nich edytować inny plik. Jeżeli zakładek i buferów zabraknie można otworzyć nowe okno.

Foldable Code Blocks

Vim posiada foldowanie zależne od rodzaju tekstu(np. kod), od wcięć, od markerów, różnic w pliku lub ustawiane ręcznie.

Function Pop-up for Quick Overview and Navigation

No dobra nie znalazłem popapu dla wyjaśnienia funkcji, ale korzystając z systemowej funkcji unixowej funkcji ctags możemy otworzyć wyjaśnienie funkcji w nowym buferze.

Plug-able Through Your Favorite Scripting Language

Vim has looooooots of plugins. Nie potrafię nawet obejżeć i przetestować ich wszystkich. Vim udostępnił wspaniałą architekturę do budowania pluginów i powstaje ich cała masa.

Recordable Macros With No Programming Required

Nie korzystałem z makr w Vimie, ale są.

Regular Expression Search and Replace (grep)

Wspomniano wyżej, jest coś takego w Vimi’e

Run Shell Commands from Within a Document

Może to zabrzmi dziwnie, ale Vim także to potrafi. Potrafi wykonać komendę, przełączyć się na chwilę do shella , może wkleić wynik shellowej komendy do dokumentu, a nawet potrafi zaznaczony fragment tekstu wrzucić jako argument komendy shellowej i wkleić zwrócony wynik.

Support for Darcs, Perforce, SVK, and Subversion

Vim nie ma wbudowanej obsługi SCM, ale można to rozbudować pluginami albo bezpośrednio uruchamianymi komendami shella.

Support for More Than 50 Languages

Vim posiada prawie 3200 pluginów wierzę, że wspiera więcej niż 50 języków.

Switch Between Files in Projects With a Minimum of Key Strokes

Z pluginem rails.vim łatwo się przełączać pomiędzy Modelem, Helperem, Controllerem, Widokiem i plikami testów. bardzo łatwo.

Themable Syntax Highlight Colors

Wow! bomba, w sumie jak by poszukać, to Vim też ma kilka schematów kolorów.

Visual Bookmarks to Jump Between Places in a File

W vimie nazywają się to Tagi.

Works As External Editor for (s)ftp Programs

Też tak potrafię, edycja przez sftp, scp. W którymś z kolejnym artykułów napiszę jak to zrobić.

Works Together With Xcode and Can Build Xcode Projects

Who cares about it! Nie ma to jak dobra reklama XCode. IMO XCode jest wyśmienitym edytorem Objective-C, do innych języków też się nadaje ale słabiej. Wg mnie to żadna zaleta, że potrafi budować projekty XCode przy odrobinie zaparcie idzie coś takiego zrobić applescriptem, pytanie tylko : Po co?

Co więcej?
Textmate pracuje tylko w systemie MacOS, Vim praktycznie na każdej platformie.
Textmate jest płatny i nie jest wspierany od dwóch lat.
Textmate ma bundle, które ułatwiają edytować kod. Vim ma snipety, które robią to samo.
Textmate jest ładny. Vim dla niektórych też. :)
“Jeżeli mam Textmate’a to znaczy że mam Mac’a i jestem cool”. Też mam Maca, a Textmate’a wywaliłem po dwóch dniach użytkowania.

Reasumując.

Wg mnie Textmate nie ma nic, co może mieć Vim. Za tym drugim stoi także dość spore community. I długie doświadczenie w realizacji projektu. Vim ma jeszcze jedną zaletę, jest wszędzie. Jeżeli jesteśmy nie tylko programistami ale trochę administratorami, to gdziekolwiek sie nie zalogujemy to vim prawdopodobnie tam będzie. Użytkownicy Textmate’a muszą się w takich sytuacjach uczyć drugiego edytora, aby poprawić zdalnie plik. Vim’owcy nie muszą.

Zatem kiedy możemy chcieć programować w Textmate:
- …myślę…
- …myślę…
- gdy… chcemy nakręcić screencasta i chcemy aby wyglądał jak tysiąc innych(musimy wtedy także zmienić tapetę na domyślną)
- gdy wchodzimy do zespołu gdzie inni z tego edytora korzystają.
- gdy mamy ochotę wydać 50Euro za coś co mamy za darmo od 1976 roku.
W innych przypadkach zalecam korzystanie z Vima. A jak skutecznie z niego korzystać przedstawię w jednym z kolejnych artykułów.

PS. Bez urazy ale jakbym miał wydawać tyle kasy to wolałbym dołożyć 42Euro i kupić rubymine’a. Niby prawie dwa razy więcej kasy, ale 5 razy więcej możliwości.

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

Aug 25 2010

Vim – tryb rozszerzony (ex)

Co? Jeszcze jeden tryb w Vimie? Już jest tryb normalny(komend), tryb wizualny i tryb wprowadzania. Nie chcę się uczyć nowego trybu!!!!
:)

Tak na prawdę to musisz się go nauczyć, ale to nic strasznego. Generalnie niektórzy użytkownicy nawet nie wiedzą, że taki tryb istnieje (albo nie wiedzą, że się tak nazywa – po prosty z niego korzystają)

Tryb ten poszerza możliwości zwykłego trybu komend. W trybie normalnym, komendy są bezargumentowe, co trochę ogranicza możliwości edycyjne. W trybie rozszerzonym wszystkie komendy są wykonywane dopiero po wciśnięciu ENTER, więc możemy pisać trochę bardziej złożone.

Aby przejść do trybu rozszerzonego (ex) wciskamy : dwukropek w trybie normalnym, kursor przeniesie się do liniji pod ekranem edytora i tam możemy wpisywać komendy. Po zakończeniu wciskamy ENTER i całość zostanie wykonana.

Edycja w trybie rozszerzonym

Tryb Ex powiela niektóre funkcjonalności trybu normalnego i umożliwia edycję dokumentu z wykorzystaniem tego trybu Główną różnicą jest to, że w trybie rozszerzonym pracujemy na całych linijkach tekstu. Wszystkie komendy edycyjne składają się z dwóch części: co chcemy zrobić i z czym , czyli podać zasięg edytowanego fragmentu. Jeżeli nie podamy zasięgu to edytor uzna, że chodzi nam o linijkę, w której znajduje się kursor.

Zacznijmy od najprosztych komend:

d - usuwanie linijki
m - przesunięcie linijki
co - kopiowanie linijki
t - synonim "co" czyli także kopiowanie

Jako parametr kopiowania może być podany numer linii do której kopiowany tekst ma być od razy wklejony, w przeciwnym wypadku tekst zostanie skopiowany do schowka(rejestru).
Jako parametr przenoszenia MUSI być podana linijka do której zostanie tekst przenoszony.

Dla przykładu :

:dENTER spowoduje usunięcie bieżącej linijki
:1co5 - skopiowanie linijki nr 1 do linijki nr 5

Dla czytelności zapisu nie będę wypisywał już więcej, że komendę kończymy ENTER’em.

Zanim pójdziemy dalej powinniśmy wiedzieć jak włączyć numerację linii w Edytorze, służą do tego komendy:

:numbers lub
:nu

Przejdźmy zatem do określenia zasięgu
- Jeżeli nic nie podamy to komenda zostanie wykonana na bieżącej linijce,
- Jeżeli podamy jedną liczbę to określa ona numer linijki na której chcemy wykonać komendę,

:12d - usunięcie linijki nr 12

- Jeżeli przecinkiem możemy rozdzielić zasięg od której linijki do której linijki .

:1,3d - usuwanie linijek 1 do 3
:5,10mv11 przeniesienie linijek od 5 do 10 do linijki 11(i dalszych)

Można użyć kilka specjalnych symboli:

. - bieżąca linijka,
$ - ostatnia linijka dokumentu,
% - cały plik,
* - zawartość obszaru widocznego,

Śmiało możemy je wykorzystywać przy naszych operacjach

:1,2co. - kopiowanie linijek od 1 do 2 do bieżącej
:.,$d - usuwaj z tąd do końca pliku ;)

Możemy także działać relatywnie, wystarczy liczbę oznaczyć znakiem + lub -


:-,+d usunięcie linijek od poprzedniej do następnej
:-3co+5 skopiowanie linijki 3 przed bieżącą do linijki 5 za bieżącą.
:.,.+20d usunięcie linijek od bieżącej do 20 za bieżącą.

Problemem może być to, że relatywne określanie pozycji jest liczone wobec bieżącej linijki. Zatem jeżeli jesteśmy w linijce 1 i wykonamy komendę:

:100,+5d

możemy się spodziewać, że usunie linie od 100 do 105. Jednak w rzeczywistości wyskoczy nam błąd. Bo komenda ta oznacza chęć usunięcia linijek od 100 do 6!.
Jeżeli chcemy aby relatywne pozycjonowanie drugie argumentu było liczone wobec pierwszego – do rozdzielenia ich nie korzystamy z przecinka tylko ze średnika. Zatem komenda:

:100;+5d

spowoduje usunięcie linijek od 100 do 105.

Kolejną możliwością, określania zasięgu jest wykorzystanie wzorców wyszukiwania.

:/wzorzec/d usunięcie linijki zawierającą ten wzorzec
:/wzorzec/+d usunięcie linijki kolejnej po tej zawierającą wskazany wzorzec
:/wzorzec1/,/wzorzec2/d usunięcie linijek do wzorca 1 do wzorca 2

To wsio na dziś.

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

Aug 25 2010

Vim – przesuwanie w zakresie okna

Jeżeli piszemy tekst może się przesunąć zbytnio w dół okienka, przez co staje się trochę nieczytelny.
Jeżeli chcemy obecną linijkę umieścić na środku ekranu to używamy komendy
zz lub z.

Inne komendy tego typu:

zb - przesunięcie bieżącej linijki do dołu okna
zt - przesunięcie bieżącej linijki do góry okna

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