mirror of https://github.com/akelge/vim
More plugins in Vundle
This commit is contained in:
parent
35911ffb93
commit
257cdebae5
|
@ -1,650 +0,0 @@
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" getscript.vim
|
|
||||||
" Author: Charles E. Campbell, Jr.
|
|
||||||
" Date: May 31, 2011
|
|
||||||
" Version: 33
|
|
||||||
" Installing: :help glvs-install
|
|
||||||
" Usage: :help glvs
|
|
||||||
"
|
|
||||||
" GetLatestVimScripts: 642 1 :AutoInstall: getscript.vim
|
|
||||||
"redraw!|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Initialization: {{{1
|
|
||||||
" if you're sourcing this file, surely you can't be
|
|
||||||
" expecting vim to be in its vi-compatible mode!
|
|
||||||
if exists("g:loaded_getscript")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let g:loaded_getscript= "v33"
|
|
||||||
if &cp
|
|
||||||
echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
if v:version < 702
|
|
||||||
echohl WarningMsg
|
|
||||||
echo "***warning*** this version of getscript needs vim 7.2"
|
|
||||||
echohl Normal
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let s:keepcpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
"DechoTabOn
|
|
||||||
|
|
||||||
" ---------------------------
|
|
||||||
" Global Variables: {{{1
|
|
||||||
" ---------------------------
|
|
||||||
" Cygwin Detection ------- {{{2
|
|
||||||
if !exists("g:getscript_cygwin")
|
|
||||||
if has("win32") || has("win95") || has("win64") || has("win16")
|
|
||||||
if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
|
|
||||||
let g:getscript_cygwin= 1
|
|
||||||
else
|
|
||||||
let g:getscript_cygwin= 0
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let g:getscript_cygwin= 0
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" wget vs curl {{{2
|
|
||||||
if !exists("g:GetLatestVimScripts_wget")
|
|
||||||
if executable("wget")
|
|
||||||
let g:GetLatestVimScripts_wget= "wget"
|
|
||||||
elseif executable("curl")
|
|
||||||
let g:GetLatestVimScripts_wget= "curl"
|
|
||||||
else
|
|
||||||
let g:GetLatestVimScripts_wget = 'echo "GetLatestVimScripts needs wget or curl"'
|
|
||||||
let g:GetLatestVimScripts_options = ""
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" options that wget and curl require:
|
|
||||||
if !exists("g:GetLatestVimScripts_options")
|
|
||||||
if g:GetLatestVimScripts_wget == "wget"
|
|
||||||
let g:GetLatestVimScripts_options= "-q -O"
|
|
||||||
elseif g:GetLatestVimScripts_wget == "curl"
|
|
||||||
let g:GetLatestVimScripts_options= "-s -O"
|
|
||||||
else
|
|
||||||
let g:GetLatestVimScripts_options= ""
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" by default, allow autoinstall lines to work
|
|
||||||
if !exists("g:GetLatestVimScripts_allowautoinstall")
|
|
||||||
let g:GetLatestVimScripts_allowautoinstall= 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
"" For debugging:
|
|
||||||
"let g:GetLatestVimScripts_wget = "echo"
|
|
||||||
"let g:GetLatestVimScripts_options = "options"
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Check If AutoInstall Capable: {{{1
|
|
||||||
let s:autoinstall= ""
|
|
||||||
if g:GetLatestVimScripts_allowautoinstall
|
|
||||||
|
|
||||||
if (has("win32") || has("gui_win32") || has("gui_win32s") || has("win16") || has("win64") || has("win32unix") || has("win95")) && &shell != "bash"
|
|
||||||
" windows (but not cygwin/bash)
|
|
||||||
let s:dotvim= "vimfiles"
|
|
||||||
if !exists("g:GetLatestVimScripts_mv")
|
|
||||||
let g:GetLatestVimScripts_mv= "ren"
|
|
||||||
endif
|
|
||||||
|
|
||||||
else
|
|
||||||
" unix
|
|
||||||
let s:dotvim= ".vim"
|
|
||||||
if !exists("g:GetLatestVimScripts_mv")
|
|
||||||
let g:GetLatestVimScripts_mv= "mv"
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
if exists("g:GetLatestVimScripts_autoinstalldir") && isdirectory(g:GetLatestVimScripts_autoinstalldir)
|
|
||||||
let s:autoinstall= g:GetLatestVimScripts_autoinstalldir"
|
|
||||||
elseif exists('$HOME') && isdirectory(expand("$HOME")."/".s:dotvim)
|
|
||||||
let s:autoinstall= $HOME."/".s:dotvim
|
|
||||||
endif
|
|
||||||
" call Decho("s:autoinstall<".s:autoinstall.">")
|
|
||||||
"else "Decho
|
|
||||||
" call Decho("g:GetLatestVimScripts_allowautoinstall=".g:GetLatestVimScripts_allowautoinstall.": :AutoInstall: disabled")
|
|
||||||
endif
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Public Interface: {{{1
|
|
||||||
com! -nargs=0 GetLatestVimScripts call getscript#GetLatestVimScripts()
|
|
||||||
com! -nargs=0 GetScript call getscript#GetLatestVimScripts()
|
|
||||||
silent! com -nargs=0 GLVS call getscript#GetLatestVimScripts()
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" GetLatestVimScripts: this function gets the latest versions of {{{1
|
|
||||||
" scripts based on the list in
|
|
||||||
" (first dir in runtimepath)/GetLatest/GetLatestVimScripts.dat
|
|
||||||
fun! getscript#GetLatestVimScripts()
|
|
||||||
" call Dfunc("GetLatestVimScripts() autoinstall<".s:autoinstall.">")
|
|
||||||
|
|
||||||
" insure that wget is executable
|
|
||||||
if executable(g:GetLatestVimScripts_wget) != 1
|
|
||||||
echoerr "GetLatestVimScripts needs ".g:GetLatestVimScripts_wget." which apparently is not available on your system"
|
|
||||||
" call Dret("GetLatestVimScripts : wget not executable/availble")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
" insure that fnameescape() is available
|
|
||||||
if !exists("*fnameescape")
|
|
||||||
echoerr "GetLatestVimScripts needs fnameescape() (provided by 7.1.299 or later)"
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Find the .../GetLatest subdirectory under the runtimepath
|
|
||||||
for datadir in split(&rtp,',') + ['']
|
|
||||||
if isdirectory(datadir."/GetLatest")
|
|
||||||
" call Decho("found directory<".datadir.">")
|
|
||||||
let datadir= datadir . "/GetLatest"
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
if filereadable(datadir."GetLatestVimScripts.dat")
|
|
||||||
" call Decho("found ".datadir."/GetLatestVimScripts.dat")
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
" Sanity checks: readability and writability
|
|
||||||
if datadir == ""
|
|
||||||
echoerr 'Missing "GetLatest/" on your runtimepath - see :help glvs-dist-install'
|
|
||||||
" call Dret("GetLatestVimScripts : unable to find a GetLatest subdirectory")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
if filewritable(datadir) != 2
|
|
||||||
echoerr "(getLatestVimScripts) Your ".datadir." isn't writable"
|
|
||||||
" call Dret("GetLatestVimScripts : non-writable directory<".datadir.">")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
let datafile= datadir."/GetLatestVimScripts.dat"
|
|
||||||
if !filereadable(datafile)
|
|
||||||
echoerr "Your data file<".datafile."> isn't readable"
|
|
||||||
" call Dret("GetLatestVimScripts : non-readable datafile<".datafile.">")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
if !filewritable(datafile)
|
|
||||||
echoerr "Your data file<".datafile."> isn't writable"
|
|
||||||
" call Dret("GetLatestVimScripts : non-writable datafile<".datafile.">")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
" --------------------
|
|
||||||
" Passed sanity checks
|
|
||||||
" --------------------
|
|
||||||
|
|
||||||
" call Decho("datadir <".datadir.">")
|
|
||||||
" call Decho("datafile <".datafile.">")
|
|
||||||
|
|
||||||
" don't let any event handlers interfere (like winmanager's, taglist's, etc)
|
|
||||||
let eikeep = &ei
|
|
||||||
let hlskeep = &hls
|
|
||||||
let acdkeep = &acd
|
|
||||||
set ei=all hls&vim noacd
|
|
||||||
|
|
||||||
" Edit the datafile (ie. GetLatestVimScripts.dat):
|
|
||||||
" 1. record current directory (origdir),
|
|
||||||
" 2. change directory to datadir,
|
|
||||||
" 3. split window
|
|
||||||
" 4. edit datafile
|
|
||||||
let origdir= getcwd()
|
|
||||||
" call Decho("exe cd ".fnameescape(substitute(datadir,'\','/','ge')))
|
|
||||||
exe "cd ".fnameescape(substitute(datadir,'\','/','ge'))
|
|
||||||
split
|
|
||||||
" call Decho("exe e ".fnameescape(substitute(datafile,'\','/','ge')))
|
|
||||||
exe "e ".fnameescape(substitute(datafile,'\','/','ge'))
|
|
||||||
res 1000
|
|
||||||
let s:downloads = 0
|
|
||||||
let s:downerrors= 0
|
|
||||||
|
|
||||||
" Check on dependencies mentioned in plugins
|
|
||||||
" call Decho(" ")
|
|
||||||
" call Decho("searching plugins for GetLatestVimScripts dependencies")
|
|
||||||
let lastline = line("$")
|
|
||||||
" call Decho("lastline#".lastline)
|
|
||||||
let firstdir = substitute(&rtp,',.*$','','')
|
|
||||||
let plugins = split(globpath(firstdir,"plugin/*.vim"),'\n')
|
|
||||||
let plugins = plugins + split(globpath(firstdir,"AsNeeded/*.vim"),'\n')
|
|
||||||
let foundscript = 0
|
|
||||||
|
|
||||||
" this loop updates the GetLatestVimScripts.dat file
|
|
||||||
" with dependencies explicitly mentioned in the plugins
|
|
||||||
" via GetLatestVimScripts: ... lines
|
|
||||||
" It reads the plugin script at the end of the GetLatestVimScripts.dat
|
|
||||||
" file, examines it, and then removes it.
|
|
||||||
for plugin in plugins
|
|
||||||
" call Decho(" ")
|
|
||||||
" call Decho("plugin<".plugin.">")
|
|
||||||
|
|
||||||
" read plugin in
|
|
||||||
" evidently a :r creates a new buffer (the "#" buffer) that is subsequently unused -- bwiping it
|
|
||||||
$
|
|
||||||
" call Decho(".dependency checking<".plugin."> line$=".line("$"))
|
|
||||||
" call Decho("..exe silent r ".fnameescape(plugin))
|
|
||||||
exe "silent r ".fnameescape(plugin)
|
|
||||||
exe "silent bwipe ".bufnr("#")
|
|
||||||
|
|
||||||
while search('^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+','W') != 0
|
|
||||||
let depscript = substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+\s\+\(.*\)$','\1','e')
|
|
||||||
let depscriptid = substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\(\d\+\)\s\+.*$','\1','')
|
|
||||||
let llp1 = lastline+1
|
|
||||||
" call Decho("..depscript<".depscript.">")
|
|
||||||
|
|
||||||
" found a "GetLatestVimScripts: # #" line in the script;
|
|
||||||
" check if its already in the datafile by searching backwards from llp1,
|
|
||||||
" the (prior to reading in the plugin script) last line plus one of the GetLatestVimScripts.dat file,
|
|
||||||
" for the script-id with no wrapping allowed.
|
|
||||||
let curline = line(".")
|
|
||||||
let noai_script = substitute(depscript,'\s*:AutoInstall:\s*','','e')
|
|
||||||
exe llp1
|
|
||||||
let srchline = search('^\s*'.depscriptid.'\s\+\d\+\s\+.*$','bW')
|
|
||||||
if srchline == 0
|
|
||||||
" this second search is taken when, for example, a 0 0 scriptname is to be skipped over
|
|
||||||
let srchline= search('\<'.noai_script.'\>','bW')
|
|
||||||
endif
|
|
||||||
" call Decho("..noai_script<".noai_script."> depscriptid#".depscriptid." srchline#".srchline." curline#".line(".")." lastline#".lastline)
|
|
||||||
|
|
||||||
if srchline == 0
|
|
||||||
" found a new script to permanently include in the datafile
|
|
||||||
let keep_rega = @a
|
|
||||||
let @a = substitute(getline(curline),'^"\s\+GetLatestVimScripts:\s\+','','')
|
|
||||||
echomsg "Appending <".@a."> to ".datafile." for ".depscript
|
|
||||||
" call Decho("..Appending <".@a."> to ".datafile." for ".depscript)
|
|
||||||
exe lastline."put a"
|
|
||||||
let @a = keep_rega
|
|
||||||
let lastline = llp1
|
|
||||||
let curline = curline + 1
|
|
||||||
let foundscript = foundscript + 1
|
|
||||||
" else " Decho
|
|
||||||
" call Decho("..found <".noai_script."> (already in datafile at line#".srchline.")")
|
|
||||||
endif
|
|
||||||
|
|
||||||
let curline = curline + 1
|
|
||||||
exe curline
|
|
||||||
endwhile
|
|
||||||
|
|
||||||
" llp1: last line plus one
|
|
||||||
let llp1= lastline + 1
|
|
||||||
" call Decho(".deleting lines: ".llp1.",$d")
|
|
||||||
exe "silent! ".llp1.",$d"
|
|
||||||
endfor
|
|
||||||
" call Decho("--- end dependency checking loop --- foundscript=".foundscript)
|
|
||||||
" call Decho(" ")
|
|
||||||
" call Dredir("BUFFER TEST (GetLatestVimScripts 1)","ls!")
|
|
||||||
|
|
||||||
if foundscript == 0
|
|
||||||
setlocal nomod
|
|
||||||
endif
|
|
||||||
|
|
||||||
" --------------------------------------------------------------------
|
|
||||||
" Check on out-of-date scripts using GetLatest/GetLatestVimScripts.dat
|
|
||||||
" --------------------------------------------------------------------
|
|
||||||
" call Decho("begin: checking out-of-date scripts using datafile<".datafile.">")
|
|
||||||
setlocal lz
|
|
||||||
1
|
|
||||||
" /^-----/,$g/^\s*\d/call Decho(getline("."))
|
|
||||||
1
|
|
||||||
/^-----/,$g/^\s*\d/call s:GetOneScript()
|
|
||||||
" call Decho("--- end out-of-date checking --- ")
|
|
||||||
|
|
||||||
" Final report (an echomsg)
|
|
||||||
try
|
|
||||||
silent! ?^-------?
|
|
||||||
catch /^Vim\%((\a\+)\)\=:E114/
|
|
||||||
" call Dret("GetLatestVimScripts : nothing done!")
|
|
||||||
return
|
|
||||||
endtry
|
|
||||||
exe "norm! kz\<CR>"
|
|
||||||
redraw!
|
|
||||||
let s:msg = ""
|
|
||||||
if s:downloads == 1
|
|
||||||
let s:msg = "Downloaded one updated script to <".datadir.">"
|
|
||||||
elseif s:downloads == 2
|
|
||||||
let s:msg= "Downloaded two updated scripts to <".datadir.">"
|
|
||||||
elseif s:downloads > 1
|
|
||||||
let s:msg= "Downloaded ".s:downloads." updated scripts to <".datadir.">"
|
|
||||||
else
|
|
||||||
let s:msg= "Everything was already current"
|
|
||||||
endif
|
|
||||||
if s:downerrors > 0
|
|
||||||
let s:msg= s:msg." (".s:downerrors." downloading errors)"
|
|
||||||
endif
|
|
||||||
echomsg s:msg
|
|
||||||
" save the file
|
|
||||||
if &mod
|
|
||||||
silent! w!
|
|
||||||
endif
|
|
||||||
q
|
|
||||||
|
|
||||||
" restore events and current directory
|
|
||||||
exe "cd ".fnameescape(substitute(origdir,'\','/','ge'))
|
|
||||||
let &ei = eikeep
|
|
||||||
let &hls = hlskeep
|
|
||||||
let &acd = acdkeep
|
|
||||||
setlocal nolz
|
|
||||||
" call Dredir("BUFFER TEST (GetLatestVimScripts 2)","ls!")
|
|
||||||
" call Dret("GetLatestVimScripts : did ".s:downloads." downloads")
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" GetOneScript: (Get Latest Vim Script) this function operates {{{1
|
|
||||||
" on the current line, interpreting two numbers and text as
|
|
||||||
" ScriptID, SourceID, and Filename.
|
|
||||||
" It downloads any scripts that have newer versions from vim.sourceforge.net.
|
|
||||||
fun! s:GetOneScript(...)
|
|
||||||
" call Dfunc("GetOneScript()")
|
|
||||||
|
|
||||||
" set options to allow progress to be shown on screen
|
|
||||||
let rega= @a
|
|
||||||
let t_ti= &t_ti
|
|
||||||
let t_te= &t_te
|
|
||||||
let rs = &rs
|
|
||||||
set t_ti= t_te= nors
|
|
||||||
|
|
||||||
" put current line on top-of-screen and interpret it into
|
|
||||||
" a script identifer : used to obtain webpage
|
|
||||||
" source identifier : used to identify current version
|
|
||||||
" and an associated comment: used to report on what's being considered
|
|
||||||
if a:0 >= 3
|
|
||||||
let scriptid = a:1
|
|
||||||
let srcid = a:2
|
|
||||||
let fname = a:3
|
|
||||||
let cmmnt = ""
|
|
||||||
" call Decho("scriptid<".scriptid.">")
|
|
||||||
" call Decho("srcid <".srcid.">")
|
|
||||||
" call Decho("fname <".fname.">")
|
|
||||||
else
|
|
||||||
let curline = getline(".")
|
|
||||||
if curline =~ '^\s*#'
|
|
||||||
let @a= rega
|
|
||||||
" call Dret("GetOneScript : skipping a pure comment line")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
let parsepat = '^\s*\(\d\+\)\s\+\(\d\+\)\s\+\(.\{-}\)\(\s*#.*\)\=$'
|
|
||||||
try
|
|
||||||
let scriptid = substitute(curline,parsepat,'\1','e')
|
|
||||||
catch /^Vim\%((\a\+)\)\=:E486/
|
|
||||||
let scriptid= 0
|
|
||||||
endtry
|
|
||||||
try
|
|
||||||
let srcid = substitute(curline,parsepat,'\2','e')
|
|
||||||
catch /^Vim\%((\a\+)\)\=:E486/
|
|
||||||
let srcid= 0
|
|
||||||
endtry
|
|
||||||
try
|
|
||||||
let fname= substitute(curline,parsepat,'\3','e')
|
|
||||||
catch /^Vim\%((\a\+)\)\=:E486/
|
|
||||||
let fname= ""
|
|
||||||
endtry
|
|
||||||
try
|
|
||||||
let cmmnt= substitute(curline,parsepat,'\4','e')
|
|
||||||
catch /^Vim\%((\a\+)\)\=:E486/
|
|
||||||
let cmmnt= ""
|
|
||||||
endtry
|
|
||||||
" call Decho("curline <".curline.">")
|
|
||||||
" call Decho("parsepat<".parsepat.">")
|
|
||||||
" call Decho("scriptid<".scriptid.">")
|
|
||||||
" call Decho("srcid <".srcid.">")
|
|
||||||
" call Decho("fname <".fname.">")
|
|
||||||
endif
|
|
||||||
|
|
||||||
" plugin author protection from downloading his/her own scripts atop their latest work
|
|
||||||
if scriptid == 0 || srcid == 0
|
|
||||||
" When looking for :AutoInstall: lines, skip scripts that have 0 0 scriptname
|
|
||||||
let @a= rega
|
|
||||||
" call Dret("GetOneScript : skipping a scriptid==srcid==0 line")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
let doautoinstall= 0
|
|
||||||
if fname =~ ":AutoInstall:"
|
|
||||||
" call Decho("case AutoInstall: fname<".fname.">")
|
|
||||||
let aicmmnt= substitute(fname,'\s\+:AutoInstall:\s\+',' ','')
|
|
||||||
" call Decho("aicmmnt<".aicmmnt."> s:autoinstall=".s:autoinstall)
|
|
||||||
if s:autoinstall != ""
|
|
||||||
let doautoinstall = g:GetLatestVimScripts_allowautoinstall
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let aicmmnt= fname
|
|
||||||
endif
|
|
||||||
" call Decho("aicmmnt<".aicmmnt.">: doautoinstall=".doautoinstall)
|
|
||||||
|
|
||||||
exe "norm z\<CR>"
|
|
||||||
redraw!
|
|
||||||
" call Decho('considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid)
|
|
||||||
echo 'considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid
|
|
||||||
|
|
||||||
" grab a copy of the plugin's vim.sourceforge.net webpage
|
|
||||||
let scriptaddr = 'http://vim.sourceforge.net/script.php?script_id='.scriptid
|
|
||||||
let tmpfile = tempname()
|
|
||||||
let v:errmsg = ""
|
|
||||||
|
|
||||||
" make up to three tries at downloading the description
|
|
||||||
let itry= 1
|
|
||||||
while itry <= 3
|
|
||||||
" call Decho(".try#".itry." to download description of <".aicmmnt."> with addr=".scriptaddr)
|
|
||||||
if has("win32") || has("win16") || has("win95")
|
|
||||||
" call Decho(".new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)."|bw!")
|
|
||||||
new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)|bw!
|
|
||||||
else
|
|
||||||
" call Decho(".exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr))
|
|
||||||
exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr)
|
|
||||||
endif
|
|
||||||
if itry == 1
|
|
||||||
exe "silent vsplit ".fnameescape(tmpfile)
|
|
||||||
else
|
|
||||||
silent! e %
|
|
||||||
endif
|
|
||||||
setlocal bh=wipe
|
|
||||||
|
|
||||||
" find the latest source-id in the plugin's webpage
|
|
||||||
silent! 1
|
|
||||||
let findpkg= search('Click on the package to download','W')
|
|
||||||
if findpkg > 0
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
let itry= itry + 1
|
|
||||||
endwhile
|
|
||||||
" call Decho(" --- end downloading tries while loop --- itry=".itry)
|
|
||||||
|
|
||||||
" testing: did finding "Click on the package..." fail?
|
|
||||||
if findpkg == 0 || itry >= 4
|
|
||||||
silent q!
|
|
||||||
call delete(tmpfile)
|
|
||||||
" restore options
|
|
||||||
let &t_ti = t_ti
|
|
||||||
let &t_te = t_te
|
|
||||||
let &rs = rs
|
|
||||||
let s:downerrors = s:downerrors + 1
|
|
||||||
" call Decho("***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">")
|
|
||||||
echomsg "***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">"
|
|
||||||
" call Dret("GetOneScript : srch for /Click on the package/ failed")
|
|
||||||
let @a= rega
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
" call Decho('found "Click on the package to download"')
|
|
||||||
|
|
||||||
let findsrcid= search('src_id=','W')
|
|
||||||
if findsrcid == 0
|
|
||||||
silent q!
|
|
||||||
call delete(tmpfile)
|
|
||||||
" restore options
|
|
||||||
let &t_ti = t_ti
|
|
||||||
let &t_te = t_te
|
|
||||||
let &rs = rs
|
|
||||||
let s:downerrors = s:downerrors + 1
|
|
||||||
" call Decho("***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">")
|
|
||||||
echomsg "***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">"
|
|
||||||
let @a= rega
|
|
||||||
" call Dret("GetOneScript : srch for /src_id/ failed")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
" call Decho('found "src_id=" in description page')
|
|
||||||
|
|
||||||
let srcidpat = '^\s*<td class.*src_id=\(\d\+\)">\([^<]\+\)<.*$'
|
|
||||||
let latestsrcid= substitute(getline("."),srcidpat,'\1','')
|
|
||||||
let sname = substitute(getline("."),srcidpat,'\2','') " script name actually downloaded
|
|
||||||
" call Decho("srcidpat<".srcidpat."> latestsrcid<".latestsrcid."> sname<".sname.">")
|
|
||||||
silent q!
|
|
||||||
call delete(tmpfile)
|
|
||||||
|
|
||||||
" convert the strings-of-numbers into numbers
|
|
||||||
let srcid = srcid + 0
|
|
||||||
let latestsrcid = latestsrcid + 0
|
|
||||||
" call Decho("srcid=".srcid." latestsrcid=".latestsrcid." sname<".sname.">")
|
|
||||||
|
|
||||||
" has the plugin's most-recent srcid increased, which indicates that it has been updated
|
|
||||||
if latestsrcid > srcid
|
|
||||||
" call Decho("[latestsrcid=".latestsrcid."] <= [srcid=".srcid."]: need to update <".sname.">")
|
|
||||||
|
|
||||||
let s:downloads= s:downloads + 1
|
|
||||||
if sname == bufname("%")
|
|
||||||
" GetLatestVimScript has to be careful about downloading itself
|
|
||||||
let sname= "NEW_".sname
|
|
||||||
endif
|
|
||||||
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
" the plugin has been updated since we last obtained it, so download a new copy
|
|
||||||
" -----------------------------------------------------------------------------
|
|
||||||
" call Decho(".downloading new <".sname.">")
|
|
||||||
echomsg ".downloading new <".sname.">"
|
|
||||||
if has("win32") || has("win16") || has("win95")
|
|
||||||
" call Decho(".new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id='.latestsrcid)."|q")
|
|
||||||
new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id='.latestsrcid)|q
|
|
||||||
else
|
|
||||||
" call Decho(".exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id='))
|
|
||||||
exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id=').latestsrcid
|
|
||||||
endif
|
|
||||||
|
|
||||||
" --------------------------------------------------------------------------
|
|
||||||
" AutoInstall: only if doautoinstall has been requested by the plugin itself
|
|
||||||
" --------------------------------------------------------------------------
|
|
||||||
" call Decho("checking if plugin requested autoinstall: doautoinstall=".doautoinstall)
|
|
||||||
if doautoinstall
|
|
||||||
" call Decho(" ")
|
|
||||||
" call Decho("Autoinstall: getcwd<".getcwd()."> filereadable(".sname.")=".filereadable(sname))
|
|
||||||
if filereadable(sname)
|
|
||||||
" call Decho("<".sname."> is readable")
|
|
||||||
" call Decho("exe silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall))
|
|
||||||
exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall)
|
|
||||||
let curdir = fnameescape(substitute(getcwd(),'\','/','ge'))
|
|
||||||
let installdir= curdir."/Installed"
|
|
||||||
if !isdirectory(installdir)
|
|
||||||
call mkdir(installdir)
|
|
||||||
endif
|
|
||||||
" call Decho("curdir<".curdir."> installdir<".installdir.">")
|
|
||||||
" call Decho("exe cd ".fnameescape(s:autoinstall))
|
|
||||||
exe "cd ".fnameescape(s:autoinstall)
|
|
||||||
|
|
||||||
" determine target directory for moves
|
|
||||||
let firstdir= substitute(&rtp,',.*$','','')
|
|
||||||
let pname = substitute(sname,'\..*','.vim','')
|
|
||||||
" call Decho("determine tgtdir: is <".firstdir.'/AsNeeded/'.pname." readable?")
|
|
||||||
if filereadable(firstdir.'/AsNeeded/'.pname)
|
|
||||||
let tgtdir= "AsNeeded"
|
|
||||||
else
|
|
||||||
let tgtdir= "plugin"
|
|
||||||
endif
|
|
||||||
" call Decho("tgtdir<".tgtdir."> pname<".pname.">")
|
|
||||||
|
|
||||||
" decompress
|
|
||||||
if sname =~ '\.bz2$'
|
|
||||||
" call Decho("decompress: attempt to bunzip2 ".sname)
|
|
||||||
exe "silent !bunzip2 ".shellescape(sname)
|
|
||||||
let sname= substitute(sname,'\.bz2$','','')
|
|
||||||
" call Decho("decompress: new sname<".sname."> after bunzip2")
|
|
||||||
elseif sname =~ '\.gz$'
|
|
||||||
" call Decho("decompress: attempt to gunzip ".sname)
|
|
||||||
exe "silent !gunzip ".shellescape(sname)
|
|
||||||
let sname= substitute(sname,'\.gz$','','')
|
|
||||||
" call Decho("decompress: new sname<".sname."> after gunzip")
|
|
||||||
elseif sname =~ '\.xz$'
|
|
||||||
" call Decho("decompress: attempt to unxz ".sname)
|
|
||||||
exe "silent !unxz ".shellescape(sname)
|
|
||||||
let sname= substitute(sname,'\.xz$','','')
|
|
||||||
" call Decho("decompress: new sname<".sname."> after unxz")
|
|
||||||
else
|
|
||||||
" call Decho("no decompression needed")
|
|
||||||
endif
|
|
||||||
|
|
||||||
" distribute archive(.zip, .tar, .vba) contents
|
|
||||||
if sname =~ '\.zip$'
|
|
||||||
" call Decho("dearchive: attempt to unzip ".sname)
|
|
||||||
exe "silent !unzip -o ".shellescape(sname)
|
|
||||||
elseif sname =~ '\.tar$'
|
|
||||||
" call Decho("dearchive: attempt to untar ".sname)
|
|
||||||
exe "silent !tar -xvf ".shellescape(sname)
|
|
||||||
elseif sname =~ '\.vba$'
|
|
||||||
" call Decho("dearchive: attempt to handle a vimball: ".sname)
|
|
||||||
silent 1split
|
|
||||||
if exists("g:vimball_home")
|
|
||||||
let oldvimballhome= g:vimball_home
|
|
||||||
endif
|
|
||||||
let g:vimball_home= s:autoinstall
|
|
||||||
exe "silent e ".fnameescape(sname)
|
|
||||||
silent so %
|
|
||||||
silent q
|
|
||||||
if exists("oldvimballhome")
|
|
||||||
let g:vimball_home= oldvimballhome
|
|
||||||
else
|
|
||||||
unlet g:vimball_home
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
" call Decho("no dearchiving needed")
|
|
||||||
endif
|
|
||||||
|
|
||||||
" ---------------------------------------------
|
|
||||||
" move plugin to plugin/ or AsNeeded/ directory
|
|
||||||
" ---------------------------------------------
|
|
||||||
if sname =~ '.vim$'
|
|
||||||
" call Decho("dearchive: attempt to simply move ".sname." to ".tgtdir)
|
|
||||||
exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".tgtdir
|
|
||||||
else
|
|
||||||
" call Decho("dearchive: move <".sname."> to installdir<".installdir.">")
|
|
||||||
exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".installdir
|
|
||||||
endif
|
|
||||||
if tgtdir != "plugin"
|
|
||||||
" call Decho("exe silent !".g:GetLatestVimScripts_mv." plugin/".shellescape(pname)." ".tgtdir)
|
|
||||||
exe "silent !".g:GetLatestVimScripts_mv." plugin/".shellescape(pname)." ".tgtdir
|
|
||||||
endif
|
|
||||||
|
|
||||||
" helptags step
|
|
||||||
let docdir= substitute(&rtp,',.*','','e')."/doc"
|
|
||||||
" call Decho("helptags: docdir<".docdir.">")
|
|
||||||
exe "helptags ".fnameescape(docdir)
|
|
||||||
exe "cd ".fnameescape(curdir)
|
|
||||||
endif
|
|
||||||
if fname !~ ':AutoInstall:'
|
|
||||||
let modline=scriptid." ".latestsrcid." :AutoInstall: ".fname.cmmnt
|
|
||||||
else
|
|
||||||
let modline=scriptid." ".latestsrcid." ".fname.cmmnt
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let modline=scriptid." ".latestsrcid." ".fname.cmmnt
|
|
||||||
endif
|
|
||||||
|
|
||||||
" update the data in the <GetLatestVimScripts.dat> file
|
|
||||||
call setline(line("."),modline)
|
|
||||||
" call Decho("update data in ".expand("%")."#".line(".").": modline<".modline.">")
|
|
||||||
" else " Decho
|
|
||||||
" call Decho("[latestsrcid=".latestsrcid."] <= [srcid=".srcid."], no need to update")
|
|
||||||
endif
|
|
||||||
|
|
||||||
" restore options
|
|
||||||
let &t_ti = t_ti
|
|
||||||
let &t_te = t_te
|
|
||||||
let &rs = rs
|
|
||||||
let @a = rega
|
|
||||||
" call Dredir("BUFFER TEST (GetOneScript)","ls!")
|
|
||||||
|
|
||||||
" call Dret("GetOneScript")
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Restore Options: {{{1
|
|
||||||
let &cpo= s:keepcpo
|
|
||||||
unlet s:keepcpo
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Modelines: {{{1
|
|
||||||
" vim: ts=8 sts=2 fdm=marker nowrap
|
|
|
@ -1,610 +0,0 @@
|
||||||
" Text formatter plugin for Vim text editor
|
|
||||||
"
|
|
||||||
" Version: 2.1
|
|
||||||
" Last Change: 2008-09-13
|
|
||||||
" Maintainer: Teemu Likonen <tlikonen@iki.fi>
|
|
||||||
" License: This file is placed in the public domain.
|
|
||||||
" GetLatestVimScripts: 2324 1 :AutoInstall: TextFormat
|
|
||||||
|
|
||||||
"{{{1 The beginning stuff
|
|
||||||
if &compatible
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let s:save_cpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
" Constant variables(s) {{{1
|
|
||||||
let s:default_width = 80
|
|
||||||
|
|
||||||
function! s:Align_Range_Left(...) range "{{{1
|
|
||||||
" The optional parameter is the left indent. If it is not given we
|
|
||||||
" detect the indent used in the buffer.
|
|
||||||
if a:0 && a:1 >= 0
|
|
||||||
" The parameter was given so we just use that as the left
|
|
||||||
" indent.
|
|
||||||
let l:leading_ws = s:Retab_Indent(a:1)
|
|
||||||
for l:line in range(a:firstline,a:lastline)
|
|
||||||
let l:line_string = getline(l:line)
|
|
||||||
let l:line_replace = s:Align_String_Left(l:line_string)
|
|
||||||
if &formatoptions =~ 'w' && l:line_string =~ '\m\s$'
|
|
||||||
" Preserve trailing whitespace because fo=~w
|
|
||||||
let l:line_replace .= ' '
|
|
||||||
endif
|
|
||||||
if l:line_replace =~ '\m^\s*$'
|
|
||||||
call setline(l:line,'')
|
|
||||||
else
|
|
||||||
call setline(l:line,l:leading_ws.l:line_replace)
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
else
|
|
||||||
" The parameter was not given so we detect each paragraph's
|
|
||||||
" indent.
|
|
||||||
let l:line = a:firstline
|
|
||||||
while l:line <= a:lastline
|
|
||||||
let l:line_string = getline(l:line)
|
|
||||||
if l:line_string =~ '\m^\s*$'
|
|
||||||
" The line is empty or contains only
|
|
||||||
" whitespaces so print empty line and
|
|
||||||
" continue.
|
|
||||||
call setline(l:line,'')
|
|
||||||
let l:line += 1
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Paragraph (or the whole line range) begins here so
|
|
||||||
" get the indent of the first line and print the line.
|
|
||||||
let l:leading_ws = s:Retab_Indent(indent(l:line))
|
|
||||||
let l:line_replace = s:Align_String_Left(l:line_string)
|
|
||||||
if &formatoptions =~ 'w' && l:line_string =~ '\m\s$'
|
|
||||||
let l:line_replace .= ' '
|
|
||||||
endif
|
|
||||||
call setline(l:line,l:leading_ws.l:line_replace)
|
|
||||||
let l:line += 1
|
|
||||||
|
|
||||||
" If fo=~w, does the paragraph end here? If yes,
|
|
||||||
" continue to next round and find a new first line.
|
|
||||||
if &formatoptions =~ 'w' && l:line_string =~ '\m\S$'
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If fo=~2 get the indent of the second line
|
|
||||||
if &formatoptions =~ '2'
|
|
||||||
let l:leading_ws = s:Retab_Indent(indent(l:line))
|
|
||||||
endif
|
|
||||||
|
|
||||||
" This loop will go through all the lines in the
|
|
||||||
" paragraph (or till the a:lastline) - starting from
|
|
||||||
" the second line.
|
|
||||||
while l:line <= a:lastline && getline(l:line) !~ '\m^\s*$'
|
|
||||||
let l:line_string = getline(l:line)
|
|
||||||
let l:line_replace = s:Align_String_Left(l:line_string)
|
|
||||||
if &formatoptions =~ 'w'
|
|
||||||
if l:line_string =~ '\m\s$'
|
|
||||||
call setline(l:line,l:leading_ws.l:line_replace.' ')
|
|
||||||
let l:line += 1
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
call setline(l:line,l:leading_ws.l:line_replace)
|
|
||||||
let l:line += 1
|
|
||||||
" fo=~w and paragraph ends
|
|
||||||
" here so we break the loop.
|
|
||||||
" The next line is new first
|
|
||||||
" line.
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
call setline(l:line,l:leading_ws.l:line_replace)
|
|
||||||
let l:line += 1
|
|
||||||
endif
|
|
||||||
endwhile
|
|
||||||
endwhile
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Align_Range_Right(width) "{{{1
|
|
||||||
let l:line_replace = s:Align_String_Right(getline('.'),a:width)
|
|
||||||
if &formatoptions =~ 'w' && getline('.') =~ '\m\s$'
|
|
||||||
let l:line_replace .= ' '
|
|
||||||
endif
|
|
||||||
if l:line_replace =~ '\m^\s*$'
|
|
||||||
" If line would be full of spaces just print empty line.
|
|
||||||
call setline(line('.'),'')
|
|
||||||
else
|
|
||||||
" Retab leading whitespaces
|
|
||||||
let l:leading_ws = s:Retab_Indent(strlen(substitute(l:line_replace,'\v^( *).*$','\1','')))
|
|
||||||
" Get the rest of the line
|
|
||||||
let l:line_replace = substitute(l:line_replace,'^ *','','')
|
|
||||||
call setline(line('.'),l:leading_ws.l:line_replace)
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Align_Range_Justify(width, ...) range "{{{1
|
|
||||||
" If the optional second argument is given (and is non-zero) each
|
|
||||||
" paragraph's last line and range's last line is left-aligned.
|
|
||||||
if a:0 && a:1
|
|
||||||
let l:paragraph = 1
|
|
||||||
else
|
|
||||||
let l:paragraph = 0
|
|
||||||
endif
|
|
||||||
let l:line = a:firstline
|
|
||||||
while l:line <= a:lastline
|
|
||||||
let l:line_string = getline(l:line)
|
|
||||||
if l:line_string =~ '\m^\s*$'
|
|
||||||
" The line is empty or contains only
|
|
||||||
" whitespaces so print empty line and
|
|
||||||
" continue.
|
|
||||||
call setline(l:line,'')
|
|
||||||
let l:line += 1
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Paragraph (or the whole line range) begins here so
|
|
||||||
" get the indent of the first line and print the line.
|
|
||||||
let l:indent = indent(l:line)
|
|
||||||
let l:width = a:width - l:indent
|
|
||||||
let l:leading_ws = s:Retab_Indent(l:indent)
|
|
||||||
|
|
||||||
if l:paragraph && (l:line == a:lastline || getline(l:line+1) =~ '\m^\s*$' || (&formatoptions =~ 'w' && l:line_string =~ '\m\S$'))
|
|
||||||
let l:line_replace = s:Align_String_Left(l:line_string)
|
|
||||||
else
|
|
||||||
let l:line_replace = s:Align_String_Justify(l:line_string,l:width)
|
|
||||||
endif
|
|
||||||
if &formatoptions =~ 'w' && l:line_string =~ '\m\s$'
|
|
||||||
let l:line_replace .= ' '
|
|
||||||
endif
|
|
||||||
call setline(l:line,l:leading_ws.l:line_replace)
|
|
||||||
let l:line += 1
|
|
||||||
|
|
||||||
" If fo=~w, does the paragraph end here? If yes,
|
|
||||||
" continue to next round and find a new first line.
|
|
||||||
if &formatoptions =~ 'w' && l:line_string =~ '\m\S$'
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If fo=~2 get the indent of the second line
|
|
||||||
if &formatoptions =~ '2'
|
|
||||||
let l:indent = indent(l:line)
|
|
||||||
let l:width = a:width - l:indent
|
|
||||||
let l:leading_ws = s:Retab_Indent(l:indent)
|
|
||||||
endif
|
|
||||||
|
|
||||||
" This loop will go through all the lines in the
|
|
||||||
" paragraph (or till the a:lastline) - starting from
|
|
||||||
" paragraph's second line.
|
|
||||||
while l:line <= a:lastline && getline(l:line) !~ '\m^\s*$'
|
|
||||||
let l:line_string = getline(l:line)
|
|
||||||
if l:paragraph && (l:line == a:lastline || getline(l:line+1) =~ '\m^\s*$' || (&formatoptions =~ 'w' && l:line_string =~ '\m\S$'))
|
|
||||||
let l:line_replace = s:Align_String_Left(l:line_string)
|
|
||||||
else
|
|
||||||
let l:line_replace = s:Align_String_Justify(l:line_string,l:width)
|
|
||||||
endif
|
|
||||||
if &formatoptions =~ 'w'
|
|
||||||
if l:line_string =~ '\m\s$'
|
|
||||||
call setline(l:line,l:leading_ws.l:line_replace.' ')
|
|
||||||
let l:line += 1
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
call setline(l:line,l:leading_ws.l:line_replace)
|
|
||||||
let l:line += 1
|
|
||||||
" fo=~w and paragraph ends
|
|
||||||
" here so we break the loop.
|
|
||||||
" The next line is new first
|
|
||||||
" line.
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
call setline(l:line,l:leading_ws.l:line_replace)
|
|
||||||
let l:line += 1
|
|
||||||
endif
|
|
||||||
endwhile
|
|
||||||
endwhile
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Align_Range_Center(width) "{{{1
|
|
||||||
let l:line_replace = s:Truncate_Spaces(getline('.'))
|
|
||||||
let l:line_replace = s:Add_Double_Spacing(l:line_replace)
|
|
||||||
if &formatoptions =~ 'w' && getline('.') =~ '\m\s$'
|
|
||||||
let l:line_replace .= ' '
|
|
||||||
endif
|
|
||||||
call setline(line('.'),l:line_replace)
|
|
||||||
execute '.center '.a:width
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Align_String_Left(string) "{{{1
|
|
||||||
let l:string_replace = s:Truncate_Spaces(a:string)
|
|
||||||
let l:string_replace = s:Add_Double_Spacing(l:string_replace)
|
|
||||||
return l:string_replace
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Align_String_Right(string, width) "{{{1
|
|
||||||
let l:string_replace = s:Truncate_Spaces(a:string)
|
|
||||||
let l:string_replace = s:Add_Double_Spacing(l:string_replace)
|
|
||||||
let l:string_width = s:String_Width(l:string_replace)
|
|
||||||
let l:more_spaces = a:width-l:string_width
|
|
||||||
return repeat(' ',l:more_spaces).l:string_replace
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Align_String_Justify(string, width) "{{{1
|
|
||||||
let l:string = s:Truncate_Spaces(a:string)
|
|
||||||
" If the parameter string is empty we can just return a line full of
|
|
||||||
" spaces. No need to go further.
|
|
||||||
if l:string =~ '\m^ *$'
|
|
||||||
return repeat(' ',a:width)
|
|
||||||
endif
|
|
||||||
if s:String_Width(s:Add_Double_Spacing(l:string)) >= a:width
|
|
||||||
" The original string is longer than width so we can just
|
|
||||||
" return the string. No need to go further.
|
|
||||||
return s:Add_Double_Spacing(l:string)
|
|
||||||
endif
|
|
||||||
let l:string_width = s:String_Width(l:string)
|
|
||||||
|
|
||||||
" This many extra spaces we need.
|
|
||||||
let l:more_spaces = a:width-l:string_width
|
|
||||||
" Convert the string to a list of words.
|
|
||||||
let l:word_list = split(l:string)
|
|
||||||
" This is the amount of spaces available in the original string (word
|
|
||||||
" count minus one).
|
|
||||||
let l:string_spaces = len(l:word_list)-1
|
|
||||||
" If there are no spaces there is only one word. We can just return
|
|
||||||
" the string with padded spaces. No need to go further.
|
|
||||||
if l:string_spaces == 0
|
|
||||||
return l:string.repeat(' ',l:more_spaces)
|
|
||||||
endif
|
|
||||||
" Ok, there are more than one word in the string so we get to do some
|
|
||||||
" real work...
|
|
||||||
|
|
||||||
" Make a list of which each item represent a space available in the
|
|
||||||
" string. The value means how many spaces there are. At the moment set
|
|
||||||
" every list item to one: [1, 1, 1, 1, ...]
|
|
||||||
let l:space_list = []
|
|
||||||
for l:item in range(l:string_spaces)
|
|
||||||
let l:space_list += [1]
|
|
||||||
endfor
|
|
||||||
|
|
||||||
" Repeat while there are no more need to add any spaces.
|
|
||||||
while l:more_spaces > 0
|
|
||||||
if l:more_spaces >= l:string_spaces
|
|
||||||
" More extra spaces are needed than there are spaces
|
|
||||||
" available in the string so we add one more space
|
|
||||||
" after every word (add 1 to items of space list).
|
|
||||||
for l:i in range(l:string_spaces)
|
|
||||||
let l:space_list[l:i] += 1
|
|
||||||
endfor
|
|
||||||
let l:more_spaces -= l:string_spaces
|
|
||||||
" And then another round... and a check if more spaces
|
|
||||||
" are needed.
|
|
||||||
else " l:more_spaces < l:string_spaces
|
|
||||||
" This list tells where .?! characters are.
|
|
||||||
let l:space_sentence_full = []
|
|
||||||
" This list tells where ,:; characters are.
|
|
||||||
let l:space_sentence_semi = []
|
|
||||||
" And this is for the rest of spaces.
|
|
||||||
let l:space_other = []
|
|
||||||
" Now, find those things:
|
|
||||||
for l:i in range(l:string_spaces)
|
|
||||||
if l:word_list[l:i] =~ '\m\S[.?!]$'
|
|
||||||
let l:space_sentence_full += [l:i]
|
|
||||||
elseif l:word_list[l:i] =~ '\m\S[,:;]$'
|
|
||||||
let l:space_sentence_semi += [l:i]
|
|
||||||
else
|
|
||||||
let l:space_other += [l:i]
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
" First distribute spaces after .?!
|
|
||||||
if l:more_spaces >= len(l:space_sentence_full)
|
|
||||||
" If we need more extra spaces than there are
|
|
||||||
" .?! spaces, just add one after every item.
|
|
||||||
for l:i in l:space_sentence_full
|
|
||||||
let l:space_list[l:i] += 1
|
|
||||||
endfor
|
|
||||||
let l:more_spaces -= len(l:space_sentence_full)
|
|
||||||
if l:more_spaces == 0 | break | endif
|
|
||||||
else
|
|
||||||
" Distribute the rest of spaces evenly and
|
|
||||||
" break the loop. All the spaces have been
|
|
||||||
" added.
|
|
||||||
for l:i in s:Distributed_Selection(l:space_sentence_full,l:more_spaces)
|
|
||||||
let l:space_list[l:i] +=1
|
|
||||||
endfor
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Then distribute spaces after ,:;
|
|
||||||
if l:more_spaces >= len(l:space_sentence_semi)
|
|
||||||
" If we need more extra spaces than there are
|
|
||||||
" ,:; spaces available, just add one after
|
|
||||||
" every item.
|
|
||||||
for l:i in l:space_sentence_semi
|
|
||||||
let l:space_list[l:i] += 1
|
|
||||||
endfor
|
|
||||||
let l:more_spaces -= len(l:space_sentence_semi)
|
|
||||||
if l:more_spaces == 0 | break | endif
|
|
||||||
else
|
|
||||||
" Distribute the rest of spaces evenly and
|
|
||||||
" break the loop. All the spaces have been
|
|
||||||
" added.
|
|
||||||
for l:i in s:Distributed_Selection(l:space_sentence_semi,l:more_spaces)
|
|
||||||
let l:space_list[l:i] +=1
|
|
||||||
endfor
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Finally distribute spaces to other available
|
|
||||||
" positions and exit the loop.
|
|
||||||
for l:i in s:Distributed_Selection(l:space_other,l:more_spaces)
|
|
||||||
let l:space_list[l:i] +=1
|
|
||||||
endfor
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endwhile
|
|
||||||
|
|
||||||
" Now we now where all the extra spaces will go. We have to construct
|
|
||||||
" the string again.
|
|
||||||
let l:string = ''
|
|
||||||
for l:item in range(l:string_spaces)
|
|
||||||
let l:string .= l:word_list[l:item].repeat(' ',l:space_list[l:item])
|
|
||||||
endfor
|
|
||||||
" Add the last word to the end and return the string.
|
|
||||||
return l:string.l:word_list[-1]
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Truncate_Spaces(string) "{{{1
|
|
||||||
let l:string = substitute(a:string,'\v\s+',' ','g')
|
|
||||||
let l:string = substitute(l:string,'\m^\s*','','')
|
|
||||||
let l:string = substitute(l:string,'\m\s*$','','')
|
|
||||||
return l:string
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:String_Width(string) "{{{1
|
|
||||||
" This counts the string width in characters. Combining diacritical
|
|
||||||
" marks do not count so the base character with all the combined
|
|
||||||
" diacritics is just one character (which is good for our purposes).
|
|
||||||
" Double-wide characters will not get double width so unfortunately
|
|
||||||
" they don't work in our algorithm.
|
|
||||||
return strlen(substitute(a:string,'\m.','x','g'))
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Add_Double_Spacing(string) "{{{1
|
|
||||||
if &joinspaces
|
|
||||||
return substitute(a:string,'\m\S[.?!] ','& ','g')
|
|
||||||
else
|
|
||||||
return a:string
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Distributed_Selection(list, pick) "{{{1
|
|
||||||
" 'list' is a list-type variable [ item1, item2, ... ]
|
|
||||||
" 'pick' is a number how many of the list's items we want to choose
|
|
||||||
"
|
|
||||||
" This function returns a list which has 'pick' number of items from
|
|
||||||
" the original list. Items are chosen in distributed manner. For
|
|
||||||
" example, if 'pick' is 1 then the algorithm chooses an item near the
|
|
||||||
" center of the 'list'. If 'pick' is 2 then the first one is about 1/3
|
|
||||||
" from the beginning and the another one about 2/3 from the beginning.
|
|
||||||
|
|
||||||
" l:pick_list is a list of 0's and 1's and its length will be the
|
|
||||||
" same as original list's. Number 1 means that this list item will be
|
|
||||||
" picked and 0 means that the item will be dropped. Finally
|
|
||||||
" l:pick_list could look like this: [0, 1, 0, 1, 0]
|
|
||||||
" (i.e., two items evenly picked from a list of five items)
|
|
||||||
let l:pick_list = []
|
|
||||||
|
|
||||||
" First pick items evenly from the beginning of the list. This also
|
|
||||||
" actually constructs the list.
|
|
||||||
let l:div1 = len(a:list) / a:pick
|
|
||||||
let l:mod1 = len(a:list) % a:pick
|
|
||||||
for l:i in range(len(a:list)-l:mod1)
|
|
||||||
if !eval(l:i%l:div1)
|
|
||||||
let l:pick_list += [1]
|
|
||||||
else
|
|
||||||
let l:pick_list += [0]
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
if l:mod1 > 0
|
|
||||||
" The division wasn't even so we get the remaining items and
|
|
||||||
" distribute them evenly again to the list.
|
|
||||||
let l:div2 = len(l:pick_list) / l:mod1
|
|
||||||
let l:mod2 = len(l:pick_list) % l:mod1
|
|
||||||
for l:i in range(len(l:pick_list)-l:mod2)
|
|
||||||
if !eval(l:i%l:div2)
|
|
||||||
call insert(l:pick_list,0,l:i)
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
endif
|
|
||||||
|
|
||||||
" There may be very different number of zeros in the beginning and the
|
|
||||||
" end of the list. We count them.
|
|
||||||
let l:zeros_begin = 0
|
|
||||||
for l:i in l:pick_list
|
|
||||||
if l:i == 0
|
|
||||||
let l:zeros_begin += 1
|
|
||||||
else
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
let l:zeros_end = 0
|
|
||||||
for l:i in reverse(copy(l:pick_list))
|
|
||||||
if l:i == 0
|
|
||||||
let l:zeros_end += 1
|
|
||||||
else
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
" Then we remove them.
|
|
||||||
if l:zeros_end
|
|
||||||
" Remove "0" items from the end. We need to remove them first
|
|
||||||
" from the end because list items' index number will change
|
|
||||||
" when items are removed from the beginning. Then it would be
|
|
||||||
" more difficult to remove trailing zeros.
|
|
||||||
call remove(l:pick_list,len(l:pick_list)-l:zeros_end,-1)
|
|
||||||
endif
|
|
||||||
if l:zeros_begin
|
|
||||||
" Remove zero items from the beginning.
|
|
||||||
call remove(l:pick_list,0,l:zeros_begin-1)
|
|
||||||
endif
|
|
||||||
let l:zeros_both = l:zeros_begin + l:zeros_end
|
|
||||||
|
|
||||||
" Put even amount of zeros to beginning and end
|
|
||||||
for l:i in range(l:zeros_both/2)
|
|
||||||
call insert(l:pick_list,0,0)
|
|
||||||
endfor
|
|
||||||
for l:i in range((l:zeros_both/2)+(l:zeros_both%2))
|
|
||||||
call add(l:pick_list,0)
|
|
||||||
endfor
|
|
||||||
|
|
||||||
" Finally construct and return a new list which has only the items we
|
|
||||||
" have chosen.
|
|
||||||
let l:new_list = []
|
|
||||||
for l:i in range(len(l:pick_list))
|
|
||||||
if l:pick_list[l:i] == 1
|
|
||||||
let l:new_list += [a:list[l:i]]
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
return l:new_list
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Retab_Indent(column) "{{{1
|
|
||||||
" column = the left indent column starting from 0 Function returns
|
|
||||||
" a string of whitespaces, a mixture of tabs and spaces depending on
|
|
||||||
" the 'expandtab' and 'tabstop' options.
|
|
||||||
if &expandtab
|
|
||||||
" Only spaces
|
|
||||||
return repeat(' ',a:column)
|
|
||||||
else
|
|
||||||
" Tabs and spaces
|
|
||||||
let l:tabs = a:column / &tabstop
|
|
||||||
let l:spaces = a:column % &tabstop
|
|
||||||
return repeat("\<Tab>",l:tabs).repeat(' ',l:spaces)
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:Reformat_Range(...) range "{{{1
|
|
||||||
if a:0 == 2
|
|
||||||
let l:first = a:1
|
|
||||||
let l:last = a:2
|
|
||||||
else
|
|
||||||
let l:first = a:firstline
|
|
||||||
let l:last = a:lastline
|
|
||||||
endif
|
|
||||||
let l:autoindent = &autoindent
|
|
||||||
setlocal autoindent
|
|
||||||
execute l:first
|
|
||||||
normal! 0
|
|
||||||
execute 'normal! V'.l:last.'G$gw'
|
|
||||||
let &l:autoindent = l:autoindent
|
|
||||||
" The formatting may change the last line of the range so we return
|
|
||||||
" it.
|
|
||||||
return line("'>")
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! textformat#Visual_Align_Left() range "{{{1
|
|
||||||
execute a:firstline.','.a:lastline.'call s:Align_Range_Left()'
|
|
||||||
call s:Reformat_Range(a:firstline,a:lastline)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! textformat#Visual_Align_Right() range "{{{1
|
|
||||||
let l:width = &textwidth
|
|
||||||
if l:width == 0 | let l:width = s:default_width | endif
|
|
||||||
|
|
||||||
execute a:firstline.','.a:lastline.'call s:Align_Range_Right('.l:width.')'
|
|
||||||
normal! '>$
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! textformat#Visual_Align_Justify() range "{{{1
|
|
||||||
let l:width = &textwidth
|
|
||||||
if l:width == 0 | let l:width = s:default_width | endif
|
|
||||||
|
|
||||||
execute a:firstline.','.a:lastline.'call s:Align_Range_Left()'
|
|
||||||
|
|
||||||
let l:last = s:Reformat_Range(a:firstline,a:lastline)
|
|
||||||
let l:pos = getpos('.')
|
|
||||||
execute a:firstline.','.l:last.'call s:Align_Range_Justify('.l:width.',1)'
|
|
||||||
call setpos('.',l:pos)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! textformat#Visual_Align_Center() range "{{{1
|
|
||||||
let l:width = &textwidth
|
|
||||||
if l:width == 0 | let l:width = s:default_width | endif
|
|
||||||
|
|
||||||
execute a:firstline.','.a:lastline.'call s:Align_Range_Center('.l:width.')'
|
|
||||||
normal! '>$
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! textformat#Quick_Align_Left() "{{{1
|
|
||||||
let l:autoindent = &autoindent
|
|
||||||
setlocal autoindent
|
|
||||||
let l:pos = getpos('.')
|
|
||||||
silent normal! vip:call s:Align_Range_Left()
|
|
||||||
call setpos('.',l:pos)
|
|
||||||
silent normal! gwip
|
|
||||||
let &l:autoindent = l:autoindent
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! textformat#Quick_Align_Right() "{{{1
|
|
||||||
let l:width = &textwidth
|
|
||||||
if l:width == 0 | let l:width = s:default_width | endif
|
|
||||||
let l:pos = getpos('.')
|
|
||||||
silent normal! vip:call s:Align_Range_Right(l:width)
|
|
||||||
call setpos('.',l:pos)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! textformat#Quick_Align_Justify() "{{{1
|
|
||||||
let l:width = &textwidth
|
|
||||||
if l:width == 0 | let l:width = s:default_width | endif
|
|
||||||
let l:autoindent = &autoindent
|
|
||||||
setlocal autoindent
|
|
||||||
let l:pos = getpos('.')
|
|
||||||
silent normal! vip:call s:Align_Range_Left()
|
|
||||||
call setpos('.',l:pos)
|
|
||||||
silent normal! gwip
|
|
||||||
let l:pos = getpos('.')
|
|
||||||
silent normal! vip:call s:Align_Range_Justify(l:width,1)
|
|
||||||
call setpos('.',l:pos)
|
|
||||||
let &l:autoindent = l:autoindent
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! textformat#Quick_Align_Center() "{{{1
|
|
||||||
let l:width = &textwidth
|
|
||||||
if l:width == 0 | let l:width = s:default_width | endif
|
|
||||||
let l:pos = getpos('.')
|
|
||||||
silent normal! vip:call s:Align_Range_Center(l:width)
|
|
||||||
call setpos('.',l:pos)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! textformat#Align_Command(align, ...) range "{{{1
|
|
||||||
" For left align the optional parameter a:1 is [indent]. For others
|
|
||||||
" it's [width].
|
|
||||||
let l:pos = getpos('.')
|
|
||||||
if a:align ==? 'left'
|
|
||||||
if a:0 && a:1 >= 0
|
|
||||||
execute a:firstline.','.a:lastline.'call s:Align_Range_Left('.a:1.')'
|
|
||||||
else
|
|
||||||
execute a:firstline.','.a:lastline.'call s:Align_Range_Left()'
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
if a:0 && a:1 > 0
|
|
||||||
let l:width = a:1
|
|
||||||
elseif &textwidth
|
|
||||||
let l:width = &textwidth
|
|
||||||
else
|
|
||||||
let l:width = s:default_width
|
|
||||||
endif
|
|
||||||
|
|
||||||
if a:align ==? 'right'
|
|
||||||
execute a:firstline.','.a:lastline.'call s:Align_Range_Right('.l:width.')'
|
|
||||||
elseif a:align ==? 'justify'
|
|
||||||
execute a:firstline.','.a:lastline.'call s:Align_Range_Justify('.l:width.')'
|
|
||||||
elseif a:align ==? 'center'
|
|
||||||
execute a:firstline.','.a:lastline.'call s:Align_Range_Center('.l:width.')'
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
call setpos('.',l:pos)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
"{{{1 The ending stuff
|
|
||||||
let &cpo = s:save_cpo
|
|
||||||
|
|
||||||
" vim600: fdm=marker
|
|
|
@ -1,253 +0,0 @@
|
||||||
" AlignMapsPlugin: Alignment maps based upon <Align.vim> and <AlignMaps.vim>
|
|
||||||
" Maintainer: Dr. Charles E. Campbell. <NdrOchipS@PcampbellAfamily.Mbiz>
|
|
||||||
" Date: Jan 07, 2013
|
|
||||||
"
|
|
||||||
" NOTE: the code herein needs vim 7.0 or later
|
|
||||||
" Copyright: Copyright (C) 1999-2012 Charles E. Campbell {{{1
|
|
||||||
" Permission is hereby granted to use and distribute this code,
|
|
||||||
" with or without modifications, provided that this copyright
|
|
||||||
" notice is copied with it. Like anything else that's free,
|
|
||||||
" AlignMaps.vim is provided *as is* and comes with no warranty
|
|
||||||
" of any kind, either expressed or implied. By using this
|
|
||||||
" plugin, you agree that in no event will the copyright
|
|
||||||
" holder be liable for any damages resulting from the use
|
|
||||||
" of this software.
|
|
||||||
" Romans 1:20 For the invisible things of Him since the creation of the {{{1
|
|
||||||
" world are clearly seen, being perceived through the things that are
|
|
||||||
" made, even His everlasting power and divinity; that they may be
|
|
||||||
" without excuse.
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Usage: {{{1
|
|
||||||
" Use 'a to mark beginning of to-be-aligned region, Alternative: use V
|
|
||||||
" move cursor to end of region, and execute map. (linewise visual mode) to
|
|
||||||
" The maps also set up marks 'y and 'z, and retain mark region, execute same
|
|
||||||
" 'a at the beginning of region. map. Uses 'a, 'y, and 'z.
|
|
||||||
"
|
|
||||||
" The start/end wrappers save and restore marks 'y and 'z.
|
|
||||||
"
|
|
||||||
" Although the comments indicate the maps use a leading backslash,
|
|
||||||
" actually they use <Leader> (:he mapleader), so the user can
|
|
||||||
" specify that the maps start how he or she prefers.
|
|
||||||
"
|
|
||||||
" Note: these maps all use <Align.vim>.
|
|
||||||
"
|
|
||||||
" Load Once: {{{1
|
|
||||||
if &cp || exists("g:loaded_AlignMapsPlugin")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let s:keepcpo = &cpo
|
|
||||||
let g:loaded_AlignMapsPlugin = "v43"
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
" =====================================================================
|
|
||||||
" Public Interface: {{{1
|
|
||||||
com! AlignMapsClean :call AlignMaps#AlignMapsClean()
|
|
||||||
|
|
||||||
" =====================================================================
|
|
||||||
" Maps: {{{1
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" WS: wrapper start map (internal) {{{2
|
|
||||||
" Produces a blank line above and below, marks with 'y and 'z
|
|
||||||
if !hasmapto('<Plug>WrapperStart')
|
|
||||||
map <unique> <SID>WS <Plug>AlignMapsWrapperStart
|
|
||||||
endif
|
|
||||||
nnoremap <silent> <script> <Plug>AlignMapsWrapperStart :set lz<CR>:call AlignMaps#WrapperStart(0)<CR>
|
|
||||||
vnoremap <silent> <script> <Plug>AlignMapsWrapperStart :<c-u>set lz<CR>:call AlignMaps#WrapperStart(1)<CR>
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" WE: wrapper end (internal) {{{2
|
|
||||||
" Removes guard lines, restores marks y and z, and restores search pattern
|
|
||||||
if !hasmapto('<Plug>WrapperEnd')
|
|
||||||
nmap <unique> <SID>WE <Plug>AlignMapsWrapperEnd
|
|
||||||
endif
|
|
||||||
nnoremap <silent> <script> <Plug>AlignMapsWrapperEnd :call AlignMaps#WrapperEnd()<CR>:set nolz<CR>
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Complex C-code alignment maps: {{{2
|
|
||||||
if !hasmapto('<Plug>AM_a?') |call AlignMaps#MakeMap("a?")|endif
|
|
||||||
if !hasmapto('<Plug>AM_a,') |call AlignMaps#MakeMap("a,")|endif
|
|
||||||
if !hasmapto('<Plug>AM_a<') |call AlignMaps#MakeMap("a<")|endif
|
|
||||||
if !hasmapto('<Plug>AM_a=') |call AlignMaps#MakeMap("a=")|endif
|
|
||||||
if !hasmapto('<Plug>AM_a(') |call AlignMaps#MakeMap("a(")|endif
|
|
||||||
if !hasmapto('<Plug>AM_abox') |call AlignMaps#MakeMap("abox")|endif
|
|
||||||
if !hasmapto('<Plug>AM_acom') |call AlignMaps#MakeMap("acom")|endif
|
|
||||||
if !hasmapto('<Plug>AM_adcom')|call AlignMaps#MakeMap("adcom")|endif
|
|
||||||
if !hasmapto('<Plug>AM_aocom')|call AlignMaps#MakeMap("aocom")|endif
|
|
||||||
if !hasmapto('<Plug>AM_ascom')|call AlignMaps#MakeMap("ascom")|endif
|
|
||||||
if !hasmapto('<Plug>AM_adec') |call AlignMaps#MakeMap("adec")|endif
|
|
||||||
if !hasmapto('<Plug>AM_adef') |call AlignMaps#MakeMap("adef")|endif
|
|
||||||
if !hasmapto('<Plug>AM_afnc') |call AlignMaps#MakeMap("afnc")|endif
|
|
||||||
if !hasmapto('<Plug>AM_afnc') |call AlignMaps#MakeMap("afnc")|endif
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Number alignment maps: {{{2
|
|
||||||
if !hasmapto('<Plug>AM_aunum')|call AlignMaps#MakeMap("aunum")|endif
|
|
||||||
if !hasmapto('<Plug>AM_aenum')|call AlignMaps#MakeMap("aenum")|endif
|
|
||||||
if exists("g:alignmaps_euronumber") && !exists("g:alignmaps_usanumber")
|
|
||||||
if !hasmapto('<Plug>AM_anum')|call AlignMaps#MakeMap("anum")|endif
|
|
||||||
else
|
|
||||||
if !hasmapto('<Plug>AM_anum')|call AlignMaps#MakeMap("anum")|endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Plug maps: (the real thing) {{{2
|
|
||||||
nnoremap <silent> <script> <Plug>AM_a? <SID>WS:AlignCtrl mIp1P1lC ? : : : : <CR>:'a,.Align<CR>:'a,'z-1s/\(\s\+\)? /?\1/e<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_a, <SID>WS:'y,'zs/\(\S\)\s\+/\1 /ge<CR>'yjma'zk:call AlignMaps#CharJoiner(",")<cr>:silent 'y,'zg/,/call AlignMaps#FixMultiDec()<CR>'z:exe "norm \<Plug>AM_adec"<cr><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_a< <SID>WS:AlignCtrl mIp1P1=l << >><CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_a( <SID>WS:AlignCtrl mIp0P1=l<CR>:'a,.Align [(,]<CR>:sil 'y+1,'z-1s/\(\s\+\),/,\1/ge<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_a= <SID>WS:AlignCtrl mIp1P1=l<CR>:AlignCtrl g :=<CR>:'a,'zAlign :\==<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_abox <SID>WS:let g:alignmaps_iws=substitute(getline("'a"),'^\(\s*\).*$','\1','e')<CR>:'a,'z-1s/^\s\+//e<CR>:'a,'z-1s/^.*$/@&@/<CR>:AlignCtrl m=p01P0w @<CR>:'a,.Align<CR>:'a,'z-1s/@/ * /<CR>:'a,'z-1s/@$/*/<CR>'aYP:s/./*/g<CR>0r/'zkYp:s/./*/g<CR>0r A/<Esc>:exe "'a-1,'z-1s/^/".g:alignmaps_iws."/e"<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_acom <SID>WS:'a,.s/\/[*/]\/\=/@&@/e<CR>:'a,.s/\*\//@&/e<CR>:'y,'zs/^\( *\) @/\1@/e<CR>'zk:call AlignMaps#StdAlign(2)<CR>:'y,'zs/^\(\s*\) @/\1/e<CR>:'y,'zs/ @//eg<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_adcom <SID>WS:'a,.v/^\s*\/[/*]/s/\/[*/]\*\=/@&@/e<CR>:'a,.v/^\s*\/[/*]/s/\*\//@&/e<CR>:'y,'zv/^\s*\/[/*]/s/^\( *\) @/\1@/e<CR>'zk:call AlignMaps#StdAlign(3)<cr>:'y,'zv/^\s*\/[/*]/s/^\(\s*\) @/\1/e<CR>:'y,'zs/ @//eg<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_aocom <SID>WS:AlignPush<CR>:AlignCtrl g /[*/]<CR>:exe "norm \<Plug>AM_acom"<cr>:AlignPop<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_ascom <SID>WS:'a,.s/\/[*/]/@&@/e<CR>:'a,.s/\*\//@&/e<CR>:silent! 'a,.g/^\s*@\/[*/]/s/@//ge<CR>:AlignCtrl v ^\s*\/[*/]<CR>:AlignCtrl g \/[*/]<CR>'zk:call AlignMaps#StdAlign(2)<cr>:'y,'zs/^\(\s*\) @/\1/e<CR>:'y,'zs/ @//eg<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_adec <SID>WS:'a,'zs/\([^ \t/(]\)\([*&]\)/\1 \2/e<CR>:'y,'zv/^\//s/\([^ \t]\)\s\+/\1 /ge<CR>:'y,'zv/^\s*[*/]/s/\([^/][*&]\)\s\+/\1/ge<CR>:'y,'zv/^\s*[*/]/s/^\(\s*\%([a-zA-Z_][a-zA-Z_0-9<>:]*\s\+\%([a-zA-Z_*(&]\)\@=\)\+\)\([*(&]*\)\s*\([a-zA-Z0-9_()<>:]\+\)\s*\(\(\[.\{-}]\)*\)\s*\(=\)\=\s*\(.\{-}\)\=\s*;/\1@\2#@\3\4@\6@\7;@/e<CR>:'y,'zv/^\s*[*/]/s/\*\/\s*$/@*\//e<CR>:'y,'zv/^\s*[*/]/s/^\s\+\*/@@@@@* /e<CR>:'y,'zv/^\s*[*/]/s/^@@@@@\*\(.*[^*/]\)$/&@*/e<CR>'yjma'zk:AlignCtrl v ^\s*[*/#]<CR>:call AlignMaps#StdAlign(1)<cr>:'y,'zv/^\s*[*/]/s/@ //ge<CR>:'y,'zv/^\s*[*/]/s/\(\s*\);/;\1/e<CR>:'y,'zv/^#/s/# //e<CR>:'y,'zv/^\s\+[*/#]/s/\([^/*]\)\(\*\+\)\( \+\)/\1\3\2/e<CR>:'y,'zv/^\s\+[*/#]/s/\((\+\)\( \+\)\*/\2\1*/e<CR>:'y,'zv/^\s\+[*/#]/s/^\(\s\+\) \*/\1*/e<CR>:'y,'zv/^\s\+[*/#]/s/[ \t@]*$//e<CR>:'y,'zs/^[*]/ */e<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_adef <SID>WS:AlignPush<CR>:AlignCtrl v ^\s*\(\/\*\<bar>\/\/\)<CR>:'a,.v/^\s*\(\/\*\<bar>\/\/\)/s/^\(\s*\)#\(\s\)*define\s*\(\I[a-zA-Z_0-9(),]*\)\s*\(.\{-}\)\($\<Bar>\/\*\)/#\1\2define @\3@\4@\5/e<CR>:'a,.v/^\s*\(\/\*\<bar>\/\/\)/s/\($\<Bar>\*\/\)/@&/e<CR>'zk:call AlignMaps#StdAlign(1)<cr>'yjma'zk:'a,.v/^\s*\(\/\*\<bar>\/\/\)/s/ @//g<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_afnc :<c-u>set lz<CR>:silent call AlignMaps#Afnc()<CR>:set nolz<CR>
|
|
||||||
nnoremap <silent> <script> <Plug>AM_aunum <SID>WS:'a,'zs/\([-+]\=\d\+\)\([eE][-+]\d\+\)\=/\1#\2/ge<CR>:'a,'zs/\([.eE][-+]\=\d\+\)#/\1/ge<CR>:'a,'zs/#\././ge<CR>:'a,'zs/[-+]\=\%(\d\+\%([.#]\d*\)\=\<bar>[.#]\d\+\)\%([eE][-+]\=\d\+\)\=/@&@/ge<CR>:AlignCtrl Imp0P0r<CR>:'a,'zAlign [@#.]<CR>:'a,'zs/\([.#]\)\(\s\+\)\(\d*\%([eE][-+]\=\d\+\)\=\)@/\1\3\2@/ge<CR>:'a,'zs/@//<CR>:'a,'zs/[#@]/ /ge<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_aenum <SID>WS:'a,'zs/\([-+]\=\d\+\)\([eE][-+]\d\+\)\=/\1#\2/ge<CR>:'a,'zs/\([,eE][-+]\=\d\+\)#/\1/ge<CR>:'a,'zs/#,/,/ge<CR>:'a,'zs/[-+]\=\%(\d\+\%([,#]\d*\)\=\<bar>[,#]\d\+\)\%([eE][-+]\=\d\+\)\=/@&@/ge<CR>:AlignCtrl Imp0P0r<CR>:'a,'zAlign [@#,]<CR>:'a,'zs/\([,#]\)\(\s\+\)\(\d*\%([eE][-+]\=\d\+\)\=\)@/\1\3\2@/ge<CR>:'a,'zs/@//<CR>:'a,'zs/[#@]/ /ge<CR><SID>WE
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" html table alignment {{{2
|
|
||||||
if !hasmapto('<Plug>AM_Htd')|map <unique> <Leader>Htd <Plug>AM_Htd|endif
|
|
||||||
map <silent> <script> <Plug>AM_Htd <SID>WS:'y,'zs%<[tT][rR]><[tT][dD][^>]\{-}>\<Bar></[tT][dD]><[tT][dD][^>]\{-}>\<Bar></[tT][dD]></[tT][rR]>%@&@%g<CR>'yjma'zk:AlignCtrl m=Ilp1P0 @<CR>:'a,.Align<CR>:'y,'zs/ @/@/<CR>:'y,'zs/@ <[tT][rR]>/<[tT][rR]>/ge<CR>:'y,'zs/@//ge<CR><SID>WE
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" character-based right-justified alignment maps {{{2
|
|
||||||
if !hasmapto('<Plug>AM_T|')|call AlignMaps#MakeMap("T|")|endif
|
|
||||||
if !hasmapto('<Plug>AM_T#') |call AlignMaps#MakeMap("T#")|endif
|
|
||||||
if !hasmapto('<Plug>AM_T,') |call AlignMaps#MakeMap("T,")|endif
|
|
||||||
if !hasmapto('<Plug>AM_Ts,') |call AlignMaps#MakeMap("Ts,")|endif
|
|
||||||
if !hasmapto('<Plug>AM_T:') |call AlignMaps#MakeMap("T:")|endif
|
|
||||||
if !hasmapto('<Plug>AM_T;') |call AlignMaps#MakeMap("T;")|endif
|
|
||||||
if !hasmapto('<Plug>AM_T<') |call AlignMaps#MakeMap("T<")|endif
|
|
||||||
if !hasmapto('<Plug>AM_T=') |call AlignMaps#MakeMap("T=")|endif
|
|
||||||
if !hasmapto('<Plug>AM_T?') |call AlignMaps#MakeMap("T?")|endif
|
|
||||||
if !hasmapto('<Plug>AM_T@') |call AlignMaps#MakeMap("T@")|endif
|
|
||||||
if !hasmapto('<Plug>AM_TW@') |call AlignMaps#MakeMap("TW@")|endif
|
|
||||||
if !hasmapto('<Plug>AM_Tab') |call AlignMaps#MakeMap("Tab")|endif
|
|
||||||
if !hasmapto('<Plug>AM_Tsp') |call AlignMaps#MakeMap("Tsp")|endif
|
|
||||||
if !hasmapto('<Plug>AM_T~') |call AlignMaps#MakeMap("T~")|endif
|
|
||||||
|
|
||||||
nnoremap <silent> <script> <Plug>AM_T| <SID>WS:AlignCtrl mIp0P0=r <Bar><CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_T# <SID>WS:AlignCtrl mIp0P0=r #<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_T, <SID>WS:AlignCtrl mIp0P1=r ,<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_Ts, <SID>WS:AlignCtrl mIp0P1=r ,<CR>:'a,.Align<CR>:'a,.s/\(\s*\),/,\1/ge<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_T: <SID>WS:AlignCtrl mIp1P1=r :<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_T; <SID>WS:AlignCtrl mIp0P0=r ;<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_T< <SID>WS:AlignCtrl mIp0P0=r <<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_T= <SID>WS:'a,'z-1s/\s\+\([*/+\-%<Bar>&\~^]\==\)/ \1/e<CR>:'a,'z-1s@ \+\([*/+\-%<Bar>&\~^]\)=@\1=@ge<CR>:'a,'z-1s/; */;@/e<CR>:'a,'z-1s/==/\="\<Char-0x0f>\<Char-0x0f>"/ge<CR>:'a,'z-1s/!=/\x="!\<Char-0x0f>"/ge<CR>:AlignCtrl mIp1P1=r = @<CR>:AlignCtrl g =<CR>:'a,'z-1Align<CR>:'a,'z-1s/; *@/;/e<CR>:'a,'z-1s/; *$/;/e<CR>:'a,'z-1s@\([*/+\-%<Bar>&\~^]\)\( \+\)=@\2\1=@ge<CR>:'a,'z-1s/\( \+\);/;\1/ge<CR>:'a,'z-1s/\xff/=/ge<CR><SID>WE:exe "norm <Plug>acom"
|
|
||||||
nnoremap <silent> <script> <Plug>AM_T? <SID>WS:AlignCtrl mIp0P0=r ?<CR>:'a,.Align<CR>:'y,'zs/ \( *\);/;\1/ge<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_T@ <SID>WS:AlignCtrl mIp0P0=r @<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_TW@ <SID>WS:AlignCtrl mWp0P0=r @<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_Tab <SID>WS:'a,.s/^\(\t*\)\(.*\)/\=submatch(1).escape(substitute(submatch(2),'\t','@','g'),'\')/<CR>:AlignCtrl mI=r @<CR>:'a,.Align<CR>:'y+1,'z-1s/@/ /g<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_Tsp <SID>WS:'a,.s/^\(\s*\)\(.*\)/\=submatch(1).escape(substitute(submatch(2),'\s\+','@','g'),'\')/<CR>:AlignCtrl mI=r @<CR>:'a,.Align<CR>:'y+1,'z-1s/@/ /g<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_T~ <SID>WS:AlignCtrl mIp0P0=r ~<CR>:'a,.Align<CR>:'y,'zs/ \( *\);/;\1/ge<CR><SID>WE
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" character-based left-justified alignment maps {{{2
|
|
||||||
if !hasmapto('<Plug>AM_t|','n') |call AlignMaps#MakeMap("t|")|endif
|
|
||||||
if !hasmapto('<Plug>AM_t#','n') |call AlignMaps#MakeMap("t#")|endif
|
|
||||||
if !hasmapto('<Plug>AM_t,','n') |call AlignMaps#MakeMap("t,")|endif
|
|
||||||
if !hasmapto('<Plug>AM_t:','n') |call AlignMaps#MakeMap("t:")|endif
|
|
||||||
if !hasmapto('<Plug>AM_t;','n') |call AlignMaps#MakeMap("t;")|endif
|
|
||||||
if !hasmapto('<Plug>AM_t<','n') |call AlignMaps#MakeMap("t<")|endif
|
|
||||||
if !hasmapto('<Plug>AM_t=','n') |call AlignMaps#MakeMap("t=")|endif
|
|
||||||
if !hasmapto('<Plug>AM_ts,','n') |call AlignMaps#MakeMap("ts,")|endif
|
|
||||||
if !hasmapto('<Plug>AM_ts:','n') |call AlignMaps#MakeMap("ts:")|endif
|
|
||||||
if !hasmapto('<Plug>AM_ts;','n') |call AlignMaps#MakeMap("ts;")|endif
|
|
||||||
if !hasmapto('<Plug>AM_ts<','n') |call AlignMaps#MakeMap("ts<")|endif
|
|
||||||
if !hasmapto('<Plug>AM_ts=','n') |call AlignMaps#MakeMap("ts=")|endif
|
|
||||||
if !hasmapto('<Plug>AM_w=','n') |call AlignMaps#MakeMap("w=")|endif
|
|
||||||
if !hasmapto('<Plug>AM_t?','n') |call AlignMaps#MakeMap("t?")|endif
|
|
||||||
if !hasmapto('<Plug>AM_t~','n') |call AlignMaps#MakeMap("t~")|endif
|
|
||||||
if !hasmapto('<Plug>AM_t@','n') |call AlignMaps#MakeMap("t@")|endif
|
|
||||||
if !hasmapto('<Plug>AM_tW@','n') |call AlignMaps#MakeMap("tW@")|endif
|
|
||||||
if !hasmapto('<Plug>AM_m=','n') |call AlignMaps#MakeMap("m=")|endif
|
|
||||||
if !hasmapto('<Plug>AM_tab','n') |call AlignMaps#MakeMap("tab")|endif
|
|
||||||
if !hasmapto('<Plug>AM_tml','n') |call AlignMaps#MakeMap("tml")|endif
|
|
||||||
if !hasmapto('<Plug>AM_tsp','n') |call AlignMaps#MakeMap("tsp")|endif
|
|
||||||
if !hasmapto('<Plug>AM_tsq','n') |call AlignMaps#MakeMap("tsq")|endif
|
|
||||||
if !hasmapto('<Plug>AM_tt','n') |call AlignMaps#MakeMap("tt")|endif
|
|
||||||
if !hasmapto('<Plug>AM_tab','n') |call AlignMaps#MakeMap("tab")|endif
|
|
||||||
|
|
||||||
" <Plug> normal mode mappings
|
|
||||||
nnoremap <silent> <script> <Plug>AM_t| <SID>WS:AlignCtrl mIp0P0=l <Bar><CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_t# <SID>WS:AlignCtrl mIp0P0=l #<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_t, <SID>WS:AlignCtrl mIp0P1=l ,<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_t: <SID>WS:AlignCtrl mIp1P1=l :<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_t; <SID>WS:AlignCtrl mIp0P1=l ;<CR>:'a,.Align<CR>:sil 'y,'zs/\( *\);/;\1/ge<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_t< <SID>WS:AlignCtrl mIp0P0=l <<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_t= <SID>WS:call AlignMaps#Equals()<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_ts, <SID>WS:AlignCtrl mIp0P1=l #\zs<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_ts, <SID>WS:AlignCtrl mIp0P1=l ,\zs<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_ts: <SID>WS:AlignCtrl mIp1P1=l :\zs<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_ts; <SID>WS:AlignCtrl mIp1P1=l ;\zs<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_ts< <SID>WS:AlignCtrl mIp1P1=l <\zs<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_ts= <SID>WS:AlignCtrl mIp1P1=l =\zs<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_w= <SID>WS:'a,'zg/=/s/\s\+\([*/+\-%<Bar>&\~^]\==\)/ \1/e<CR>:'a,'zg/=/s@ \+\([*/+\-%<Bar>&\~^]\)=@\1=@ge<CR>:'a,'zg/=/s/==/\="\<Char-0x0f>\<Char-0x0f>"/ge<CR>:'a,'zg/=/s/!=/\="!\<Char-0x0f>"/ge<CR>'zk:AlignCtrl mWp1P1=l =<CR>:AlignCtrl g =<CR>:'a,'z-1g/=/Align<CR>:'a,'z-1g/=/s@\([*/+\-%<Bar>&\~^!=]\)\( \+\)=@\2\1=@ge<CR>:'a,'z-1g/=/s/\( \+\);/;\1/ge<CR>:'a,'z-1v/^\s*\/[*/]/s/\/[*/]/@&@/e<CR>:'a,'z-1v/^\s*\/[*/]/s/\*\//@&/e<CR>'zk:call AlignMaps#StdAlign(1)<cr>:'y,'zs/^\(\s*\) @/\1/e<CR>:'a,'z-1g/=/s/\xff/=/ge<CR>:'y,'zg/=/s/ @//eg<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_t? <SID>WS:AlignCtrl mIp0P0=l ?<CR>:'a,.Align<CR>:.,'zs/ \( *\);/;\1/ge<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_t~ <SID>WS:AlignCtrl mIp0P0=l ~<CR>:'a,.Align<CR>:'y,'zs/ \( *\);/;\1/ge<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_t@ <SID>WS:call AlignMaps#StdAlign(1)<cr><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_tW@ <SID>WS:call AlignMaps#StdAlign(2)<cr><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_m= <SID>WS:'a,'zs/\s\+\([*/+\-%<Bar>&\~^]\==\)/ \1/e<CR>:'a,'zs@ \+\([*/+\-%<Bar>&\~^]\)=@\1=@ge<CR>:'a,'zs/==/\="\<Char-0x0f>\<Char-0x0f>"/ge<CR>:'a,'zs/!=/\="!\<Char-0x0f>"/ge<CR>'zk:AlignCtrl mIp1P1=l =<CR>:AlignCtrl g =<CR>:'a,'z-1Align<CR>:'a,'z-1s@\([*/+\-%<Bar>&\~^!=]\)\( \+\)=@\2\1=@ge<CR>:'a,'z-1s/\( \+\);/;\1/ge<CR>:'a,'z-s/%\ze[^=]/ @%@ /e<CR>'zk:call AlignMaps#StdAlign(1)<cr>:'y,'zs/^\(\s*\) @/\1/e<CR>:'a,'z-1s/\xff/=/ge<CR>:'y,'zs/ @//eg<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_tab <SID>WS:'a,.s/^\(\t*\)\(.*\)$/\=submatch(1).escape(substitute(submatch(2),'\t',"\<Char-0x0f>",'g'),'\')/<CR>:if &ts == 1<bar>exe "AlignCtrl mI=lp0P0 \<Char-0x0f>"<bar>else<bar>exe "AlignCtrl mI=l"<bar>endif<CR>:'a,.Align <Char-0x0f><CR>:exe "'y+1,'z-1s/\<Char-0x0f>/".((&ts == 1)? '\t' : ' ')."/g"<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_tml <SID>WS:AlignCtrl mWp1P0=l \\\@<!\\\s*$<CR>:'a,.Align<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_tsp <SID>WS:keepj 'a,.s/^\(\s*\)\(.*\)/\=submatch(1).escape(substitute(submatch(2),'\s\+','@','g'),'\')/<CR>:AlignCtrl mI=lp0P0 @<CR>:'a,.Align<CR>:keepj 'y+1,'z-1s/@/ /g<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_tsq <SID>WS:'a,.AlignReplaceQuotedSpaces<CR>:keepj 'a,.s/^\(\s*\)\(.*\)/\=submatch(1).substitute(submatch(2),'\s\+','@','g')/<CR>:AlignCtrl mIp0P0=l @<CR>:'a,.Align<CR>:keepj 'y+1,'z-1s/[%@]/ /g<CR><SID>WE
|
|
||||||
nnoremap <silent> <script> <Plug>AM_tt <SID>WS:AlignCtrl mIp1P1=l \\\@<!& \\\\<CR>:'a,.Align<CR><SID>WE
|
|
||||||
|
|
||||||
" =====================================================================
|
|
||||||
" Menu Support: {{{1
|
|
||||||
" ma ..move.. use menu
|
|
||||||
" v V or ctrl-v ..move.. use menu
|
|
||||||
if has("menu") && has("gui_running") && &go =~# 'm' && !exists("s:firstmenu")
|
|
||||||
let s:firstmenu= 1
|
|
||||||
if !exists("g:DrChipTopLvlMenu")
|
|
||||||
let g:DrChipTopLvlMenu= "DrChip."
|
|
||||||
endif
|
|
||||||
if g:DrChipTopLvlMenu != ""
|
|
||||||
let s:mapleader = exists("g:mapleader")? g:mapleader : '\'
|
|
||||||
let s:emapleader= escape(s:mapleader,'\ ')
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.<<\ and\ >><tab>'.s:emapleader.'a< '.s:mapleader.'a<'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Assignment\ =<tab>'.s:emapleader.'t= '.s:mapleader.'t='
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Assignment\ :=<tab>'.s:emapleader.'a= '.s:mapleader.'a='
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Backslashes<tab>'.s:emapleader.'tml '.s:mapleader.'tml'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Breakup\ Comma\ Declarations<tab>'.s:emapleader.'a, '.s:mapleader.'a,'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.C\ Comment\ Box<tab>'.s:emapleader.'abox '.s:mapleader.'abox'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Commas<tab>'.s:emapleader.'t, '.s:mapleader.'t,'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Commas<tab>'.s:emapleader.'ts, '.s:mapleader.'ts,'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Commas\ With\ Strings<tab>'.s:emapleader.'tsq '.s:mapleader.'tsq'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Comments<tab>'.s:emapleader.'acom '.s:mapleader.'acom'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Comments\ Only<tab>'.s:emapleader.'aocom '.s:mapleader.'aocom'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Declaration\ Comments<tab>'.s:emapleader.'adcom '.s:mapleader.'adcom'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Declarations<tab>'.s:emapleader.'adec '.s:mapleader.'adec'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Definitions<tab>'.s:emapleader.'adef '.s:mapleader.'adef'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Function\ Header<tab>'.s:emapleader.'afnc '.s:mapleader.'afnc'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Html\ Tables<tab>'.s:emapleader.'Htd '.s:mapleader.'Htd'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.(\.\.\.)?\.\.\.\ :\ \.\.\.<tab>'.s:emapleader.'a? '.s:mapleader.'a?'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Numbers<tab>'.s:emapleader.'anum '.s:mapleader.'anum'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Numbers\ (American-Style)<tab>'.s:emapleader.'aunum <Leader>aunum '.s:mapleader.'aunum <Leader>aunum'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Numbers\ (Euro-Style)<tab>'.s:emapleader.'aenum '.s:mapleader.'aenum'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Spaces\ (Left\ Justified)<tab>'.s:emapleader.'tsp '.s:mapleader.'tsp'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Spaces\ (Right\ Justified)<tab>'.s:emapleader.'Tsp '.s:mapleader.'Tsp'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Statements\ With\ Percent\ Style\ Comments<tab>'.s:emapleader.'m= '.s:mapleader.'m='
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Symbol\ <<tab>'.s:emapleader.'t< '.s:mapleader.'t<'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Symbol\ \|<tab>'.s:emapleader.'t\| '.s:mapleader.'t|'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Symbol\ @<tab>'.s:emapleader.'t@ '.s:mapleader.'t@'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Symbol\ #<tab>'.s:emapleader.'t# '.s:mapleader.'t#'
|
|
||||||
exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Tabs<tab>'.s:emapleader.'tab '.s:mapleader.'tab'
|
|
||||||
unlet s:mapleader
|
|
||||||
unlet s:emapleader
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" =====================================================================
|
|
||||||
" Restore: {{{1
|
|
||||||
let &cpo= s:keepcpo
|
|
||||||
unlet s:keepcpo
|
|
||||||
|
|
||||||
" ==============================================================================
|
|
||||||
" Modelines: {{{1
|
|
||||||
" vim: ts=4 nowrap fdm=marker
|
|
|
@ -1,41 +0,0 @@
|
||||||
" AlignPlugin: tool to align multiple fields based on one or more separators
|
|
||||||
" Author: Charles E. Campbell
|
|
||||||
" Date: Nov 02, 2008
|
|
||||||
" GetLatestVimScripts: 294 1 :AutoInstall: Align.vim
|
|
||||||
" GetLatestVimScripts: 1066 1 :AutoInstall: cecutil.vim
|
|
||||||
" Copyright: Copyright (C) 1999-2012 Charles E. Campbell {{{1
|
|
||||||
" Permission is hereby granted to use and distribute this code,
|
|
||||||
" with or without modifications, provided that this copyright
|
|
||||||
" notice is copied with it. Like anything else that's free,
|
|
||||||
" Align.vim is provided *as is* and comes with no warranty
|
|
||||||
" of any kind, either expressed or implied. By using this
|
|
||||||
" plugin, you agree that in no event will the copyright
|
|
||||||
" holder be liable for any damages resulting from the use
|
|
||||||
" of this software.
|
|
||||||
"
|
|
||||||
" Romans 1:16,17a : For I am not ashamed of the gospel of Christ, for it is {{{1
|
|
||||||
" the power of God for salvation for everyone who believes; for the Jew first,
|
|
||||||
" and also for the Greek. For in it is revealed God's righteousness from
|
|
||||||
" faith to faith.
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Load Once: {{{1
|
|
||||||
if &cp || exists("g:loaded_AlignPlugin")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let g:loaded_AlignPlugin = "v37"
|
|
||||||
let s:keepcpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Public Interface: {{{1
|
|
||||||
com! -bang -range -nargs=* Align <line1>,<line2>call Align#Align(<bang>0,<q-args>)
|
|
||||||
com! -range -nargs=0 AlignReplaceQuotedSpaces <line1>,<line2>call Align#AlignReplaceQuotedSpaces()
|
|
||||||
com! -nargs=* AlignCtrl call Align#AlignCtrl(<q-args>)
|
|
||||||
com! -nargs=0 AlignPush call Align#AlignPush()
|
|
||||||
com! -nargs=0 AlignPop call Align#AlignPop()
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Restore: {{{1
|
|
||||||
let &cpo= s:keepcpo
|
|
||||||
unlet s:keepcpo
|
|
||||||
" vim: ts=4 fdm=marker
|
|
|
@ -1,536 +0,0 @@
|
||||||
" cecutil.vim : save/restore window position
|
|
||||||
" save/restore mark position
|
|
||||||
" save/restore selected user maps
|
|
||||||
" Author: Charles E. Campbell
|
|
||||||
" Version: 18h ASTRO-ONLY
|
|
||||||
" Date: Oct 16, 2012
|
|
||||||
"
|
|
||||||
" Saving Restoring Destroying Marks: {{{1
|
|
||||||
" call SaveMark(markname) let savemark= SaveMark(markname)
|
|
||||||
" call RestoreMark(markname) call RestoreMark(savemark)
|
|
||||||
" call DestroyMark(markname)
|
|
||||||
" commands: SM RM DM
|
|
||||||
"
|
|
||||||
" Saving Restoring Destroying Window Position: {{{1
|
|
||||||
" call SaveWinPosn() let winposn= SaveWinPosn()
|
|
||||||
" call RestoreWinPosn() call RestoreWinPosn(winposn)
|
|
||||||
" \swp : save current window/buffer's position
|
|
||||||
" \rwp : restore current window/buffer's previous position
|
|
||||||
" commands: SWP RWP
|
|
||||||
"
|
|
||||||
" Saving And Restoring User Maps: {{{1
|
|
||||||
" call SaveUserMaps(mapmode,maplead,mapchx,suffix)
|
|
||||||
" call RestoreUserMaps(suffix)
|
|
||||||
"
|
|
||||||
" GetLatestVimScripts: 1066 1 :AutoInstall: cecutil.vim
|
|
||||||
"
|
|
||||||
" You believe that God is one. You do well. The demons also {{{1
|
|
||||||
" believe, and shudder. But do you want to know, vain man, that
|
|
||||||
" faith apart from works is dead? (James 2:19,20 WEB)
|
|
||||||
"redraw!|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Load Once: {{{1
|
|
||||||
if &cp || exists("g:loaded_cecutil")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let g:loaded_cecutil = "v18h"
|
|
||||||
let s:keepcpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
"DechoRemOn
|
|
||||||
|
|
||||||
" =======================
|
|
||||||
" Public Interface: {{{1
|
|
||||||
" =======================
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Map Interface: {{{2
|
|
||||||
if !hasmapto('<Plug>SaveWinPosn')
|
|
||||||
map <unique> <Leader>swp <Plug>SaveWinPosn
|
|
||||||
endif
|
|
||||||
if !hasmapto('<Plug>RestoreWinPosn')
|
|
||||||
map <unique> <Leader>rwp <Plug>RestoreWinPosn
|
|
||||||
endif
|
|
||||||
nmap <silent> <Plug>SaveWinPosn :call SaveWinPosn()<CR>
|
|
||||||
nmap <silent> <Plug>RestoreWinPosn :call RestoreWinPosn()<CR>
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" Command Interface: {{{2
|
|
||||||
com! -bar -nargs=0 SWP call SaveWinPosn()
|
|
||||||
com! -bar -nargs=? RWP call RestoreWinPosn(<args>)
|
|
||||||
com! -bar -nargs=1 SM call SaveMark(<q-args>)
|
|
||||||
com! -bar -nargs=1 RM call RestoreMark(<q-args>)
|
|
||||||
com! -bar -nargs=1 DM call DestroyMark(<q-args>)
|
|
||||||
|
|
||||||
com! -bar -nargs=1 WLR call s:WinLineRestore(<q-args>)
|
|
||||||
|
|
||||||
if v:version < 630
|
|
||||||
let s:modifier= "sil! "
|
|
||||||
else
|
|
||||||
let s:modifier= "sil! keepj "
|
|
||||||
endif
|
|
||||||
|
|
||||||
" ===============
|
|
||||||
" Functions: {{{1
|
|
||||||
" ===============
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" SaveWinPosn: {{{2
|
|
||||||
" let winposn= SaveWinPosn() will save window position in winposn variable
|
|
||||||
" call SaveWinPosn() will save window position in b:cecutil_winposn{b:cecutil_iwinposn}
|
|
||||||
" let winposn= SaveWinPosn(0) will *only* save window position in winposn variable (no stacking done)
|
|
||||||
fun! SaveWinPosn(...)
|
|
||||||
" echomsg "Decho: SaveWinPosn() a:0=".a:0
|
|
||||||
if line("$") == 1 && getline(1) == ""
|
|
||||||
" echomsg "Decho: SaveWinPosn : empty buffer"
|
|
||||||
return ""
|
|
||||||
endif
|
|
||||||
let so_keep = &l:so
|
|
||||||
let siso_keep = &siso
|
|
||||||
let ss_keep = &l:ss
|
|
||||||
setlocal so=0 siso=0 ss=0
|
|
||||||
|
|
||||||
let swline = line(".") " save-window line in file
|
|
||||||
let swcol = col(".") " save-window column in file
|
|
||||||
if swcol >= col("$")
|
|
||||||
let swcol= swcol + virtcol(".") - virtcol("$") " adjust for virtual edit (cursor past end-of-line)
|
|
||||||
endif
|
|
||||||
let swwline = winline() - 1 " save-window window line
|
|
||||||
let swwcol = virtcol(".") - wincol() " save-window window column
|
|
||||||
let savedposn = ""
|
|
||||||
" echomsg "Decho: sw[".swline.",".swcol."] sww[".swwline.",".swwcol."]"
|
|
||||||
let savedposn = "call GoWinbufnr(".winbufnr(0).")"
|
|
||||||
let savedposn = savedposn."|".s:modifier.swline
|
|
||||||
let savedposn = savedposn."|".s:modifier."norm! 0z\<cr>"
|
|
||||||
if swwline > 0
|
|
||||||
let savedposn= savedposn.":".s:modifier."call s:WinLineRestore(".(swwline+1).")\<cr>"
|
|
||||||
endif
|
|
||||||
if swwcol > 0
|
|
||||||
let savedposn= savedposn.":".s:modifier."norm! 0".swwcol."zl\<cr>"
|
|
||||||
endif
|
|
||||||
let savedposn = savedposn.":".s:modifier."call cursor(".swline.",".swcol.")\<cr>"
|
|
||||||
|
|
||||||
" save window position in
|
|
||||||
" b:cecutil_winposn_{iwinposn} (stack)
|
|
||||||
" only when SaveWinPosn() is used
|
|
||||||
if a:0 == 0
|
|
||||||
if !exists("b:cecutil_iwinposn")
|
|
||||||
let b:cecutil_iwinposn= 1
|
|
||||||
else
|
|
||||||
let b:cecutil_iwinposn= b:cecutil_iwinposn + 1
|
|
||||||
endif
|
|
||||||
" echomsg "Decho: saving posn to SWP stack"
|
|
||||||
let b:cecutil_winposn{b:cecutil_iwinposn}= savedposn
|
|
||||||
endif
|
|
||||||
|
|
||||||
let &l:so = so_keep
|
|
||||||
let &siso = siso_keep
|
|
||||||
let &l:ss = ss_keep
|
|
||||||
|
|
||||||
" if exists("b:cecutil_iwinposn") " Decho
|
|
||||||
" echomsg "Decho: b:cecutil_winpos{".b:cecutil_iwinposn."}[".b:cecutil_winposn{b:cecutil_iwinposn}."]"
|
|
||||||
" else " Decho
|
|
||||||
" echomsg "Decho: b:cecutil_iwinposn doesn't exist"
|
|
||||||
" endif " Decho
|
|
||||||
" echomsg "Decho: SaveWinPosn [".savedposn."]"
|
|
||||||
return savedposn
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" RestoreWinPosn: {{{2
|
|
||||||
" call RestoreWinPosn()
|
|
||||||
" call RestoreWinPosn(winposn)
|
|
||||||
fun! RestoreWinPosn(...)
|
|
||||||
" echomsg "Decho: RestoreWinPosn() a:0=".a:0
|
|
||||||
" echomsg "Decho: getline(1)<".getline(1).">"
|
|
||||||
" echomsg "Decho: line(.)=".line(".")
|
|
||||||
if line("$") == 1 && getline(1) == ""
|
|
||||||
" echomsg "Decho: RestoreWinPosn : empty buffer"
|
|
||||||
return ""
|
|
||||||
endif
|
|
||||||
let so_keep = &l:so
|
|
||||||
let siso_keep = &l:siso
|
|
||||||
let ss_keep = &l:ss
|
|
||||||
setlocal so=0 siso=0 ss=0
|
|
||||||
|
|
||||||
if a:0 == 0 || a:1 == ""
|
|
||||||
" use saved window position in b:cecutil_winposn{b:cecutil_iwinposn} if it exists
|
|
||||||
if exists("b:cecutil_iwinposn") && exists("b:cecutil_winposn{b:cecutil_iwinposn}")
|
|
||||||
" echomsg "Decho: using stack b:cecutil_winposn{".b:cecutil_iwinposn."}<".b:cecutil_winposn{b:cecutil_iwinposn}.">"
|
|
||||||
try
|
|
||||||
exe s:modifier.b:cecutil_winposn{b:cecutil_iwinposn}
|
|
||||||
catch /^Vim\%((\a\+)\)\=:E749/
|
|
||||||
" ignore empty buffer error messages
|
|
||||||
endtry
|
|
||||||
" normally drop top-of-stack by one
|
|
||||||
" but while new top-of-stack doesn't exist
|
|
||||||
" drop top-of-stack index by one again
|
|
||||||
if b:cecutil_iwinposn >= 1
|
|
||||||
unlet b:cecutil_winposn{b:cecutil_iwinposn}
|
|
||||||
let b:cecutil_iwinposn= b:cecutil_iwinposn - 1
|
|
||||||
while b:cecutil_iwinposn >= 1 && !exists("b:cecutil_winposn{b:cecutil_iwinposn}")
|
|
||||||
let b:cecutil_iwinposn= b:cecutil_iwinposn - 1
|
|
||||||
endwhile
|
|
||||||
if b:cecutil_iwinposn < 1
|
|
||||||
unlet b:cecutil_iwinposn
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
echohl WarningMsg
|
|
||||||
echomsg "***warning*** need to SaveWinPosn first!"
|
|
||||||
echohl None
|
|
||||||
endif
|
|
||||||
|
|
||||||
else " handle input argument
|
|
||||||
" echomsg "Decho: using input a:1<".a:1.">"
|
|
||||||
" use window position passed to this function
|
|
||||||
exe a:1
|
|
||||||
" remove a:1 pattern from b:cecutil_winposn{b:cecutil_iwinposn} stack
|
|
||||||
if exists("b:cecutil_iwinposn")
|
|
||||||
let jwinposn= b:cecutil_iwinposn
|
|
||||||
while jwinposn >= 1 " search for a:1 in iwinposn..1
|
|
||||||
if exists("b:cecutil_winposn{jwinposn}") " if it exists
|
|
||||||
if a:1 == b:cecutil_winposn{jwinposn} " and the pattern matches
|
|
||||||
unlet b:cecutil_winposn{jwinposn} " unlet it
|
|
||||||
if jwinposn == b:cecutil_iwinposn " if at top-of-stack
|
|
||||||
let b:cecutil_iwinposn= b:cecutil_iwinposn - 1 " drop stacktop by one
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
let jwinposn= jwinposn - 1
|
|
||||||
endwhile
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Seems to be something odd: vertical motions after RWP
|
|
||||||
" cause jump to first column. The following fixes that.
|
|
||||||
" Note: was using wincol()>1, but with signs, a cursor
|
|
||||||
" at column 1 yields wincol()==3. Beeping ensued.
|
|
||||||
let vekeep= &ve
|
|
||||||
set ve=all
|
|
||||||
if virtcol('.') > 1
|
|
||||||
exe s:modifier."norm! hl"
|
|
||||||
elseif virtcol(".") < virtcol("$")
|
|
||||||
exe s:modifier."norm! lh"
|
|
||||||
endif
|
|
||||||
let &ve= vekeep
|
|
||||||
|
|
||||||
let &l:so = so_keep
|
|
||||||
let &l:siso = siso_keep
|
|
||||||
let &l:ss = ss_keep
|
|
||||||
|
|
||||||
" echomsg "Decho: RestoreWinPosn"
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" s:WinLineRestore: {{{2
|
|
||||||
fun! s:WinLineRestore(swwline)
|
|
||||||
" echomsg "Decho: s:WinLineRestore(swwline=".a:swwline.")"
|
|
||||||
while winline() < a:swwline
|
|
||||||
let curwinline= winline()
|
|
||||||
exe s:modifier."norm! \<c-y>"
|
|
||||||
if curwinline == winline()
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endwhile
|
|
||||||
" echomsg "Decho: s:WinLineRestore"
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" GoWinbufnr: go to window holding given buffer (by number) {{{2
|
|
||||||
" Prefers current window; if its buffer number doesn't match,
|
|
||||||
" then will try from topleft to bottom right
|
|
||||||
fun! GoWinbufnr(bufnum)
|
|
||||||
" call Dfunc("GoWinbufnr(".a:bufnum.")")
|
|
||||||
if winbufnr(0) == a:bufnum
|
|
||||||
" call Dret("GoWinbufnr : winbufnr(0)==a:bufnum")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
winc t
|
|
||||||
let first=1
|
|
||||||
while winbufnr(0) != a:bufnum && (first || winnr() != 1)
|
|
||||||
winc w
|
|
||||||
let first= 0
|
|
||||||
endwhile
|
|
||||||
" call Dret("GoWinbufnr")
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" SaveMark: sets up a string saving a mark position. {{{2
|
|
||||||
" For example, SaveMark("a")
|
|
||||||
" Also sets up a global variable, g:savemark_{markname}
|
|
||||||
fun! SaveMark(markname)
|
|
||||||
" call Dfunc("SaveMark(markname<".a:markname.">)")
|
|
||||||
let markname= a:markname
|
|
||||||
if strpart(markname,0,1) !~ '\a'
|
|
||||||
let markname= strpart(markname,1,1)
|
|
||||||
endif
|
|
||||||
" call Decho("markname=".markname)
|
|
||||||
|
|
||||||
let lzkeep = &lz
|
|
||||||
set lz
|
|
||||||
|
|
||||||
if 1 <= line("'".markname) && line("'".markname) <= line("$")
|
|
||||||
let winposn = SaveWinPosn(0)
|
|
||||||
exe s:modifier."norm! `".markname
|
|
||||||
let savemark = SaveWinPosn(0)
|
|
||||||
let g:savemark_{markname} = savemark
|
|
||||||
let savemark = markname.savemark
|
|
||||||
call RestoreWinPosn(winposn)
|
|
||||||
else
|
|
||||||
let g:savemark_{markname} = ""
|
|
||||||
let savemark = ""
|
|
||||||
endif
|
|
||||||
|
|
||||||
let &lz= lzkeep
|
|
||||||
|
|
||||||
" call Dret("SaveMark : savemark<".savemark.">")
|
|
||||||
return savemark
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" RestoreMark: {{{2
|
|
||||||
" call RestoreMark("a") -or- call RestoreMark(savemark)
|
|
||||||
fun! RestoreMark(markname)
|
|
||||||
" call Dfunc("RestoreMark(markname<".a:markname.">)")
|
|
||||||
|
|
||||||
if strlen(a:markname) <= 0
|
|
||||||
" call Dret("RestoreMark : no such mark")
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
let markname= strpart(a:markname,0,1)
|
|
||||||
if markname !~ '\a'
|
|
||||||
" handles 'a -> a styles
|
|
||||||
let markname= strpart(a:markname,1,1)
|
|
||||||
endif
|
|
||||||
" call Decho("markname=".markname." strlen(a:markname)=".strlen(a:markname))
|
|
||||||
|
|
||||||
let lzkeep = &lz
|
|
||||||
set lz
|
|
||||||
let winposn = SaveWinPosn(0)
|
|
||||||
|
|
||||||
if strlen(a:markname) <= 2
|
|
||||||
if exists("g:savemark_{markname}") && strlen(g:savemark_{markname}) != 0
|
|
||||||
" use global variable g:savemark_{markname}
|
|
||||||
" call Decho("use savemark list")
|
|
||||||
call RestoreWinPosn(g:savemark_{markname})
|
|
||||||
exe "norm! m".markname
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
" markname is a savemark command (string)
|
|
||||||
" call Decho("use savemark command")
|
|
||||||
let markcmd= strpart(a:markname,1)
|
|
||||||
call RestoreWinPosn(markcmd)
|
|
||||||
exe "norm! m".markname
|
|
||||||
endif
|
|
||||||
|
|
||||||
call RestoreWinPosn(winposn)
|
|
||||||
let &lz = lzkeep
|
|
||||||
|
|
||||||
" call Dret("RestoreMark")
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" DestroyMark: {{{2
|
|
||||||
" call DestroyMark("a") -- destroys mark
|
|
||||||
fun! DestroyMark(markname)
|
|
||||||
" call Dfunc("DestroyMark(markname<".a:markname.">)")
|
|
||||||
|
|
||||||
" save options and set to standard values
|
|
||||||
let reportkeep= &report
|
|
||||||
let lzkeep = &lz
|
|
||||||
set lz report=10000
|
|
||||||
|
|
||||||
let markname= strpart(a:markname,0,1)
|
|
||||||
if markname !~ '\a'
|
|
||||||
" handles 'a -> a styles
|
|
||||||
let markname= strpart(a:markname,1,1)
|
|
||||||
endif
|
|
||||||
" call Decho("markname=".markname)
|
|
||||||
|
|
||||||
let curmod = &mod
|
|
||||||
let winposn = SaveWinPosn(0)
|
|
||||||
1
|
|
||||||
let lineone = getline(".")
|
|
||||||
exe "k".markname
|
|
||||||
d
|
|
||||||
put! =lineone
|
|
||||||
let &mod = curmod
|
|
||||||
call RestoreWinPosn(winposn)
|
|
||||||
|
|
||||||
" restore options to user settings
|
|
||||||
let &report = reportkeep
|
|
||||||
let &lz = lzkeep
|
|
||||||
|
|
||||||
" call Dret("DestroyMark")
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" QArgSplitter: to avoid \ processing by <f-args>, <q-args> is needed. {{{2
|
|
||||||
" However, <q-args> doesn't split at all, so this one returns a list
|
|
||||||
" with splits at all whitespace (only!), plus a leading length-of-list.
|
|
||||||
" The resulting list: qarglist[0] corresponds to a:0
|
|
||||||
" qarglist[i] corresponds to a:{i}
|
|
||||||
fun! QArgSplitter(qarg)
|
|
||||||
" call Dfunc("QArgSplitter(qarg<".a:qarg.">)")
|
|
||||||
let qarglist = split(a:qarg)
|
|
||||||
let qarglistlen = len(qarglist)
|
|
||||||
let qarglist = insert(qarglist,qarglistlen)
|
|
||||||
" call Dret("QArgSplitter ".string(qarglist))
|
|
||||||
return qarglist
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" ListWinPosn: {{{2
|
|
||||||
"fun! ListWinPosn() " Decho
|
|
||||||
" if !exists("b:cecutil_iwinposn") || b:cecutil_iwinposn == 0 " Decho
|
|
||||||
" call Decho("nothing on SWP stack") " Decho
|
|
||||||
" else " Decho
|
|
||||||
" let jwinposn= b:cecutil_iwinposn " Decho
|
|
||||||
" while jwinposn >= 1 " Decho
|
|
||||||
" if exists("b:cecutil_winposn{jwinposn}") " Decho
|
|
||||||
" call Decho("winposn{".jwinposn."}<".b:cecutil_winposn{jwinposn}.">") " Decho
|
|
||||||
" else " Decho
|
|
||||||
" call Decho("winposn{".jwinposn."} -- doesn't exist") " Decho
|
|
||||||
" endif " Decho
|
|
||||||
" let jwinposn= jwinposn - 1 " Decho
|
|
||||||
" endwhile " Decho
|
|
||||||
" endif " Decho
|
|
||||||
"endfun " Decho
|
|
||||||
"com! -nargs=0 LWP call ListWinPosn() " Decho
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" SaveUserMaps: this function sets up a script-variable (s:restoremap) {{{2
|
|
||||||
" which can be used to restore user maps later with
|
|
||||||
" call RestoreUserMaps()
|
|
||||||
"
|
|
||||||
" mapmode - see :help maparg for details (n v o i c l "")
|
|
||||||
" ex. "n" = Normal
|
|
||||||
" The letters "b" and "u" are optional prefixes;
|
|
||||||
" The "u" means that the map will also be unmapped
|
|
||||||
" The "b" means that the map has a <buffer> qualifier
|
|
||||||
" ex. "un" = Normal + unmapping
|
|
||||||
" ex. "bn" = Normal + <buffer>
|
|
||||||
" ex. "bun" = Normal + <buffer> + unmapping
|
|
||||||
" ex. "ubn" = Normal + <buffer> + unmapping
|
|
||||||
" maplead - see mapchx
|
|
||||||
" mapchx - "<something>" handled as a single map item.
|
|
||||||
" ex. "<left>"
|
|
||||||
" - "string" a string of single letters which are actually
|
|
||||||
" multiple two-letter maps (using the maplead:
|
|
||||||
" maplead . each_character_in_string)
|
|
||||||
" ex. maplead="\" and mapchx="abc" saves user mappings for
|
|
||||||
" \a, \b, and \c
|
|
||||||
" Of course, if maplead is "", then for mapchx="abc",
|
|
||||||
" mappings for a, b, and c are saved.
|
|
||||||
" - :something handled as a single map item, w/o the ":"
|
|
||||||
" ex. mapchx= ":abc" will save a mapping for "abc"
|
|
||||||
" suffix - a string unique to your plugin
|
|
||||||
" ex. suffix= "DrawIt"
|
|
||||||
fun! SaveUserMaps(mapmode,maplead,mapchx,suffix)
|
|
||||||
" call Dfunc("SaveUserMaps(mapmode<".a:mapmode."> maplead<".a:maplead."> mapchx<".a:mapchx."> suffix<".a:suffix.">)")
|
|
||||||
|
|
||||||
if !exists("s:restoremap_{a:suffix}")
|
|
||||||
" initialize restoremap_suffix to null string
|
|
||||||
let s:restoremap_{a:suffix}= ""
|
|
||||||
endif
|
|
||||||
|
|
||||||
" set up dounmap: if 1, then save and unmap (a:mapmode leads with a "u")
|
|
||||||
" if 0, save only
|
|
||||||
let mapmode = a:mapmode
|
|
||||||
let dounmap = 0
|
|
||||||
let dobuffer = ""
|
|
||||||
while mapmode =~ '^[bu]'
|
|
||||||
if mapmode =~ '^u'
|
|
||||||
let dounmap = 1
|
|
||||||
let mapmode = strpart(a:mapmode,1)
|
|
||||||
elseif mapmode =~ '^b'
|
|
||||||
let dobuffer = "<buffer> "
|
|
||||||
let mapmode = strpart(a:mapmode,1)
|
|
||||||
endif
|
|
||||||
endwhile
|
|
||||||
" call Decho("dounmap=".dounmap." dobuffer<".dobuffer.">")
|
|
||||||
|
|
||||||
" save single map :...something...
|
|
||||||
if strpart(a:mapchx,0,1) == ':'
|
|
||||||
" call Decho("save single map :...something...")
|
|
||||||
let amap= strpart(a:mapchx,1)
|
|
||||||
if amap == "|" || amap == "\<c-v>"
|
|
||||||
let amap= "\<c-v>".amap
|
|
||||||
endif
|
|
||||||
let amap = a:maplead.amap
|
|
||||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|:sil! ".mapmode."unmap ".dobuffer.amap
|
|
||||||
if maparg(amap,mapmode) != ""
|
|
||||||
let maprhs = substitute(maparg(amap,mapmode),'|','<bar>','ge')
|
|
||||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|:".mapmode."map ".dobuffer.amap." ".maprhs
|
|
||||||
endif
|
|
||||||
if dounmap
|
|
||||||
exe "sil! ".mapmode."unmap ".dobuffer.amap
|
|
||||||
endif
|
|
||||||
|
|
||||||
" save single map <something>
|
|
||||||
elseif strpart(a:mapchx,0,1) == '<'
|
|
||||||
" call Decho("save single map <something>")
|
|
||||||
let amap = a:mapchx
|
|
||||||
if amap == "|" || amap == "\<c-v>"
|
|
||||||
let amap= "\<c-v>".amap
|
|
||||||
" call Decho("amap[[".amap."]]")
|
|
||||||
endif
|
|
||||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|sil! ".mapmode."unmap ".dobuffer.amap
|
|
||||||
if maparg(a:mapchx,mapmode) != ""
|
|
||||||
let maprhs = substitute(maparg(amap,mapmode),'|','<bar>','ge')
|
|
||||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|".mapmode."map ".dobuffer.amap." ".maprhs
|
|
||||||
endif
|
|
||||||
if dounmap
|
|
||||||
exe "sil! ".mapmode."unmap ".dobuffer.amap
|
|
||||||
endif
|
|
||||||
|
|
||||||
" save multiple maps
|
|
||||||
else
|
|
||||||
" call Decho("save multiple maps")
|
|
||||||
let i= 1
|
|
||||||
while i <= strlen(a:mapchx)
|
|
||||||
let amap= a:maplead.strpart(a:mapchx,i-1,1)
|
|
||||||
if amap == "|" || amap == "\<c-v>"
|
|
||||||
let amap= "\<c-v>".amap
|
|
||||||
endif
|
|
||||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|sil! ".mapmode."unmap ".dobuffer.amap
|
|
||||||
if maparg(amap,mapmode) != ""
|
|
||||||
let maprhs = substitute(maparg(amap,mapmode),'|','<bar>','ge')
|
|
||||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|".mapmode."map ".dobuffer.amap." ".maprhs
|
|
||||||
endif
|
|
||||||
if dounmap
|
|
||||||
exe "sil! ".mapmode."unmap ".dobuffer.amap
|
|
||||||
endif
|
|
||||||
let i= i + 1
|
|
||||||
endwhile
|
|
||||||
endif
|
|
||||||
" call Dret("SaveUserMaps : restoremap_".a:suffix.": ".s:restoremap_{a:suffix})
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
|
||||||
" RestoreUserMaps: {{{2
|
|
||||||
" Used to restore user maps saved by SaveUserMaps()
|
|
||||||
fun! RestoreUserMaps(suffix)
|
|
||||||
" call Dfunc("RestoreUserMaps(suffix<".a:suffix.">)")
|
|
||||||
if exists("s:restoremap_{a:suffix}")
|
|
||||||
let s:restoremap_{a:suffix}= substitute(s:restoremap_{a:suffix},'|\s*$','','e')
|
|
||||||
if s:restoremap_{a:suffix} != ""
|
|
||||||
" call Decho("exe ".s:restoremap_{a:suffix})
|
|
||||||
exe "sil! ".s:restoremap_{a:suffix}
|
|
||||||
endif
|
|
||||||
unlet s:restoremap_{a:suffix}
|
|
||||||
endif
|
|
||||||
" call Dret("RestoreUserMaps")
|
|
||||||
endfun
|
|
||||||
|
|
||||||
" ==============
|
|
||||||
" Restore: {{{1
|
|
||||||
" ==============
|
|
||||||
let &cpo= s:keepcpo
|
|
||||||
unlet s:keepcpo
|
|
||||||
|
|
||||||
" ================
|
|
||||||
" Modelines: {{{1
|
|
||||||
" ================
|
|
||||||
" vim: ts=4 fdm=marker
|
|
|
@ -1,72 +0,0 @@
|
||||||
" set up tab labels with tab number, buffer name, number of windows
|
|
||||||
function! GuiTabLabel()
|
|
||||||
let label = ''
|
|
||||||
let bufnrlist = tabpagebuflist(v:lnum)
|
|
||||||
|
|
||||||
|
|
||||||
" Append the tab number
|
|
||||||
let label .= tabpagenr().': '
|
|
||||||
|
|
||||||
" Append the buffer name
|
|
||||||
let name = bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
|
|
||||||
if name == ''
|
|
||||||
" give a name to no-name documents
|
|
||||||
if &buftype=='quickfix'
|
|
||||||
let name = '[Quickfix List]'
|
|
||||||
else
|
|
||||||
let name = '[No Name]'
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
" get only the file name
|
|
||||||
let name = fnamemodify(name,":t")
|
|
||||||
endif
|
|
||||||
let label .= name
|
|
||||||
|
|
||||||
for bufnr in bufnrlist
|
|
||||||
if getbufvar(bufnr, "&modified")
|
|
||||||
let label .= ' [+]'
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
return label
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" set up tab tooltips with every buffer name
|
|
||||||
function! GuiTabToolTip()
|
|
||||||
let tip = ''
|
|
||||||
let bufnrlist = tabpagebuflist(v:lnum)
|
|
||||||
|
|
||||||
for bufnr in bufnrlist
|
|
||||||
" separate buffer entries
|
|
||||||
if tip!=''
|
|
||||||
let tip .= ' | '
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Add name of buffer
|
|
||||||
let name=bufname(bufnr)
|
|
||||||
if name == ''
|
|
||||||
" give a name to no name documents
|
|
||||||
if getbufvar(bufnr,'&buftype')=='quickfix'
|
|
||||||
let name = '[Quickfix List]'
|
|
||||||
else
|
|
||||||
let name = '[No Name]'
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
let tip.=name
|
|
||||||
|
|
||||||
" add modified/modifiable flags
|
|
||||||
if getbufvar(bufnr, "&modified")
|
|
||||||
let tip .= ' [+]'
|
|
||||||
endif
|
|
||||||
if getbufvar(bufnr, "&modifiable")==0
|
|
||||||
let tip .= ' [-]'
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
return tip
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
set guitablabel=%!GuiTabLabel()
|
|
||||||
set guitabtooltip=%!GuiTabToolTip()
|
|
||||||
|
|
||||||
" vim: set ts=4 sw=4 tw=78 ft=vim :
|
|
11
vimrc
11
vimrc
|
@ -38,6 +38,15 @@ Plugin 'vim-pandoc/vim-pandoc-syntax'
|
||||||
Plugin 'bling/vim-airline'
|
Plugin 'bling/vim-airline'
|
||||||
Plugin 'saltstack/salt-vim'
|
Plugin 'saltstack/salt-vim'
|
||||||
Plugin 'andviro/flake8-vim'
|
Plugin 'andviro/flake8-vim'
|
||||||
|
Plugin 'mkitt/tabline.vim.git'
|
||||||
|
|
||||||
|
" Snipmate
|
||||||
|
Plugin 'MarcWeber/vim-addon-mw-utils'
|
||||||
|
Plugin 'tomtom/tlib_vim'
|
||||||
|
Plugin 'garbas/vim-snipmate'
|
||||||
|
|
||||||
|
" Optional:
|
||||||
|
Plugin 'honza/vim-snippets'
|
||||||
|
|
||||||
call vundle#end() " required
|
call vundle#end() " required
|
||||||
|
|
||||||
|
@ -125,7 +134,7 @@ function! CleverTab()
|
||||||
endfunction
|
endfunction
|
||||||
" map the function to Tab
|
" map the function to Tab
|
||||||
" inoremap <C-\> <C-R>=CleverTab()<CR>
|
" inoremap <C-\> <C-R>=CleverTab()<CR>
|
||||||
inoremap <Tab> <C-R>=CleverTab()<CR>
|
" inoremap <Tab> <C-R>=CleverTab()<CR>
|
||||||
set completeopt=longest
|
set completeopt=longest
|
||||||
|
|
||||||
" Emacs like indenting. Pressing Tab indents line
|
" Emacs like indenting. Pressing Tab indents line
|
||||||
|
|
Loading…
Reference in New Issue