Parhaat palat vim-konffeistani
Yksi kirjoitettu sääntö on, että jokaisen blogin tulee jossain vaiheessa esitellä ylläpitäjänsä konffifileet tarkkaan läpi. Jotain taianomaista siinä kai on. Esittelenpä siis minäkin. Tässä 379-rivisessä paukussa on kaikenlaista kivaa. Kertymä on aloitettu vuonna 2007, vaikka en voi varmaksi todeta, onko itse tiedosto sieltä asti säilynyt.
Pathogen
Viime vuosien oleellisin Vim-skripti, joka kaikkien tulisi ottaa
pikimmiten käyttöön, on tpopen kirjoittama Pathogen. Lopetat
kertaheitolla kolmansien osapuolien skriptien kanssa häsläämisen,
kun voit vain git-kloonata repon ~/.vim/bundle
-hakemistoon ja
homma on sillä selvä. Tämä riittää silloin konffiin:
filetype off call pathogen#runtime_append_all_bundles() call pathogen#helptags() filetype plugin indent on
Pehmeät tabit: ainoa oikea valinta
Kovista tabeista luopuminen aikoinaan oli kova paikka (paljon työtä ja turhannäköisiä committeja), mutta on ollut yksi parhaista ratkaisuistani ikinä. Kunnollisten säätöjen tekemisen puute on luultavasti isoin syy siihen, mikseivät ihmiset ole enemmänkin siirtyneet Oikealle Tielle.
" Softwidth ja tabstop molemmat sopivan pieniksi set tabstop:4 set sw:4 " Tabit välilyöntilöiksi! set expandtab set softtabstop:4 set shiftround
Näillä säädöillä tabi tekee 4 väliä ja sen voi kumittaa backspacella aivan kuten kovan tabinkin. Ja nyt voi koodata joitain WS-sensitiivisiä kieliä aivan uudella tavalla.
Tekstit
Oikoluku ja tekstin sopiva katkominen kuuluu proosan kirjailuun oleellisesti.
set spellfile="/home/progo/.vim/myspellfile" " vimin dokumenteista: " tämä aiheuttaa rivien katkomisen set textwidth:0 " Laitetaan tämä jotta vim mahduttaa tekstin annetun raamin sisään, " toisin sanoen esteettinen ja käytännöllinen set linebreak " http://www.bioinspired.com/users/ajg112/computing/vim.shtml : " Do not automatically insert a comment leader after an enter set fo-=r
Vimin linebreak
on perushuttua kaikille. Tämä on siis sitä
visuaalista rivienkatkomista, joka ei koske tiedostoihin. Sen
sijaan textwidth
-asetuksen asettaminen asettaa vimin katkomaan
rivejä. Nollattuna toiminto on luonnollisesti kytketty pois
päältä. Tekstiä kirjoitellessa sitten nopeasti heitetty set
tw=78
antaa tekstin soljua mukavasti eteenpäin.
Haku
Tehokkaan tekstinkäsittelyn oleellinen elementti on päästä paikasta toiseen.
" http://www.stripey.com/vim/vimrc.html " make searches case-insensitive, unless they contain upper-case letters: set ignorecase set smartcase " very magic searches, easily disabled if needed nnoremap / /\v nnoremap ? ?\v
Ignorecase tietenkin jättää kirjainkoon huomioitta. Smartcase on kehittyneempi versio: kirjainkoko jätetään huomioitta vain jos koko hakuteksti on pienillä kirjaimilla.
Sen jälkeen on kaksi erittäin oleellista mappausta, jotka
paransivat vim-hakujen mukavuutta suunnattomasti. Vimin
säännölliset lausekkeet ovat nimittäin sekalainen joukko, jotka
jakautuvat peräti neljään eri luokkaan. (:help pattern
) Kullakin
luokalla on omat vaikutussäännöt ja se tuottaa suunnattomia
vaikeuksia saada erikoismerkkejä sisältävät hakusanat hakemaan
oikeata asiaa. Luokista "tiukin" on nimeltään "very magic", joka
tulkitsee kaikki erikoismerkit regex-symboleiksi. Mutta koska
kaikki tulkitaan näin, ei tarvitse minun muistaa erikseen, mikä
erikoismerkki piti milloinkin eskapettaa: nyt kaikki.
Verymagic-asetus on siitä kehno, että sitä ei voi asettaa
globaalisti aktiiviseksi. Yksittäisessä patternissa esiintyvä \v
kuitenkin aktivoi sen, joten näillä mappauksilla asetan sen
tavallaan oletukseksi.
Vim-haut tapaavat oletuksena jättää rumaa merkintää ympäriinsä ja se voi joissain tapauksissa jopa vähentää hakemista. Tähän on kahdenlaista ratkaisua:
" tyhjentää search hilightin nnoremap <C-l> :nohl<CR><C-l> " vielä parempi: ei highlightia " set nohlsearch
Nyt C-l
hävittää väritykset, kunnes haetaan uudestaan jossain
vaiheessa. Vaihtoehtoisesti väritykset voi ottaa kokonaan pois,
mutta joissain koodijutuissa olen havainnut mukavaksi jättää
hakuja näkyville.
Bufferit
Vim hallitsee useita avonaisia puskureita, mutta jostain syystä ne pitäisi oletusasetuksilla tallennella aina ennen vaihtoa. Sotii nopeatempoista pyörittelyä vastaan. Nämä asetukset tekevät hyvää:
" Hidden: älä vaadi puskurien tallentamista set hidden map <C-j> :bprev<CR> map <C-k> :bnext<CR> " sulje bufferi ilman ikkunan sulkemista command! BW :bn|:bd#
C-j
ja C-k
kelaavat nopeasti puskurit lävitse, ja se on
mahtavaa. Erityisesti kun vimiä kuitenkin käytetään pitkälti
siten, että kutakin avonaista projektia varten avataan oma vim.
Ainakin minä siis.
Useita ikkunoita käyttävänä haluan joskus sulkea turhat puskurit
pois häiritsemästä, ja sitä varten on toki valmis :bd
, eli buf
delete. Se mokoma sulkee kuitenkin aina avonaisen ikkunankin,
vaikkei tarvitsisi. Tällä kikalla kirjoitettu uusi komento :BW
jättää ikkunan rauhaan.
Statusbar
Jotkut vim-oletuskonffit voivat jättää statusbarin piirtämättä tietyissä konteksteissa. Suosin mieluummin sen pitämistä auki kaikissa tilanteissa:
" statusbar näkymään " ja muotoilu: defaultti rivi on tyhjä ja se esittää tiedoston nimen, rivin ja prosentit yms set laststatus:2 " syntaksi: help 'statusline' " %F: tiedosto " "%=": align right " http://www.winterdom.com/weblog/CommentView,guid,3372fa1e-966e-4389-b2ba-bb2ce527f52a.aspx set statusline:%<%F%m%h%r%w\ (%{&ff})\ %=%l,%v\ of\ %L,\ %p%%
Lisäksi on kiva nähdä, mitä komentoa on vimille antamassa:
" Näytä kirjoitettava komento set showcmd
Tavallaan statusbaariin liittyvää on myös ikkunan otsikko:
set title set titlestring=vim:\ %F
Värit ja teemat
Nämä ovat tietysti makuasioita pitkälti, mutta mutta… Taustat ovat terminaalissa aina tummia.
" väritys oikein set background:dark " URXVT: railscast lucius zenburn desert256 jellybeans colorscheme jellybeans " Mutta jos ei värejä, vaihdetaan vähävärisemmälle: if &t_Co <= 16 colorscheme default endif
Urxvt:ssä jellybeans vie voiton hillityllä tyylillä.
Foldaus
Vimin foldaus on asia, johon yleensä pitää opetella sisään. Sitten kun oppii, ei malta päästää irti.
set foldenable nnoremap <space> za
Välilyönnillä saa jatkossa foldit auki tai kiinni.
Sekalaista ja huippuhyödyllistä
nmap Y y$ let maplocalleader = "," " hyppää samaan hakemistoon, missä tiedosto on command! CD cd %:p:h " tiedostoja täydentää helpomminkin! inoremap <C-f> <C-x><C-f> " textmatea nnoremap <C-q> gqap
Jos C
korvaa rivin lopun ja D
poistaa rivin lopun, miksi
oletuksen Y
yankkaa koko rivin, ei vain loppua?! Fiksataan.
Komento :CD
vie vimin cwd:n nyt siihen paikkaan, missä bufferin
osoittama tiedosto on. Kiva, jos pitää editoida vähän
ympäriltäkin.
Vähemmän tunnettu lisäystilan täydennysmoottori on C-x C-f
, eli
täydentää tiedostopolkuja ja -nimiä. Heitän tämän suoraan C-f
:n
taakse, ja jo on upeata.
Ja viimeisenä kappaleen voi muotoilla kivasti kuosiin komentamalla
C-q
sen sisällä.
Syntaksi esille
Erityisesti vim-värityksiä hienosäätäessä on kiva tietää, mitä vim tietää kursorin alla olevasta tekstistä. Seuraava mappaus printtaa kaikki vimin syntaksivärjäysmoottorin väriluokat annetulle tekstille:
" Show syntax highlighting groups for word under cursor function! <SID>SynStack() if !exists("*synstack") return endif echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') endfunc nmap <F2> :call <SID>SynStack()<CR>
Joitain poimintoja .vim/bundle
-hakemistosta
Edellä kävin kaiken oleellisen ja ajantasaisen
.vimrc
-tiedostostani. Loppukevennyksenä esittelen joitain
plugineita, joita olen asentanut.
BufExplorer
BufExplorer on huippukiva tapa koluta aukiolevat puskurit ja sulkea joutavat.
LocalVimrc
LocalVimRc on vähän käytetty, mutta saattaa olla avuksi. Kullekin
hakemistolle voi kirjoittaa oman .vimrc
-tiedoston, joka luetaan.
Projektikohtaisia vim-säätöjä, siis.
Vimwiki
Emacsin MUSE:n (ent. wiki-mode) kilpailija on VimWiki ja se toimii yllättävän upeasti verkkotyylisten tiedostojen ja dokumenttien ylläpitoon. Musea ainakin käytetään paljon kevyenä CMS-moottorina, mikseipä myös Vimwikiä. Minähän tunnetusti koitin saada vimwikistä itselleni tietämyskantaa aikaan, mutta lopulta emacsin org-mode voitti.
Vimwiki-aiheiset säätöni liittyvät lähinnä hallinnollisiin säätöihin. KamelinVarvas-tekstien automaattisen linkifikaation pudotin pois ja ääkköset saadaan tunnistautumaan linkeissä lisäämällä ne jononjatkoksi.
let g:vimwiki_list = [{'path': '~/.vim/wiki/'}] let g:vimwiki_browsers = ['firefox'] let g:vimwiki_camel_case = 0 let g:vimwiki_upper = "A-ZÄÖ" let g:vimwiki_lower = "a-zäö" let g:vimwiki_folding = 0 let g:vimwiki_hl_headers = 0 let g:vimwiki_use_mouse = 1
Conque
Conque on alkeellinen terminaaliemulaattori vimin sisään. Pieni palanen emacsia mukaan. Kuvittele kaikkia niitä mahdollisuuksia, kun voit heittää vimin värjäyksiä ja pikanäppäimiä projektin "konsoliin".
NERDTree
Kyllä, NerdTree löytyy käytöstä, vaikka sillä tekee harvinaisen vähän omissa projekteissani. Jos koet tarvitsevasi cwd:n ympärillä pyörivää tiedostolistausta ja "nopeata" navigointia, niin NERDTree on erinomainen valinta.
nmap <left> :NERDTreeToggle<CR>
NERDCommenter
Kommentointia varten NERDCommenter on hyvä. Se tunnistaa
tiedostotyypin ja kommentoi siten oikeanlaisia merkkejä.
Emacsista tuttu M-;
on hyvä valinta näppäinyhdistelmälle.
MatchIt
MatchIt laajentaa vimin %
-komentoa erityisesti (X)HTML-saralla:
nyt voit hypätä sulkevaan HTML-tagiin prosentista. Osaa varmasti
jotain muutakin, mutta yksinään tuon takia kantsi asentaa.
SnipMate
TextMatesin snippet-toimintoa replikoi moni snippet-moottori vimissä. Ehkä nykyään kannattaa suunnata katse UltiSnips-paketin puoleen, mutta minä tulin hyvin toimeen SnipMaten kanssa.
Screen.vim
Hassu ja pieni skripti mahdollistaa erillisen, mutta nimetyn
screen-istunnon käyttämistä "kohteena" vimistä käsin. Luo
nimellinen screen-sessio ja avaa haluamasi komentokehote siihen.
Vimissä lataa screen.vim
käyttöön ja maalaa tekstiä. Lähetä
tämä teksti screeniin hakkaamalla C-c C-c
. Yksinkertaista ja
tehokasta. Voi käyttää vaikka bash-skriptien kehityksessä.
SlimV ja VimClojure
Emacsia sanotaan lisp-kehitysympäristöjen kuninkaaksi, eikä aivan perusteetta. Vimilläkin pääsee huisin pitkälle. SlimV on kuuluisan SLIME:n Vim-vastine ja sillä voi hoitaa kaikenlaisia Swank-palvelun tarjoavia lispejä kotiin. Clojurea varten kannattaa katsella VimClojure läpi. Tosin kuluneen vuoden aikana tilalle on tainnut tulla enemmän ylläpidetty Fireplace.