Vim je bezesporu super editor. Bohuzel pro
programování uz to zas tak super neni.
Radeji pouzivam JEdit, nebo ted se zacinam
divat co umi Eclipse. JEdit ma nekolik vlastnosti
z VIMu, a i neco navic - dokáže udržovat stromovou
strukturu dokumentu(dobre u Texu). Eclipse ma přímo vim plugin.
Zatim jsem ho nezkousel.
Pri praci v ssh - příkazové řádce je pro me bezesporu Vim ta nejlepsi alternativa.
Souhlasim s tim, ze JEdit je velmi dobry editor, pro me je to vsak ponekud tezkotonazni nastroj :-) a ne
vsude je dostupny. Celkem casto pres den presedam na ruzne pocitace (vetsinou na dalku), kde jsou ruzne Unixy, Linux i Windows NT/9x/2000 XP a ne na vsech mam moznost instalace JVM apod.
Nicmene kdyz pisu v TeXu, tak si logicke casti oddeluji pomoci fold-markeru (mam tam defaultne tri slozene zavorky, ktere jednoduse dam do poznamky):
\section{Nejaka cast}%{{{ toto budu videt pri slozeni
text tex
\subsection{Podsekce}%{{{ zase si ji slozim
text text
%}}} konec podsekce
%}}} konec cele sekce
Důvody proc VIM vim:)). Vzdálená správa 100%.
U toho TeXu myslím zvláštní okno, kde je graficky
znázorněn strom Kapitola/sekce/podsekce...
je to specialni pugin pro jedit uz presne nevim
jak se jmenuje. Diplomku o velikosti cca 2000 řádků
bych ve Vimu taky napsal, ale v JEdit to bylo mnohem
pohodlnejsi. Ideal by byl JEdit s možností zapnout
chování jako vim:))) To by mohl splnovat
plugin v Eclipse.
Aha, tak tohle vim primo neumi, to je pravda. Vsechny tyhle vychytavky jsou docela navykovou zalezitosti, takze si to v JEditu vyzkousim a potom mi to bude ve vimu chybet ;-)
Z pluginu vimu jsem zkousel pouze plugin do Visual Studia a bylo to nic moc - vim se spoustel pouze pro psani kodu, ale uz to neumelo zvyraznovani chyb po kompilaci, ladeni bylo pouze ve VS okne atd.
Eclipse neznam, treba to v nem bude vic provazane.
Nevíte jestli to má taky WYSYWIG režim, případně jestli to hlídá a doplňuje syntaxi jazyka? Mám na mysli, když napíšu třeba <a tak mi to nabídne href, ..., nebo když vložím obrázek, tak mi to doplní jeho velikost do elementu img. Tak nějak jsem pochopil, že spousty se toho dá udělat a že to není myšoidní, ale jsou někde k dispozici nějaké prověřené konfiguráky, něco jako lisp soubory v Emacsu?
kdyz zmacknes F8 tak ti to nabidne link na lokalni soubor nebo muzes napsat treba www.cosi.cz a ono to doplni co ma. Velikost obrazku to umi taky ale musis mit nainstalovany tusim ImageMagick. Tady to je (kdysi jsem to kdesi obslehl a mirne upravil):
map <F8> :call VlozOdkaz()<CR>
imap <F8> <Esc>:call VlozOdkaz()<CR>
function! VlozOdkaz()
let ConfPrompt="Link nebo obrazek?"
let ConfChoices="&Link\n&Obrazek"
let ConfChoices=ConfChoices."\n&ZRUSIT"
let choice = confirm(ConfPrompt, ConfChoices, 2)
if choice == 1
:call HTML_insertHref()
elseif choice == 2
:call HTML_loadImg()
elseif choice == 3
return
endif
endfunction
function HTML_loadImg()
if(a:0>0)
let path=a:1
else
if(has("browse"))
let path=browse('', 'Vyber obrazek pro <img>', '.', '')
else
echo "Vas VIM nepodporuje prikaz :browse, cestu k obrazku zadejte rucne"
return
endif
endif
let data=system('identify ' . path)
let old_x=@x
let @x=substitute(data, '\([^ ]*\) [^ ]* \([0-9]*\)x\([0-9]*\).*', '<img src="\1" width="\2" height="\3" alt="">', '')
if(data==@x)
echo "VIM: Chyba extrakce rozmeru obrazku!\n" . @x
return
endif
normal "xph
let@x=old_x
startinsert
endfunction
function HTML_insertHref()
if(a:0>0)
let path=a:1
else
if(has("browse"))
let path=browse('', 'Get file for <a href="">', '.', '')
else
echo "Your VIM not supported cmd :browse, insert file path manualy."
return
endif
endif
if(path[0]=='/')
let path=Absolute2Relative(path)
endif
let old_x=@x
let @x='<a href="'.path.'">'.path.'</a>'
normal "xp4hT>vt
Jo tak tohle hodne vypada jako moje dilo. Udrzuji takovou pokrocilejsi konfiguraci pro lidi, co se s tim nechteji konfigurovat VIMConfig na http://iglu.cz/wraith/odkaz.html?/s_vim/vimconfig-2_download.html
Co se tyce insertu odkazu a obrazku, tak to mam i jako samostatny kod http://iglu.cz/wraith/odkaz.html?/s_vim/rozsireni-html-insert.html
a taktez bych upozornil na makra pro odsazovani textu, je to hned v dalsi polozka v menu. Krome toho ze to mam na strankach, tak je to take k nalezeni na vim.org ve skriptech.
Clanek je vyborny, gratuluji.
Jinak ja jsem taky zacinal vytvaret konfiguraci pomoci pluginu, ale postupem casu jsem mel spoustu konfiguracnich souboru, ktere nebylo snadne prenaset z mista na misto. Celkem casto totiz v praci prechazim na pocitace uzivatelu a jedine co potrebuji mit stejne, je prikazova radka a "ten muj" vim.
Tak jsem to nakonec flakl do jednoho .vimrc souboru (resp. _vimrc na MS Windows), ktery tak ma kolem 40kB a ten soubor si nosim na diskete a take ho mam na netu.
V jednom konfiguracnim souboru se muzou konfigurace pro ruzne typy souboru psat napriklad takto:
augroup __C__
au!
au BufRead,BufNewFile *.cpp,*.c,*.h highlight Statement guifg=white guibg=#0000aa
au BufRead,BufNewFile *.cpp,*.c,*.h syn keyword cConstant nil
au BufRead,BufNewFile *.cpp,*.c,*.h set tabstop=4 nowrap
au BufRead,BufNewFile *.cpp,*.c,*.h set formatoptions=croq nocindent comments&
au BufRead,BufNewFile *.cpp,*.c,*.h set cindent comments=sr:/*,mb:*,el:*/,://
au BufRead,BufNewFile *.cpp,*.c,*.h set foldmethod=syntax foldclose=all foldnestmax=1
au BufRead,BufNewFile *.cpp,*.c,*.h syn region myFold start="{" end="}" transparent fold
au BufRead,BufNewFile *.cpp,*.c,*.h hi cConstant guifg=#ffa0a0
au BufRead,BufNewFile *.cpp,*.c,*.h imap \fo for () {<CR><CR>}<ESC>kk5li
au BufRead,BufNewFile *.cpp,*.c,*.h imap \if if () {<CR><CR>}<ESC>kk4li
au BufRead,BufNewFile *.cpp,*.c,*.h imap \sw switch () {<CR>case a:<CR>break;<CR>case au BufRead,BufNewFile *.cpp,*.c,*.h imap \in #include
augroup END
Ja mam podobne makro pro tabulky jako bylo vyse uvedeno. Ale jsou problemy, pokud je nastaveno automaticke formatovani. Proste odsazeni pak nedela uplne dobrotu. Mozna by vyresilo napred (1) "spravne" nastavit autoindent, cindent, ... , pak (2) automaticky napsat kod a (3) vratit nastaveni odsazovani.
To je ale za domaci ukol :-)
ja to resim funkci... treba pro php soubory...
fun! LoadPHP()
imap <? <?php?><C-O>F?<CR><CR><ESC>ki
imap /** /**<CR> * <CR>* <CR><BS>**/<ESC>kka
atd...
endfun
" pro TeX
fun! LoadTeX()
set wrap
map 1\ gg:%s/^[0-9]*\. \(.*\)$/\\item{\1}/g<CR>
map >} ^i{<ESC>$a}<ESC>^
map >s <<>}i\subsection<ESC>
... atd
endfun
a potom
au BufReadPre *.tex call LoadTEX()
au BufNewFile *.tex call LoadTEX()
au BufReadPre *.php call LoadPHP()
au BufNewFile *.php call LoadPHP()