" Vim filetype plugin file " Language: generic Changelog file " Maintainer: Nikolai Weibull <now@bitwi.se> " Latest Revision: 2012-08-23 " Variables: " g:changelog_timeformat (deprecated: use g:changelog_dateformat instead) - " description: the timeformat used in ChangeLog entries. " default: "%Y-%m-%d". " g:changelog_dateformat - " description: the format sent to strftime() to generate a date string. " default: "%Y-%m-%d". " g:changelog_username - " description: the username to use in ChangeLog entries " default: try to deduce it from environment variables and system files. " Local Mappings: " <Leader>o - " adds a new changelog entry for the current user for the current date. " Global Mappings: " <Leader>o - " switches to the ChangeLog buffer opened for the current directory, or " opens it in a new buffer if it exists in the current directory. Then " it does the same as the local <Leader>o described above. " Notes: " run 'runtime ftplugin/changelog.vim' to enable the global mapping for " changelog files. " TODO: " should we perhaps open the ChangeLog file even if it doesn't exist already? " Problem is that you might end up with ChangeLog files all over the place. " If 'filetype' isn't "changelog", we must have been to add ChangeLog opener if &filetype == 'changelog' if exists('b:did_ftplugin') finish endif let b:did_ftplugin = 1 let s:cpo_save = &cpo set cpo&vim " Set up the format used for dates. if !exists('g:changelog_dateformat') if exists('g:changelog_timeformat') let g:changelog_dateformat = g:changelog_timeformat else let g:changelog_dateformat = "%Y-%m-%d" endif endif function! s:username() if exists('g:changelog_username') return g:changelog_username elseif $EMAIL != "" return $EMAIL elseif $EMAIL_ADDRESS != "" return $EMAIL_ADDRESS endif let login = s:login() return printf('%s <%s@%s>', s:name(login), login, s:hostname()) endfunction function! s:login() return s:trimmed_system_with_default('whoami', 'unknown') endfunction function! s:trimmed_system_with_default(command, default) return s:first_line(s:system_with_default(a:command, a:default)) endfunction function! s:system_with_default(command, default) let output = system(a:command) if v:shell_error return default endif return output endfunction function! s:first_line(string) return substitute(a:string, '\n.*$', "", "") endfunction function! s:name(login) for name in [s:gecos_name(a:login), $NAME, s:capitalize(a:login)] if name != "" return name endif endfor endfunction function! s:gecos_name(login) for line in s:try_reading_file('/etc/passwd') if line =~ '^' . a:login . ':' return substitute(s:passwd_field(line, 5), '&', s:capitalize(a:login), "") endif endfor return "" endfunction function! s:try_reading_file(path) try return readfile(a:path) catch return [] endtry endfunction function! s:passwd_field(line, field) let fields = split(a:line, ':', 1) if len(fields) < a:field return "" endif return fields[a:field - 1] endfunction function! s:capitalize(word) return toupper(a:word[0]) . strpart(a:word, 1) endfunction function! s:hostname() return s:trimmed_system_with_default('hostname', 'localhost') endfunction " Format used for new date entries. if !exists('g:changelog_new_date_format') let g:changelog_new_date_format = "%d %u\n\n\t* %c\n\n" endif " Format used for new entries to current date entry. if !exists('g:changelog_new_entry_format') let g:changelog_new_entry_format = "\t* %c" endif " Regular expression used to find a given date entry. if !exists('g:changelog_date_entry_search') let g:changelog_date_entry_search = '^\s*%d\_s*%u' endif " Regular expression used to find the end of a date entry if !exists('g:changelog_date_end_entry_search') let g:changelog_date_end_entry_search = '^\s*$' endif " Substitutes specific items in new date-entry formats and search strings. " Can be done with substitute of course, but unclean, and need \@! then. function! s:substitute_items(str, date, user) let str = a:str let middles = {'%': '%', 'd': a:date, 'u': a:user, 'c': '{cursor}'} let i = stridx(str, '%') while i != -1 let inc = 0 if has_key(middles, str[i + 1]) let mid = middles[str[i + 1]] let str = strpart(str, 0, i) . mid . strpart(str, i + 2) let inc = strlen(mid) endif let i = stridx(str, '%', i + 1 + inc) endwhile return str endfunction " Position the cursor once we've done all the funky substitution. function! s:position_cursor() if search('{cursor}') > 0 let lnum = line('.') let line = getline(lnum) let cursor = stridx(line, '{cursor}') call setline(lnum, substitute(line, '{cursor}', '', '')) endif startinsert! endfunction " Internal function to create a new entry in the ChangeLog. function! s:new_changelog_entry() " Deal with 'paste' option. let save_paste = &paste let &paste = 1 call cursor(1, 1) " Look for an entry for today by our user. let date = strftime(g:changelog_dateformat) let search = s:substitute_items(g:changelog_date_entry_search, date, \ s:username()) if search(search) > 0 " Ok, now we look for the end of the date entry, and add an entry. call cursor(nextnonblank(line('.') + 1), 1) if search(g:changelog_date_end_entry_search, 'W') > 0 let p = (line('.') == line('$')) ? line('.') : line('.') - 1 else let p = line('.') endif let ls = split(s:substitute_items(g:changelog_new_entry_format, '', ''), \ '\n') call append(p, ls) call cursor(p + 1, 1) else " Flag for removing empty lines at end of new ChangeLogs. let remove_empty = line('$') == 1 " No entry today, so create a date-user header and insert an entry. let todays_entry = s:substitute_items(g:changelog_new_date_format, \ date, s:username()) " Make sure we have a cursor positioning. if stridx(todays_entry, '{cursor}') == -1 let todays_entry = todays_entry . '{cursor}' endif " Now do the work. call append(0, split(todays_entry, '\n')) " Remove empty lines at end of file. if remove_empty $-/^\s*$/-1,$delete endif " Reposition cursor once we're done. call cursor(1, 1) endif call s:position_cursor() " And reset 'paste' option let &paste = save_paste endfunction if exists(":NewChangelogEntry") != 2 noremap <buffer> <silent> <Leader>o <Esc>:call <SID>new_changelog_entry()<CR> command! -nargs=0 NewChangelogEntry call s:new_changelog_entry() endif let b:undo_ftplugin = "setl com< fo< et< ai<" setlocal comments= setlocal formatoptions+=t setlocal noexpandtab setlocal autoindent if &textwidth == 0 setlocal textwidth=78 let b:undo_ftplugin .= " tw<" endif let &cpo = s:cpo_save unlet s:cpo_save else let s:cpo_save = &cpo set cpo&vim " Add the Changelog opening mapping nnoremap <silent> <Leader>o :call <SID>open_changelog()<CR> function! s:open_changelog() let path = expand('%:p:h') if exists('b:changelog_path') let changelog = b:changelog_path else if exists('b:changelog_name') let name = b:changelog_name else let name = 'ChangeLog' endif while isdirectory(path) let changelog = path . '/' . name if filereadable(changelog) break endif let parent = substitute(path, '/\+[^/]*$', "", "") if path == parent break endif let path = parent endwhile endif if !filereadable(changelog) return endif if exists('b:changelog_entry_prefix') let prefix = call(b:changelog_entry_prefix, []) else let prefix = substitute(strpart(expand('%:p'), strlen(path)), '^/\+', "", "") . ':' endif if !empty(prefix) let prefix = ' ' . prefix endif let buf = bufnr(changelog) if buf != -1 if bufwinnr(buf) != -1 execute bufwinnr(buf) . 'wincmd w' else execute 'sbuffer' buf endif else execute 'split' fnameescape(changelog) endif call s:new_changelog_entry(prefix) endfunction let &cpo = s:cpo_save unlet s:cpo_save endif
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
README.txt | File | 869 B | 0644 |
|
a2ps.vim | File | 458 B | 0644 |
|
aap.vim | File | 716 B | 0644 |
|
abap.vim | File | 800 B | 0644 |
|
abaqus.vim | File | 3.31 KB | 0644 |
|
ada.vim | File | 6.26 KB | 0644 |
|
alsaconf.vim | File | 426 B | 0644 |
|
ant.vim | File | 1.31 KB | 0644 |
|
arch.vim | File | 419 B | 0644 |
|
art.vim | File | 410 B | 0644 |
|
aspvbs.vim | File | 1.87 KB | 0644 |
|
automake.vim | File | 325 B | 0644 |
|
bdf.vim | File | 437 B | 0644 |
|
bst.vim | File | 333 B | 0644 |
|
btm.vim | File | 316 B | 0644 |
|
c.vim | File | 1.92 KB | 0644 |
|
calendar.vim | File | 450 B | 0644 |
|
cdrdaoconf.vim | File | 375 B | 0644 |
|
ch.vim | File | 472 B | 0644 |
|
changelog.vim | File | 8.54 KB | 0644 |
|
clojure.vim | File | 2.78 KB | 0644 |
|
cobol.vim | File | 9.17 KB | 0644 |
|
conf.vim | File | 422 B | 0644 |
|
config.vim | File | 1.24 KB | 0644 |
|
context.vim | File | 955 B | 0644 |
|
cpp.vim | File | 288 B | 0644 |
|
crm.vim | File | 402 B | 0644 |
|
cs.vim | File | 802 B | 0644 |
|
csc.vim | File | 734 B | 0644 |
|
csh.vim | File | 1.59 KB | 0644 |
|
css.vim | File | 516 B | 0644 |
|
cucumber.vim | File | 5.2 KB | 0644 |
|
cvsrc.vim | File | 387 B | 0644 |
|
debchangelog.vim | File | 11.26 KB | 0644 |
|
debcontrol.vim | File | 1.84 KB | 0644 |
|
denyhosts.vim | File | 375 B | 0644 |
|
dictconf.vim | File | 422 B | 0644 |
|
dictdconf.vim | File | 423 B | 0644 |
|
diff.vim | File | 355 B | 0644 |
|
dircolors.vim | File | 419 B | 0644 |
|
docbk.vim | File | 530 B | 0644 |
|
dosbatch.vim | File | 777 B | 0644 |
|
dosini.vim | File | 446 B | 0644 |
|
dtd.vim | File | 1.1 KB | 0644 |
|
dtrace.vim | File | 1.12 KB | 0644 |
|
elinks.vim | File | 424 B | 0644 |
|
erlang.vim | File | 1.77 KB | 0644 |
|
eruby.vim | File | 3.08 KB | 0644 |
|
eterm.vim | File | 458 B | 0644 |
|
falcon.vim | File | 1.31 KB | 0644 |
|
fetchmail.vim | File | 416 B | 0644 |
|
flexwiki.vim | File | 1.83 KB | 0644 |
|
fortran.vim | File | 4.16 KB | 0644 |
|
framescript.vim | File | 768 B | 0644 |
|
fvwm.vim | File | 390 B | 0644 |
|
git.vim | File | 1.19 KB | 0644 |
|
gitcommit.vim | File | 2.16 KB | 0644 |
|
gitconfig.vim | File | 376 B | 0644 |
|
gitrebase.vim | File | 1.4 KB | 0644 |
|
gitsendemail.vim | File | 157 B | 0644 |
|
gpg.vim | File | 421 B | 0644 |
|
gprof.vim | File | 939 B | 0644 |
|
group.vim | File | 413 B | 0644 |
|
grub.vim | File | 422 B | 0644 |
|
haml.vim | File | 1.84 KB | 0644 |
|
hamster.vim | File | 1.88 KB | 0644 |
|
haskell.vim | File | 433 B | 0644 |
|
help.vim | File | 430 B | 0644 |
|
hostconf.vim | File | 375 B | 0644 |
|
hostsaccess.vim | File | 424 B | 0644 |
|
html.vim | File | 2.87 KB | 0644 |
|
htmldjango.vim | File | 331 B | 0644 |
|
indent.vim | File | 442 B | 0644 |
|
initex.vim | File | 1005 B | 0644 |
|
ishd.vim | File | 1.23 KB | 0644 |
|
java.vim | File | 1.65 KB | 0644 |
|
javascript.vim | File | 1.02 KB | 0644 |
|
jsp.vim | File | 1.96 KB | 0644 |
|
kconfig.vim | File | 375 B | 0644 |
|
kwt.vim | File | 851 B | 0644 |
|
ld.vim | File | 458 B | 0644 |
|
lftp.vim | File | 422 B | 0644 |
|
libao.vim | File | 428 B | 0644 |
|
limits.vim | File | 424 B | 0644 |
|
liquid.vim | File | 1.85 KB | 0644 |
|
lisp.vim | File | 911 B | 0644 |
|
logcheck.vim | File | 500 B | 0644 |
|
loginaccess.vim | File | 430 B | 0644 |
|
logindefs.vim | File | 428 B | 0644 |
|
logtalk.dict | File | 1.75 KB | 0644 |
|
logtalk.vim | File | 401 B | 0644 |
|
lprolog.vim | File | 1.25 KB | 0644 |
|
lua.vim | File | 973 B | 0644 |
|
m4.vim | File | 414 B | 0644 |
|
mail.vim | File | 1.08 KB | 0644 |
|
mailaliases.vim | File | 375 B | 0644 |
|
mailcap.vim | File | 422 B | 0644 |
|
make.vim | File | 935 B | 0644 |
|
man.vim | File | 4.6 KB | 0644 |
|
manconf.vim | File | 432 B | 0644 |
|
markdown.vim | File | 572 B | 0644 |
|
matlab.vim | File | 649 B | 0644 |
|
mf.vim | File | 404 B | 0644 |
|
modconf.vim | File | 465 B | 0644 |
|
mp.vim | File | 621 B | 0644 |
|
mplayerconf.vim | File | 460 B | 0644 |
|
mrxvtrc.vim | File | 798 B | 0644 |
|
msmessages.vim | File | 1.11 KB | 0644 |
|
muttrc.vim | File | 455 B | 0644 |
|
nanorc.vim | File | 435 B | 0644 |
|
netrc.vim | File | 416 B | 0644 |
|
nsis.vim | File | 553 B | 0644 |
|
objc.vim | File | 296 B | 0644 |
|
ocaml.vim | File | 22.5 KB | 0644 |
|
occam.vim | File | 1.27 KB | 0644 |
|
pamconf.vim | File | 421 B | 0644 |
|
pascal.vim | File | 667 B | 0644 |
|
passwd.vim | File | 412 B | 0644 |
|
pdf.vim | File | 2.55 KB | 0644 |
|
perl.vim | File | 2.77 KB | 0644 |
|
perl6.vim | File | 2.47 KB | 0644 |
|
php.vim | File | 2.75 KB | 0644 |
|
pinfo.vim | File | 423 B | 0644 |
|
plaintex.vim | File | 1.12 KB | 0644 |
|
postscr.vim | File | 1006 B | 0644 |
|
procmail.vim | File | 467 B | 0644 |
|
prolog.vim | File | 428 B | 0644 |
|
protocols.vim | File | 445 B | 0644 |
|
pyrex.vim | File | 766 B | 0644 |
|
python.vim | File | 1.33 KB | 0644 |
|
qf.vim | File | 459 B | 0644 |
|
quake.vim | File | 427 B | 0644 |
|
racc.vim | File | 437 B | 0644 |
|
readline.vim | File | 426 B | 0644 |
|
reva.vim | File | 709 B | 0644 |
|
rnc.vim | File | 419 B | 0644 |
|
rpl.vim | File | 620 B | 0644 |
|
rst.vim | File | 444 B | 0644 |
|
ruby.vim | File | 15.48 KB | 0644 |
|
sass.vim | File | 580 B | 0644 |
|
scheme.vim | File | 1.71 KB | 0644 |
|
screen.vim | File | 424 B | 0644 |
|
scss.vim | File | 200 B | 0644 |
|
sensors.vim | File | 443 B | 0644 |
|
services.vim | File | 440 B | 0644 |
|
setserial.vim | File | 427 B | 0644 |
|
sgml.vim | File | 1.18 KB | 0644 |
|
sh.vim | File | 1.17 KB | 0644 |
|
sieve.vim | File | 457 B | 0644 |
|
slpconf.vim | File | 465 B | 0644 |
|
slpreg.vim | File | 464 B | 0644 |
|
slpspi.vim | File | 455 B | 0644 |
|
spec.vim | File | 5.21 KB | 0644 |
|
sql.vim | File | 20.08 KB | 0644 |
|
sshconfig.vim | File | 429 B | 0644 |
|
sudoers.vim | File | 426 B | 0644 |
|
svg.vim | File | 1.17 KB | 0644 |
|
sysctl.vim | File | 441 B | 0644 |
|
tcl.vim | File | 1002 B | 0644 |
|
tcsh.vim | File | 1.18 KB | 0644 |
|
terminfo.vim | File | 418 B | 0644 |
|
tex.vim | File | 1.6 KB | 0644 |
|
treetop.vim | File | 404 B | 0644 |
|
tt2html.vim | File | 434 B | 0644 |
|
udevconf.vim | File | 422 B | 0644 |
|
udevperm.vim | File | 420 B | 0644 |
|
udevrules.vim | File | 414 B | 0644 |
|
updatedb.vim | File | 431 B | 0644 |
|
vb.vim | File | 1.86 KB | 0644 |
|
verilog.vim | File | 1.64 KB | 0644 |
|
vhdl.vim | File | 3.42 KB | 0644 |
|
vim.vim | File | 2.88 KB | 0644 |
|
xdefaults.vim | File | 469 B | 0644 |
|
xf86conf.vim | File | 422 B | 0644 |
|
xhtml.vim | File | 1.99 KB | 0644 |
|
xinetd.vim | File | 464 B | 0644 |
|
xml.vim | File | 1.87 KB | 0644 |
|
xmodmap.vim | File | 422 B | 0644 |
|
xs.vim | File | 465 B | 0644 |
|
xsd.vim | File | 1.14 KB | 0644 |
|
xslt.vim | File | 539 B | 0644 |
|
yaml.vim | File | 452 B | 0644 |
|
zimbu.vim | File | 5.2 KB | 0644 |
|
zsh.vim | File | 674 B | 0644 |
|