Od jakiegoś czasu wymyślam sobie różne udoskonalenia dla Vima, i piszę je zazwyczaj w Pythonie :) Niedawno opisywałem jak wyświetlić listę funkcji z edytowanego pliku, później zrobiłem sobie wygodne komentowanie kodu (wersje które znalazłem na sieci nie satysfakcjonowały mnie), teraz przyszedł czas na sprytne (w sensie: wygodne) uruchamianie właśnie edytowanego skryptu/programu :)

Do niedawna używałem prostego Pythonowego skryptu, który wywoływem z Vima:

!$ %

Wykrzyknik to polecenie wywołania programu z shella, $ to nazwa skryptu, a % jest rozwijany przez Vima do pełnej ścieżki bieżącego pliku. Było to o tyle wygodne, że nieważne w jakim języku pisałny był skrypt/program, $ uruchamiał odpowiedni interpreter, ze skonfigurowanymi parametrami i wyświetlał wyjście. Tą funkcjonalność oczywiście potrzebowałem zachować, ale wykonywanie zewnętrznego programu jest strasznie niewygodne ;) Więc zrobiłem sobie wygodniejszą, i nieco bardziej rozbudowaną wersję. Inne założenia to możliwość przekazywania parametrów do wykonywanego programu, oraz dla niektórych języków możliwość wcześniejszej, automatycznej kompilacji.

Przejdź do reszty tego wpisu »


Stwierdziłem niedawno, że brakuje mi w Vimie takiego drobiazgu jak wyświetlanie listy funkcji z edytowanego właśnie pliku. Można z jednej strony wykorzystać ctags, ale (pewien nie jestem, nie jestem znawcą tagsów ani ich obsługi w Vimie) po dodaniu funkcji/metody/czegokolwiek innego co można by nazwać tagiem trzeba by od nowa generować listę tagów. Nie jest to problemem takim bardzo dużym, do momentu gdy ciągle pracuje się nad różnymi projektami, z czego sporej części nie mam na dysku (tylko wykorzystując plugin netrw pracuję via ftp). W tym momencie moja znajomość systemu ctags podpowiada mi że robi się ciężko…

Postanowiłem więc napisać sobie prosty skrypt do tego, a że język wewnętrzny Vima mnie nieco odrzuca, postawiłem na Pythona ;) Żeby jakikolwiek skrypt pythona (jak ktoś lubi, można użyć też np perla) mógł zadziałać w Vimie, ten ostatni musi być skompilowany z jego obsługą. W Ubuntu wystarczy zainstalować pakiet vim-full. Łatwo sprawdzić czy Vim ma wkompilowaną obsługę pythona:

Przejdź do reszty tego wpisu »


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

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