Pokazywanie postów oznaczonych etykietą vim. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą vim. Pokaż wszystkie posty

piątek, 7 czerwca 2013

VIM - poprawne formatowanie kodu html w plikach PHP

Podczas edycji kodu php te części, które pisze się w czystym html nie są poprawnie formatowane w vim'ie.
Jest na to rada, a właściwie łata:
:set ft=html
i już poprawnie formatuje się html (ale niepoprawnie php)
więc można powrócić:
:set ft=php

czwartek, 10 marca 2011

Vim - kompletny plik _vimrc, lub _gvimrc

Okazało się, że publikacja kilku wpisów wywołała żywe zainteresowanie Vim'em jako hiper-szybkim edytorem tekstu. Zdaję sobie sprawę, że na początku ciężko jest przebrnąć przez ogrom możliwości konfiguracyjnych. Zamieszczam więc tutaj jedną z wersji naszego pliku _gvimrc jako przykład:
set nocompatible
source $VIMRUNTIME/vimrc_example.vim

"Nie chcę aby gvim był podobny do windowsów
"source $VIMRUNTIME/mswin.vim
"behave mswin

"nie zawijaj wierszy
set nowrap

"wcięcia
set tabstop=4
set shiftwidth=4

"poprawne odkodowywanie plików wraz zautomatycznym ich rozpoznawaniem
set fileencodings=utf-8,latin2
set enc=utf-8

"chcę zachować pliki przed zmianą, tyle że w tym katalogu
set backupdir=d:/Archiwum/vim_backups

"schemat kolorów
"colorscheme desert
colorscheme murphy

"wielkość okna
set columns=120
set lines=60
winp 0 0

"ignorowanie wielkości liter podczas wyszukiwania
set ignorecase

"ukrywanie wskaźnika myszy gdy się pisze
set mousehide
set linebreak

"autocomplete po naciśnięciu Ctrl-P lub Ctrl-N
set completeopt=longest,menuone
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
inoremap <expr> <C-n> pumvisible() ? '<C-n>' :
  \ '<C-n><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>'
inoremap <expr> <M-,> pumvisible() ? '<C-n>' :
  \ '<C-x><C-o><C-n><C-p><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>'

"Włączam pokazanie numerów wierszy
set number
set numberwidth=4 "ale nie więcej niż 9999

"na dole i na górze zostawiam 5 linijek żeby coś widzieć
set scrolloff=5

"set cursorcolumn " highlight the current column
set cursorline " highlight current line
set incsearch " BUT do highlight as you type you search phrase

"Obsługa foldingu czyli zwijania i rozwijania wierszy
set foldmethod=manual
let Tlist_Auto_Open=0 " let the tag list open automagically
let Tlist_Compact_Format = 1 " show small menu
let Tlist_Ctags_Cmd = 'ctags' " location of ctags
let Tlist_Enable_Fold_Column = 0 " do show folding tree
let Tlist_Exist_OnlyWindow = 1 " if you are the last, kill yourself
let Tlist_File_Fold_Auto_Close = 0 " fold closed other trees
let Tlist_Sort_Type = "name" " order by
let Tlist_Use_Right_Window = 1 " split to the right side of the screen
let Tlist_WinWidth = 40 " 40 cols wide, so i can (almost always) read my functions

"Ideą, która przyświecała mi przy tworzeniu rozwinięć były dwie literki i "#".
"Wszystko po to aby się nie myliło z normalnym pisaniem. Ten # całkowicie to
"separuje.
ab <ph# <?php echo; ?><left><left><left><left>
ab fo# for($i=0; $i<10; ++$i) {
}<up>A
ab if# if() {
}<Esc><up><End>3<Left>
"W poniższym rozwinięciu ciekawostka jest spacja na końcu wyrażenia.
"Denerewującą cechą rozwinięć jest to, że na końcu każdego wstawiają ten biały znak,
"który je rozwija (np. CR albo spacja). Dzięki temu, że na końcu jest spacja
"poszukiwanie w linii (f) szuka właśnie spacji i dostawia na końcu biały znak
"znajdując się dokładnie na nazwie funkcji.
ab fu# function nazwa_funkcji() {
}<Esc><Up><Home>f
ab $th# $this-><Esc>F-

"Rozwinięcia dla html
ab <ht# <html>
<head>
<title></title>
</head>
<body>

</body>
</html><Esc>3<up>
ab <di# <div class=""></div><Esc><Home>f>
ab <p# <p></p><Esc><Home>f>
ab <fo# <form>
</form><Esc>kFm
ab <ta# <table>
<tr>
<td></td>
</tr>
</table><Esc>2<Up><Home>f>
ab <ul# <ul>
<li></li>
</ul><Esc><Up><Home>f>
ab <li# <li></li><Esc><Home>f>
ab <h1# <h1></h1><Esc><Home>f>
ab <h2# <h2></h2><Esc><Home>f>
ab <h3# <h3></h3><Esc><Home>f>
ab <in# <input id="" name="" type="text" class="" /><Esc>F<3f"
ab <a# <a href="" title=""></a><Esc>4F"
ab cl# class=""<Esc>2F"

"wstawianie nawiasików
map \( <Esc>a('')<Esc><Left>i
map \[ <Esc>a['']<Esc><Left>i
map \{ <Esc>a{
}<Esc><Up>A


"otaczanie
map \h1 <Esc>bi<h1><Esc>ea</h1><Esc>F<
map \h2 <Esc>bi<h2><Esc>ea</h2><Esc>F<
map \h3 <Esc>bi<h3><Esc>ea</h3><Esc>F<
map \sp <Esc>bi<span><Esc>ea</span><Esc>F<
map \a <Esc>bi<a href="" title=""><Esc>ea</a><Esc>3F"

"zakomentowanie linii znaczkiem # (dla Ruby)
map <C-K> mkI#<Esc>`k

"zakomentowanie linii znaczkiem //
map <C-L> mkI//<Esc>`k

"usunięcie wyrazu, na którym stoi kursor
map <C-D> bdw
W następnych wpisach wyjaśnię co ciekawsze fragmenty.

Vim autocomplete czyli autouzupełnianie tekstu podobne do środowisk IDE

W Vim'ie, co może wielu zdziwić, też da się autouzupełniać kod. Jest to doskonała funkcja zapobiegająca powstawaniu trudnych do znalezienia błędów w kodzie.

Ten kod poniżej należy wstawić do pliku _vimrc albo _gvimrc
"autocomplete po naciśnięciu Ctrl-P lub Ctrl-N
set completeopt=longest,menuone
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
inoremap <expr> <C-n> pumvisible() ? '<C-n>' :
  \ '<C-n><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>'
inoremap <expr> <M-,> pumvisible() ? '<C-n>' :
  \ '<C-x><C-o><C-n><C-p><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>'
Gwoli wyjaśnienia dodam, że Ctrl-P przeszukuje Poprzednio napisany kod, a Ctrl-N Następnie (dalej) napisany kod. Oczywiście wciska się to w normalnym trybie edycji.

poniedziałek, 7 marca 2011

Vim - katalog TEMP oraz litery w UTF-8

Vim posiada arcyprzydatną opcję generowania przy każdej zmianie pliku z jego poprzednią wersją. Jest to o tyle przydatne, co denerwujące na dłuższą metę. Przy edycji dużej ilości plików powstaje ich nadmierna ilość, co w końcu może denerwować.
Wystarczy jednak ustawić zmienną systemową, aby pliki backupowe były automatycznie przerzucane do wybranego katalogu. Dane konfiguracyjne znajdują się w pliku konfiguracyjnym (jak to tajemniczo brzmi).
Dla Windows ten plik to
C:\Program Files\Vim\_vimrc 
zaś dla Linuxa wystarczy
~/.vimrc
Należy tam wpisać:
:set backupdir=c:/Windows/temp
Oczywiście ścieżka jest dowolna.

Osobnym problemem to kodowanie polskich liter. Polecanym jest UTF-8, ale w Windows oczywiście tak nie jest :-(
Wrzucamy więc do pliku konfiguracyjnego:
:set fileencodings=utf-8,latin2
i po kłopocie.

Nieco szerzej jest to opisane tutaj: http://automaciej.jogger.pl/2006/07/18/vim-utf-8-i-iso-8859-2/

czwartek, 3 marca 2011

Vim - opis klawiszy

Pomocny link:

http://www.linux.ie/articles/tutorials/vim-3.0.refcard.html

Vim - tabulacje i wcięcia - konfiguracja

Żeby poprawnie ustawić tabulacje i wcięcia w Vim'ie należy w pliku (dla Windows):
C:\Program Files\Vim\_vimrc

wstawić linie:
set tabstop=4
set shiftwidth=4

oczywiście jeśli chcemy ustawić wcięcia na 4 :-)

dodatkowo można wyłączyć zawijanie wierszy:
set nowrap

czwartek, 24 lutego 2011

Warte zapamiętania komendy edytora Vim

Podobno informatycy dzielą się na tych co używają Emacs'a, na tych co używają Vim'a, oraz na tych, którzy jeszcze nie poznali dobrego edytora tekstów, przez co używają kompletnie nieprzydatnych "rozwiązań" buraków z Richmond. Ten, kto nie wie o czym mowa niech nie czyta dalej. To nie dla niego.

Osobiście preferuję Vim'a. Prędkość edycji tekstu w tym edytorze oszałamia. Jest kilka komend, które znacząco przyspieszają pracę. Wybrałem najczęściej używane przeze mnie.

Rejestry
"ay zapis (yank) zaznaczonego tekstu do rejestru a (zamiast "a" można użyć dowolnej litery)
"Ay dopisanie do rejestru a zaznaczonego tekstu. Doładowanie go.
"ap wstawienie tekstu na miejsce kursora z rejestru a (zamiast "a" można użyć dowolnej litery)
"* register (rejestr) zawierający clipboard
"*y zapis zaznaczonego tekstu do clipboardu
"*p wklejenie z clipboardu w miejsce kursora

Makra
qa start rejestracji makra w rejestrze a (zamiast "a" można użyć dowolnej litery)
q stop rejestracji makra (oczywiście nie w modzie edycji tylko w modzie komend)
@a uruchomienie makra z rejestru a (zamiast "a" można użyć dowolnej litery)

Marki - rzecz zawodowa
`` dwa apostrofki (pod tyldą) powrót do ostatniego postoju kursora
ma markuje miejsce kursora znacznikiem "a" (zamiast "a" może być dowolna litera)
`a skok z miejsca aktualnego kursora da zamarkowanego wcześniej miejsca "a"
`[ początek ostatnio edytowanego tekstu
`] koniec ostatnio edytowanego tekstu
:marks pokazuje wszystkie zamarkowane miejsca

% jeśli się stoi na nawiasach to skacze z początku na koniec i odwrotnie
* zaznacza słowo, na którym się stoi i wrzuca to do szukania (cudowne)

fajne są komendy z literką "z" do poruszania ekranu:
z linia z kursorem znajdzie się na górze
z. na środku
z- na dole
analogicznie działają:
zt top
zz środek
zb bottom

:nohlsearch jeśli Cię wkurzaja podświetlenia ostatniego wyszukiwania (następne wyszukiwanie elegancko powraca do podświetlania)

Gdy się jest w modzie Visual (literka "v") to literki "o" i "O" skaczą na początek i na koniec zaznaczenia. Łatwo dzięki temu poszerzać zaznaczenie.

Zmiana wielkości liter:
~ (tylda) zamienia małe na duże i odwrotnie
U na duże (tylko w zaznaczeniu)
u na małe (tylko w zaznaczeniu)
gu na małe np. guw zmieni na małe całe słowo
gU na duże np. gUw zmieni na DUŻE całe słowo
guu na małe całą linię
gUU na duże całą linię

> wcinka dla całego bloku tekstu (tylko w Block Visual "Ctrl-V")
< likwidacja wcinki dla całego bloku tekstu (tylko w Block Visual "Ctrl-V") 


Zmiana tekstu w całym pliku:
%s/stary_tekst/nowy_tekst/g 

Obsługa nie po polsku brzmiących foldów czyli składania i rozkładania kodu, żeby nie przeszkadzał w poruszaniu się po tekście 
zf utworzenie folda z zaznaczonego tekstu 
zj skok do następnego folda (jak ruch kursorem) 
zk skok do poprzedniego folda (jak ruch kursorem) 
zo otwiera (open) fold pod kursorem 
zO otwiera wszystkie zaznaczone foldy 
zc zamyka (close) fold 
zd kasuje fold pod kursorem 
:mkview zapisanie swoich foldów dotyczących tego pliku 
:loadview odtworzenie zapisanych foldów 

Arcyirytujące było dla mnie to, że kiedy wchodziłem w tryb edytora Ex (dla niewtajemniczonych dodam, że jest to mod po naciśnięciu ":" dwukropka) to nie mogłem użyć zawartości bufora czyli wkleić tego co tam sobie siedziało. 
Oczywiście jest to możliwe: 
Ctrl-R-" wklejenie z domyślnego bufora 
Ctrl-R-a wklejenie z bufora o nazwie a do linijki Ex 
Kontynuując ten wątek to wszystkie problemy rozwiązuje wejście w tryb Command-line: 
Ctrl-F - z trybu Command czyli juz po naciśnięciu: 
q: - z trybu Normal (szczegóły na :help q:) 
:tabnew nazwa_pliku otwarcie pliku w nowej zakładce 
:tabn następna zakładka 
:tabp poprzednia zakładka 

Reformatowanie kodu: 
V zaznaczenie tekstu do reformatowania 
= reformatowanie (znaczek "równa się" :)

Zaznaczanie blokowe:

Super sprawa. Wciskam Ctrl-V i zaznaczam prostokątny fragment tekstu. Teraz można już z tym zrobić wszystko tak, jak w trybie Visual.
Ale najfajniejsze jest wcisnąć Shift-i, wpisać coś i nacisnąć Esc. Wpisany tekst pokazuje się w każdej zaznaczonej linijce.

Lekki opis dla ludzi już coś wiedzących znajduje się na http://pl.wikibooks.org/wiki/Vim/Więcej_niż_edytor