W zamierzchłych, zamierzchłych już czasach, gdy jeszcze pracowałem na co dzień z Pewnym Systemem Operacyjnym Pewnej Firmy z Redmond ™, używałem bardzo przyjemnego, tekstowego, przyjemnie mocno konfigurowalnego edytora jakim jest Edit+. Nie wyobrażałem sobie wtedy pracy z czymś innym. No, prawie – szukałem przez długi czas, nawet bardzo długi, czegoś lepszego, ale się nie dało… :)

Później nadszedł czas, kiedy zmieniłem Pewien System Operacyjny Pewnej Firmy z Redmond ™ na Jedyny Właściwy, Miłościwie Nam Panujący System Operacyjny ™. Tenże system to oczywiście Linux :)

Szukając i przeglądając rózne Linuksowe edytory, a jest ich całkiem sporo, natrafiłem (no dobra, nie dało się nie natrafić) na Vima, który, po krótkim przeszkoleniu, stał się Jedynym Prawdziwym Następcą ™ Edit+ :)

Vim pozwala na sprawną edycję, wraz z kolorowaniem składni, naprawdę wielu rodzajów plików. W sumie, nie znam takiego którego by nie umiał w konkretny sposób pokolorować :) A ja go najczęściej używam do edycji plików systemowych, albo do kodowania w językach PHP, Python, C++, C#, XHTML/HTML/CSS i JavaScript, a ostatnio także Perl, z czego języki C++ i C# znacznie rzadziej. Szczególnie ostatnio.

O ile do plików systemowych i tekstowych Vim w zupełności wystarcza, o tyle do pozostałych języków szukałem też już od dość długiego czasu czegoś, co pozwala mi w przyjemny i wygodny sposób zarządzać projektami, będzie mi co nieco podpowiadał jeśli chodzi o składnie kodu, pozwalało mi na szybkie przechodzenie między poszczególnymi kawałkami kodu (coś a la drzewo metod/funkcji) i znaczniki (bookmarki? w Vimie to się nazywa markery OIDP – chodzi o zaznaczenie linii kombinacją klawiszy, przejście gdzie indziej, znów zaznaczenie, a później za pomocą innej kombinacji klawiszy szybkie przechodzenie między tymi zaznaczonymi liniami), a do tego było wygodne jak Vim :) A jeśli już dałoby się tego używać także pod Windowsem, to już zupełnie bajka :)

Przeszedłem przez róźnego rodzaju IDE, jak Eric3 (tylko dla Pythona), Eclipse, Zend Studio, jak też mnóstwo zaawansowanych mniej lub bardziej edytorów, jak choćby jEdit czy gedit. I wciąż to nie było to ;) Albo za toporne, albo zbyt wolne, albo różne takie.

W końcu się stało. Natrafiłem na NIEGO. I się zakochałem ;)

Kilkanaście dni temu zaczęłem używać nowego, dla mnie, edytora: Komodo w wersji 4.0beta. I jak na razie, nie wliczając obsługi bugów ;) które jako wersja beta jeszcze posiada, jest prawie idealny:

  • Tryb emulacji Vima daje mi swobodę, wygodę, możliwości i ułatwia przejście z Vima.
  • Bardzo duże możliwości konfiguracyjne (no dobra, zdaje się że nieco mniejsze niż właśnie Vima :) ) dają mi możliwość dopasowania środowiska dla moich potrzeb (to był jeden z powodów dla których zaczęłem używać Linuksa…).
  • Pełna obsługa (pełna, czyli nie tylko kolorowanie składni, ale podpowiadanie kodu, debugger, interaktywny shell i kilka takich różnych) języków JavaScript, PHP, Python, Perl i kilku innych, akurat mi niepotrzebnych, pozwala mi na swobodne poruszanie się w używanym akurat projekcie.
  • Właśnie, obsługa projektów.
  • Przeglądarka kodu w postaci drzewa, o czym pisałem wcześniej.
  • Możliwość edycji plików znajdujących się na serwerze zdalnym (poprzez FTP, SFTP lub SCP).
  • W wersji Professional obsługa systemów kontroli wersji CVS i SVN.
  • Makra.
  • Wstawki (snippety).
  • Wieloplatformowość – zbudowany na bazie tego samego toolkitu co Firefox.
  • dużo, dużo więcej….

A czemu tylko prawie idealny? No cóż, nie ma rzeczy idealnych ;) Mógłby być czasem nieco szybszy (aczkolwiek u mnie jest i tak dużo szybszy niż molochy typu Zend Studio czy Eclipse), mógłby być tańszy… Jeszcze kilka takich drobiazgów by się znalazło :) Ale mi jak na razie wystarcza. Jeśli tylko naprawią te bugi, które im zgłosiłem, a które dotyczą zarządzaniem projektem (przede wszystkim), to natychmiast po wyjściu 4.0 Full wysupłam te parę groszy na niego :) IMO warto… :)

Znalazłem także Windziany edytor, który ma jedną wg mnie niesamowitą funkcję: jest zintegrowany z systemem zarządzania wersjami, dzięki czemu jest pełne undo, także po zamknięciu pliku, możliwość tworzenia gałęzi kodu, z możliwością łatwego powrotu do któregoś z poprzednich rozgałęzienia etc. Niby nic, niby można to zrobić ręcznie, instalując sobie na localhoście choćby Subversion, ale to nie to samo: trzeba pamiętać o ręcznych commitach, o wielu nieistotnych szczegółach, a tutaj jest wszystko ładnie zintegrowane, z drzewkiem historii i takie tam. Dla mnie bomba.

PS. Ten edytor to e – Collaborative Text Editor.


Jak skopiować jakiś tekst z jednego otwartego pliku do drugiego?

Dodaj w .vimrc:

if has("unix")
  nmap xr   :r $HOME/.vimxfer<CR>
  nmap xw   :'a,.w! $HOME/.vimxfer<CR>
  vmap xr   c<esc>:r $HOME/.vimxfer<CR>
  vmap xw   :w! $HOME/.vimxfer<CR>
else
  nmap xr   :r ~/.vimxfer<CR>
  nmap xw   :'a,.w! ~/.vimxfer<CR>
  vmap xr   c<esc>:r ~/.vimxfer<CR>
  vmap xw   :w! ~/.vimxfer<CR>
endif

Teraz, po zaznaczeniu tekstu, wciśnij ‘xw’ aby go zapisać, przejdź do pliku gdzie chcesz dany tekst wstawić, i wciśnij ‘xr’.

Teoretycznie, można używać po prostu kopiowania (yank) za pomocą komendy ‘y’, ale ma ona istotne ograniczenia:

  • pozwala na skopiowanie maksymalnie 50 linii
  • żeby działało, trzeba otworzyć plik z którego chcesz skopiować treść, zamknąć go, otworzyć drugi, wkleić (czy też operacje na buforachw jednym oknie etc. Metoda z ‘xr’ i ‘xw’ pozwala na przenoszenie treści pomiędzy zupełnie różnymi oknami (korzysta z zewnętrznego pliku).

Jak zmienić tekst/słowo/linię na pisane WIELKIMI literami lub na pisane małymi literami? Służy do tego komenda ‘U’ lub ‘u’.

Aby zmienić całą linię na pisaną wielkimi literami: gUU

Aby zmienić całą linię na pisaną małymi literami: guu

Aby zmienić słowo na pisane wielkimi literami: gUaw

Aby zmienić słowo na pisane małymi literami: guaw

Aby zmienić linię na pisaną duzymi literami poczynając od miejsca w którym stoi kursor: gU$

Etc…

Vim ułatwia też zamienianie wielkości liter z małych na duże i odwrotnie – służy do tego znak tyldy (~). Aby zmienić znak na którym stoi kursor, wystarczy wcisnąć tyldę. Aby zamienić wielkość liter na trzech najbliższych znakach, wciskamy: 3~. Reszta – j.w.

Wszystkie polecenie wykonujemy w trybie komend.


W wielu edytorach tekstu mamy możliwość zaznaczenia pewnej linii, i skoku do niej w dowolnym momencie. Vim także posiada taką możliwość.

Oznaczanie linii (mark) wykonuje się poprzez komendę (zaskakujące) ‘mark’ lub w skrócie ‘m’. W linii, której chcesz zaznaczyć, wyjdź do trybu poleceń (<Esc>:), wprowadź ‘mX’, gdzie X jest kolejną małą literą alfabetu (nazwą naszego oznaczenia). Teraz, zeby znaleźć się w oznaczonej linii, w trybie komend wciskamy ‘X (najpierw apostrof, a później nazwę oznaczenia do którego chcemy przejść. A jeśli chcemy się przenieść dodkładnie do miejsca naszego oznaczenia (oznaczona kolumna) wprowadzamy `X (gdzie ` jest znakiem nad tyldą “~”, a X – nazwą oznaczenia).


Używam w moim .vimrc opcji zawijania długich linii (ale nie łamania ich). Przechodzenie w tym trybie między poszczególnymi liniami jest traktowane dosłownie: jeśli zawinięta linia zajmuje na ekranie 5 linii, przejście do następnej jest traktowane jako przejście za najbliższy znak końca linii (czyli wizualnie 5 linii). Przechodzenie między liniami tak jak w programach Windowsowych (czyli po jednej ‘wizualnej’ linii) rozwiązuje się poprzez wciśnięcie kolejno: gj (linia niżej) lub gk (linia wyżej). Aby kazać tak zachowywac się kursorom, możemy do naszego .vimrc wstawić:

nnoremap <Down> gj
nnoremap <Up> gk
vnoremap <Down> gj
vnoremap <Up> gk
inoremap <Down> <C-o>gj
inoremap <Up> <C-o>gk

Od jakiegoś czasu, w sumie już ładnych kilka tygodni, próbowałem używać (t.j. używałem) Eclipse do tworzenia kodu PHP, jak i do ogólnego zarządzania projektem. Na początku było to dość przyjemne. Prosty dostęp do wszystkich plików projektu, praca na zakładkach, podpowiadanie kodu… Ale po kilku tygodniach, powiedziałem sobie: DOŚĆ. Nie będę się dłużej męczył…

Co mi przeszkadza? Po kolei:

podpowiadanie kodu
Jest do bani. Odwołuję się do obiektu $tpl->, a on popowiada mi metody i własności wszystkich obiektów w całym projekcie! Do dupy z takim podpowiadaniem kodu. Wole zajrzeć do definicji klasy i sprawdzić jak się dana metody/własność nazywała, o ile nie pamiętam. De facto wyszło tak, że w ogóle z tej opcji (tj. podpowiadania kodu) nie korzystałem.
zakładki
Fajnie, że pokazuje na górze (lub jeśli ktoś tak woli, to na dole) listę otwartych i edytowanych plików. Przy otwartych dwóch lub trzech jest super. Ale po otworzeniu kilkunastu plików, praca z nimi to sajgon. Na liście na górze pojawiają się tylko ostatnio edytowane, pozostałe są ukryte, ciężko mi się między nimi przełączać za pomocą klawiatury (skrót klawiszowy znam, gorzej że musiałbym pamiętać w jakiej kolejności je ostatnio edytowałem żeby to miało sens).
folding (zawijanie) kodu
Działa tylko dla funkcji, metod i klas. Nie działa dla normalnych bloków kodu, jak ciała warunków, pętli etc. Nie można też ręcznie zdefiniować zwinięcia, żeby ukryć ten fragment kodu który mnie w danej chwili nie interesuje. Nie można też zaznaczyć kilku zwiniętych funkcji, skopiować/wyciąć i wkleić gdzie indziej – kopiuje się tylko pokazywana na ekranie część, a o co zwinięte nie jest uwzględniane. Nie dość tego, bo to jak na razie mały pikuś: pracowałem dziś, i nagle z pliku znikło mi kilkanaście metod! Szukałem przez chwilę, w końcu się wystraszyłem że niechcący skasowałem je… Ale system cały czas działa. Co się okazało? Eclipse zapomniał je wyświetlić.. Dopiero jak wyszukałem wszystkie wystąpienia słowa function w pliku, to okazało się że te definicje są, tylko nie są wyświetlane. Dosłownie. Nawet liczba linii w pliku była pokazywana mniejsza, tak jakby tych definicji de facto tam nie było. Koszmar.
siermiężność
Java jak to java. Do demonów szybkości nie należy. Co tu więcej pisać…
trochę innych
tutaj wchodzi kiepska obsługa SVN, mała liczba zapamiętywanych poziomów undo (zwiększanie parametru w opcjach niewiele daje), problemy z zapamiętaniem przez Eclipse że chcę używać 2 spacji jako wcięć (namiętnie używa znaków tabulacji, o długości 4 lub 8 znaków, zależy od jego nastroju) etc. W sumie: środowisko jest do dupy.

Żeby nie było nieporozumień: używam (-łem) Eclipse w najnowszej wersji, z najnowszą wersją PHP Eclipse, z najnowszą wersją Javy, wszystko ściągnięte ze stron twórców – bynajmniej nie są to własne spieprzone kompilaty, czy też jakieś niedopracowania developerów mojego distro. Po prostu, to środowisko może się nadaje do Javy, ale do PHP niezbyt.

Nie da się ukryć, że jak na razie najlepszym dla mnie edytorem jest Vim, szczególnie od momentu wprowadzenia możliwości pracy z zakładkami/kartami. Brakuje mi w nim tylko brak osługi projektów. Ale może jest do niego jakiś plugin, który by to zgrabnie umożliwiał. Będę musiał poszukać. I go przeprosić…


Jak piszę nieco więcej kodu, lub przy refaktoryzacji/reformatowaniu tegoż, dość często szukam początku lub końca jakiegoś bloku. Najprościej jest wcisnąć kombinację klawiszy:

[{
żeby przenieść się na początek bloku
]}
na koniec bloku
[(
na początek nawiasu wewnątrz którego się znajdujemy
])
na jego koniec

Wklepywanie za każdym razem tych samych słów/tagów/poleceń jest męczące. Nawet dla tak zahartowanego ‘klepacza’ jak ja. Na szczęście, Vim potrafi pomóc w takich momentach.

Gdy chcesz wpisać jakieś słowo, które już występuje w tekście, zacznij je wpisywać, a nastęnie wciśnij <Ctrl+p> lub <Ctrl+n>. Pierwsza kombinacja wyszukuje wstecz, natomiast druga – do przodu, dany dokument, pod kątem występowania danego słowa. Następne wciśnięcia danego skrótu klawiaturowego spowoduje wyświetlenie kolejnego dopasowanego słowa. Np w tym tekście, powtarzają się dość często słowa ‘wpisać’, ‘wpisywać’ etc. Mogę sobie pomagać wklepując je, wpisując ‘wpi<Ctrl+p>’. W tym momencie Vim podpowiada mi wersje: ‘wpisać’, ‘wpisać’, ‘wpisywać’, i mogę sobie wstawić dowolną z nich (w wersji 7 wyświetla się okienko z listą dopasowanych słów, we wcześniejszych kolejno były dopasowywane słowa w danym miejscu).

Więcej na ten temat: :he complete


Strona 1 z 2