Vim/Python

Iš Wikibooks.
< Vim

Šį kartą sujungsime dvi fantastiškas priemones Vim Editorių ir Python'ą. Ubuntu linux norint naudotis šiuo funkcionalumu tereikia turėti suinstaliuotą vim'ą su python palaikymu (reikia instaliuoti vim-python). Microsoft Windows reikės susinstaliuoti tą Python'o versija su kuria sukompiliuotas Vimas (šiuo metu Python 2.4) ir užtikrinti, kad python'as bus PATH'e. Norint naudoti kitą Python'o versiją reikės Vim'ą susikompiliuoti patiems (tai nėra sudėtinga, bet paprasčiau tiesiog susinstaliuoti Python 2.4).

Tarkime mums reikia VIM skripto, kuris sukurtų štai tokius komentarus:

    # Autorius: Mikė Pūkuotukas
    # Data: 2007-11-18 21:36:42.746568
    # Komentaras:

Tarkim jūsų kompanijoje reikia sudėti tokius komentarus, kur nurodomas autorius ir dabartinė data/laikas. Plius reikia prirašyti kažkokį trumpą komentarą. Tokį procesą natūraliai norėtųsi automatizuoti.

Taigi sukuriame comment.vim failą ir į jį įrašome štai tokias eilutes:

    function Add()
    python << EOF
    import vim
    from datetime import datetime

    template = """# Autorius: Mikė Pūkuotukas
    # Data: %s
    # Komentaras:"""

    now = datetime.now()
    comment = template % now

    vim.current.range.append(comment.split('\n'))
    EOF
    endfunction

Tada Vim'e įvykdome :call Add() ir po ta eilute, kurioje yra kursorius turėtų atsirasti aukščiau mano paminėtas komentaras.

O dabar paanalizuokime kiekvieną eilutę.

    import vim

Ši eilutė importuoja Vim'o biblioteka. Joje yra visos galimybės kontroliuoti vim'ą naudojantis python'u. Daugiau apie tai skaitykite :help python.

    from datetime import datetime

Čia tiesiog importuojame datetime python modulį.

    template = """# Autorius: Mikė Pūkuotukas

Sukuriame šabloną komentarui.

    now = datetime.now()
    comment = template % now

Gauname dabartinę datą ir naudodami šabloną sukuriame komentarą su dabartine data. Jei norite kažkokio konkretaus datos formatavimo naudokite now.strftime(formatas) vietoj now.

    vim.current.range.append(comment.split('\n'))

current.range žymės tą vietą, kur dabar yra kursorius. Todėl mes galime prie jo pridėti sąrašą sudarytą iš komentaro eilučių. Štai ir viskas.

Ruby ir Perl su vim'u irgi draugauja. Daugiau informacijos :help ruby ir :help perl.

Taip pat pridedu tvarkingą plugin'ą, kurį galite naudoti savo reikmėms. Jį reikia padėti į ~/.vim/plugin direktoriją. Norėdami įvykdyti komentaro pridėjimą klaviatūroje galite surinkti \a. Daugiau apie tai paskaityti :help leader.

" Vim plugin for adding comment.
" Last Change:  2007 Nov 18
" Maintainer:   Dalius <dalius@sandbox.lt>
" License:      This file is placed in the public domain.

if exists("loaded_comment")
  finish
endif
let loaded_comment = 1

let s:save_cpo = &cpo
set cpo&vim

"
" Functions
"

function s:Add()
python << EOF
import vim
from datetime import datetime

template = """# Autorius: Mikė Pūkuotukas
# Data: %s
# Komentaras:"""

now = datetime.now()
comment = template % now

vim.current.range.append(comment.split('\n'))
EOF
endfunction

"
" Mappings
"

if !hasmapto('<Plug>CommentAdd')
    map <unique> <Leader>a  <Plug>CommentAdd
endif

noremap <unique> <script> <Plug>CommentAdd <SID>Add

noremap <SID>Add :call <SID>Add()<CR>

"
" Commands
"

if !exists(":CommentAdd")
    command -nargs=0  CommentAdd :call s:Add()
endif

let &cpo = s:save_cpo