" tlib.vim -- Some utility functions " @Author: Tom Link (micathom AT gmail com?subject=[vim]) " @Website: http://www.vim.org/account/profile.php?user_id=4037 " @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @Created: 2007-04-10. " @Last Change: 2013-09-25. " @Revision: 748 " GetLatestVimScripts: 1863 1 tlib.vim if &cp || exists("loaded_tlib") finish endif if v:version < 700 "{{{2 echoerr "tlib requires Vim >= 7" finish endif let loaded_tlib = 107 let s:save_cpo = &cpo set cpo&vim " Init~ {{{1 " call tlib#autocmdgroup#Init() " Commands~ {{{1 " :display: :TRequire NAME [VERSION [FILE]] " Make a certain vim file is loaded. " " Conventions: If FILE isn't defined, plugin/NAME.vim is loaded. The " file must provide a variable loaded_{NAME} that represents the version " number. command! -nargs=+ TRequire let s:require = [] \ | if !exists('loaded_'. get(s:require, 0)) \ | exec 'runtime '. get(s:require, 2, 'plugin/'. get(s:require, 0) .'.vim') \ | if !exists('loaded_'. get(s:require, 0)) || loaded_{get(s:require, 0)} < get(s:require, 1, loaded_{get(s:require, 0)}) \ | echoerr 'Require '. get(s:require, 0) .' >= '. get(s:require, 1, 'any version will do') \ | finish \ | endif \ | endif | unlet s:require " :display: :TLet VAR = VALUE " Set a variable only if it doesn't already exist. " EXAMPLES: > " TLet foo = 1 " TLet foo = 2 " echo foo " => 1 command! -nargs=+ TLet if !exists(matchstr(, '^[^=[:space:]]\+')) | exec 'let '. | endif " Open a scratch buffer (a buffer without a file). " TScratch ... use split window " TScratch! ... use the whole frame " This command takes an (inner) dictionary as optional argument. " EXAMPLES: > " TScratch 'scratch': '__FOO__' " => Open a scratch buffer named __FOO__ command! -bar -nargs=* -bang TScratch call tlib#scratch#UseScratch({'scratch_split': '' != '!', }) " :display: :TVarArg VAR1, [VAR2, DEFAULT2] ... " A convenience wrapper for |tlib#arg#Let|. " EXAMPLES: > " function! Foo(...) " TVarArg ['a', 1], 'b' " echo 'a='. a " echo 'b='. b " endf command! -nargs=+ TVarArg exec tlib#arg#Let([]) " :display: :TKeyArg DICT, VAR1, [VAR2, DEFAULT2] ... " A convenience wrapper for |tlib#arg#Let|. " EXAMPLES: > " function! Foo(keyargs) " TKeyArg a:keyargs, ['a', 1], 'b' " echo 'a='. a " echo 'b='. b " endf command! -nargs=+ TKeyArg exec tlib#arg#Key([]) " :display: :TBrowseOutput COMMAND " Ever wondered how to efficiently browse the output of a command " without redirecting it to a file? This command takes a command as " argument and presents the output via |tlib#input#List()| so that you " can easily search for a keyword (e.g. the name of a variable or " function) and the like. " " If you press enter, the selected line will be copied to the command " line. Press ESC to cancel browsing. " " EXAMPLES: > " TBrowseOutput 20verb TeaseTheCulprit command! -nargs=1 -complete=command TBrowseOutput call tlib#cmd#BrowseOutput() " :display: :TBrowseScriptnames " List all sourced script names (the output of ':scriptnames'). " " When you press enter, the selected script will be opened in the current " window. Press ESC to cancel. " " EXAMPLES: > " TBrowseScriptnames command! -nargs=0 -complete=command TBrowseScriptnames call \ tlib#cmd#BrowseOutputWithCallback("tlib#cmd#ParseScriptname", "scriptnames") " :display: :TTimeCommand CMD " Time the execution time of CMD. command! -nargs=1 -complete=command TTimeCommand call tlib#cmd#Time() let &cpo = s:save_cpo unlet s:save_cpo