A fakt v tom někdo píšete složitější html stránky? Nic proti VIMu, ale tohle se mi zdá trochu silná káva. :-)
:-))
pisu jen ve vimu a k podobnym makrum jsem dospel uz pred dlouhou dobou. Zakladni vec kterou fakt musis mit je closetag makro, jinak se fakt html neda psat :-)
co se vam na tom nezda? proc by se v tom nedaly psat slozitejsi html stranky? rad bych videl nejaky editor ve kterem to jde snaze a rychleji
No jasne, v emacsu a PSGML modu:-) Umi treba kontextove vkladani znacek (podle DTD), validaci a potom "skakani" primo na chyby a spoustu jinych veci:-)
Ja pisu www stranky pouze ve vimu. Ta jednoduchost pri tvorbe vlastniho mapovani je genialni. Z toho clanku to vypada mozna slozite ale staci si stahnout z netu par souboru jak to delaji jini a snadno to pochopis.
Mimochodem clanek byl super, vice takovych!
Jiste, vsechno, vcetne zdrojaku, HTML a TeXu pisu ve vimu. Silna kava to neni, naopak me stvou omezeni, ktera maji jine textove editory a procesory. Pouze si to chce chvili zvykat, ze zacatku to moc nejde :-(
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.
Mimochodem, vyse uvedeny kod je nekompletni a nebude tedy fungovat. Kdo to chce, muze si to stahnout ode mne.
omlouvam se za zverejneni Vaseho dila. Me to ale funguje i takto nekompletni :-))
Zverejneni mi nevadi, i kdyz bych odkaz na zdroj uvital :-).
Fungovat to nemuze, protoze se z toho vola jeste jedna moje funkce, ktera slouzi k prekladu absolutnich cest na relativni a tu jste nekde zasantrocil :-).
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 :-)
Tohle pouzivam uz delsi dobu, ale jsou s tim problemy kdyz ma clovek otevreno vice souboru RUZNEHO typu a v nich ma nastavene stejne imap prikazy.
Napr v C:
imap ,c /* */<Esc>3hi
a v HTML:
imap ,c <!-- --><Esc>3hi
(nevim, jak to ted vezme
BTW, mapování z ft pluginů by mělo být automaticky lokální k bufferu, či ne?
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()
Omlouvám se za off-topic, nicméně neuměl by někdo poradit, jestli je vim schopen z regulárního výrazu vygenerovat všechny řetězce, které mu vyhovují?
např.: [aA][bB] -> ab,Ab,aB,AB
Díky
Treba a* -> ,a,aa,aaa,aaaa,aaaaa,aaaaaa,aaaaaaa,aaaaaaaa,aaaaaaaaa
:)
a proč vlastně ne? To, že by výpis byl nekonečný ještě neznamená, že někdo takový soft napsal.
Já osobně bych se bez hvězdičky obešel, defacto i bez tečky.
Nevíte tedy někdo?