" sweettabs.vim " @Author: Alessandro Decina " @License: GPL " @Created: 11-Nov-2007. " @Last Change: 11-Nov-2007. " @Revision: 0.1.1 " " reload if the config has changed or g:sweettabs_reload is set (useful for " development) if exists('s:sweettabs') && \ s:config == s:parseConfig() && \ (!exists('g:sweettabs_reload') || g:sweettabs_reload == 0) finish endif let s:sweettabs = 'VIM Tabs Done Right' "do NOT change the values here, put let g:sweettabs_$keyname = yourvalue in your "vimrc file to override them let s:config_defaults = {'enable_guitablabel': 0, \ 'enable_shortcuts': 1, \ 'move_modifier_format': '', \ 'move_tab_modifier_format': '', \ 'guitablabel_fixed_length': 20} "load global configuration variables function s:parseConfig() let retval = copy(s:config_defaults) for key in keys(s:config_defaults) let global_option = 'g:sweettabs_' . key if exists(global_option) retval[key] = eval(global_option) endif endfor return retval endfunction "utility function to map keys to cmd in nvoi states function s:sweetTabsMap(modifier_fmt, keys, cmd) let modifier = printf(a:modifier_fmt, a:keys) execute 'map ' . modifier . ' ' . a:cmd . '' execute 'imap ' . modifier . ' ' . a:cmd . '' endfunction function SweetTabsMoveLeft() let pos = tabpagenr() if pos == 1 return endif execute 'tabmove ' pos - 2 endfunction function SweetTabsMoveRight() let pos = tabpagenr() execute 'tabmove ' pos endfunction function s:addShortcuts() let modifier = s:config['move_modifier_format'] " goes to the previous tab call s:sweetTabsMap(modifier, 'Left', ':tabp') " goes to the next tab call s:sweetTabsMap(modifier, 'Right', ':tabn') "map to :tabn [1-9] for i in range(1, 9) call s:sweetTabsMap(modifier, i, ':tabn ' . i) endfor "move tab shortcuts let modifier = s:config['move_tab_modifier_format'] " moves the current tab one position left call s:sweetTabsMap(modifier, 'Left', ':call SweetTabsMoveLeft()') " moves the current tab one position right call s:sweetTabsMap(modifier, 'Right', ':call SweetTabsMoveRight()') endfunction function SweetTabsGuiTabLabel() let label = '' " prepend '+' if the tab has modified buffers, like the default label let buf_list = tabpagebuflist(v:lnum) for buf_nr in buf_list if getbufvar(buf_nr, '&modified') let label = label . '*' break endif endfor let label = label . ' ' . bufname(buf_list[tabpagewinnr(v:lnum) - 1]) return label endfunction function s:setGuiTabLabel() set guitablabel=%{SweetTabsGuiTabLabel()} endfunction function s:Main() "FIXME: unmap previously mapped keys when reloading let s:config = s:parseConfig() "shortcuts if s:config['enable_shortcuts'] call s:addShortcuts() endif "guitablabel if s:config['enable_guitablabel'] call s:setGuiTabLabel() endif endfunction call s:Main()