GetLatestVimScripts
git-svn-id: https://vimsuite.svn.sourceforge.net/svnroot/vimsuite/trunk@223 eb2d0018-73a3-4aeb-bfe9-1def61c9ec69
This commit is contained in:
parent
9221e87eef
commit
c5e36fcdd2
@ -8,7 +8,7 @@ ScriptID SourceID Filename
|
||||
862 2635 cscope_quickfix.vim
|
||||
51 171 cscope_macros.vim
|
||||
102 16171 DirDiff.vim
|
||||
1189 8687 matrix.vim
|
||||
1189 18650 matrix.vim
|
||||
948 2878 Scons Compiler plugin
|
||||
1709 6421 Scons Syntax file
|
||||
1772 7248 DAMOS.zip DAMOS tools (von Stefan)
|
||||
@ -23,7 +23,7 @@ ScriptID SourceID Filename
|
||||
39 8196 matchit.vim
|
||||
2092 8095 reloaded.vim (matrix colorscheme)
|
||||
848 14668 SrchRplcHiGrp.vim (Search/Replace on Syntax Group)
|
||||
294 10110 Align.vim
|
||||
294 18148 Align.vim
|
||||
479 9276 MultipleSearch.vba
|
||||
1066 7618 cecutil.vim
|
||||
1173 17289 tComment.vim
|
||||
@ -32,6 +32,6 @@ ScriptID SourceID Filename
|
||||
642 15781 :AutoInstall: getscript.vim
|
||||
1075 15782 :AutoInstall: netrw.vim
|
||||
1502 15362 :AutoInstall: vimball.vim
|
||||
3304 17406 Gundo
|
||||
3304 18081 Gundo
|
||||
90 17031 vcscommand
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
" Align: tool to align multiple fields based on one or more separators
|
||||
" Author: Charles E. Campbell, Jr.
|
||||
" Date: Mar 03, 2009
|
||||
" Version: 35
|
||||
" Date: Jun 18, 2012
|
||||
" Version: 36
|
||||
" GetLatestVimScripts: 294 1 :AutoInstall: Align.vim
|
||||
" GetLatestVimScripts: 1066 1 :AutoInstall: cecutil.vim
|
||||
" Copyright: Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1
|
||||
" Copyright: Copyright (C) 1999-2012 Charles E. Campbell, Jr. {{{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,
|
||||
@ -18,13 +18,14 @@
|
||||
" 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.
|
||||
"redraw!|call DechoSep()|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" Load Once: {{{1
|
||||
if exists("g:loaded_Align") || &cp
|
||||
finish
|
||||
endif
|
||||
let g:loaded_Align = "v35"
|
||||
let g:loaded_Align = "v36"
|
||||
if v:version < 700
|
||||
echohl WarningMsg
|
||||
echo "***warning*** this version of Align needs vim 7.0"
|
||||
@ -84,14 +85,13 @@ endif
|
||||
" | s:AlignSep
|
||||
fun! Align#AlignCtrl(...)
|
||||
|
||||
" call Dfunc("AlignCtrl(...) a:0=".a:0)
|
||||
" call Dfunc("Align#AlignCtrl(...) a:0=".a:0)
|
||||
|
||||
" save options that will be changed
|
||||
let keep_search = @/
|
||||
let keep_ic = &ic
|
||||
" save options that may be changed later
|
||||
call s:SaveUserOptions()
|
||||
|
||||
" turn ignorecase off
|
||||
set noic
|
||||
setlocal noic
|
||||
|
||||
" clear visual mode so that old visual-mode selections don't
|
||||
" get applied to new invocations of Align().
|
||||
@ -121,19 +121,20 @@ fun! Align#AlignCtrl(...)
|
||||
let ipat= 2
|
||||
while ipat <= A[0]
|
||||
if "" =~ A[ipat]
|
||||
echoerr "AlignCtrl: separator<".A[ipat]."> matches zero-length string"
|
||||
let &ic= keep_ic
|
||||
" call Dret("AlignCtrl")
|
||||
echoerr "(AlignCtrl) separator<".A[ipat]."> matches zero-length string"
|
||||
call s:RestoreUserOptions()
|
||||
" call Dret("Align#AlignCtrl")
|
||||
return
|
||||
endif
|
||||
let ipat= ipat + 1
|
||||
endwhile
|
||||
endif
|
||||
endif
|
||||
" call Decho("(AlignCtrl) passed bad-separator pattern check (no zero-length matches)")
|
||||
|
||||
" call Decho("AlignCtrl() A[0]=".A[0])
|
||||
" call Decho("(AlignCtrl) A[0]=".A[0])
|
||||
if !exists("s:AlignStyle")
|
||||
let s:AlignStyle= "l"
|
||||
let s:AlignStyle= 'l'
|
||||
endif
|
||||
if !exists("s:AlignPrePad")
|
||||
let s:AlignPrePad= 0
|
||||
@ -153,7 +154,7 @@ fun! Align#AlignCtrl(...)
|
||||
let s:AlignPatQty= 0
|
||||
endif
|
||||
echo "AlignCtrl<".s:AlignCtrl."> qty=".s:AlignPatQty." AlignStyle<".s:AlignStyle."> Padding<".s:AlignPrePad."|".s:AlignPostPad."> LeadingWS=".s:AlignLeadKeep." AlignSep=".s:AlignSep
|
||||
" call Decho("AlignCtrl<".s:AlignCtrl."> qty=".s:AlignPatQty." AlignStyle<".s:AlignStyle."> Padding<".s:AlignPrePad."|".s:AlignPostPad."> LeadingWS=".s:AlignLeadKeep." AlignSep=".s:AlignSep)
|
||||
" call Decho("(AlignCtrl) AlignCtrl<".s:AlignCtrl."> qty=".s:AlignPatQty." AlignStyle<".s:AlignStyle."> Padding<".s:AlignPrePad."|".s:AlignPostPad."> LeadingWS=".s:AlignLeadKeep." AlignSep=".s:AlignSep)
|
||||
if exists("s:AlignGPat") && !exists("s:AlignVPat")
|
||||
echo "AlignGPat<".s:AlignGPat.">"
|
||||
elseif !exists("s:AlignGPat") && exists("s:AlignVPat")
|
||||
@ -164,7 +165,7 @@ fun! Align#AlignCtrl(...)
|
||||
let ipat= 1
|
||||
while ipat <= s:AlignPatQty
|
||||
echo "Pat".ipat."<".s:AlignPat_{ipat}.">"
|
||||
" call Decho("Pat".ipat."<".s:AlignPat_{ipat}.">")
|
||||
" call Decho("(AlignCtrl) Pat".ipat."<".s:AlignPat_{ipat}.">")
|
||||
let ipat= ipat + 1
|
||||
endwhile
|
||||
|
||||
@ -190,9 +191,8 @@ fun! Align#AlignCtrl(...)
|
||||
call Align#AlignCtrl("g")
|
||||
call Align#AlignCtrl("v")
|
||||
let s:dovisclear = 1
|
||||
let &ic = keep_ic
|
||||
let @/ = keep_search
|
||||
" call Dret("AlignCtrl")
|
||||
call s:RestoreUserOptions()
|
||||
" call Dret("Align#AlignCtrl")
|
||||
return
|
||||
endif
|
||||
|
||||
@ -205,7 +205,7 @@ fun! Align#AlignCtrl(...)
|
||||
endif
|
||||
|
||||
" = : record a list of alignment patterns that are equivalent
|
||||
if style =~# "="
|
||||
if style =~# "=" || (A[0] >= 2 && style !~# "C" && s:AlignCtrl =~# '=')
|
||||
" call Decho("style case =: record list of equiv alignment patterns")
|
||||
let s:AlignCtrl = '='
|
||||
if A[0] >= 2
|
||||
@ -221,7 +221,7 @@ fun! Align#AlignCtrl(...)
|
||||
endif
|
||||
|
||||
"c : cycle through alignment pattern(s)
|
||||
elseif style =~# 'C'
|
||||
elseif style =~# 'C' || (A[0] >= 2 && s:AlignCtrl =~# '=')
|
||||
" call Decho("style case C: cycle through alignment pattern(s)")
|
||||
let s:AlignCtrl = 'C'
|
||||
if A[0] >= 2
|
||||
@ -239,10 +239,9 @@ fun! Align#AlignCtrl(...)
|
||||
let s:AlignPrePad= substitute(style,'^.*p\(\d\+\).*$','\1','')
|
||||
" call Decho("style case p".s:AlignPrePad.": pre-separator padding")
|
||||
if s:AlignPrePad == ""
|
||||
echoerr "AlignCtrl: 'p' needs to be followed by a numeric argument'
|
||||
let @/ = keep_search
|
||||
let &ic= keep_ic
|
||||
" call Dret("AlignCtrl")
|
||||
echoerr "(AlignCtrl) 'p' needs to be followed by a numeric argument'"
|
||||
call s:RestoreUserOptions()
|
||||
" call Dret("Align#AlignCtrl")
|
||||
return
|
||||
endif
|
||||
endif
|
||||
@ -251,10 +250,9 @@ fun! Align#AlignCtrl(...)
|
||||
let s:AlignPostPad= substitute(style,'^.*P\(\d\+\).*$','\1','')
|
||||
" call Decho("style case P".s:AlignPostPad.": post-separator padding")
|
||||
if s:AlignPostPad == ""
|
||||
echoerr "AlignCtrl: 'P' needs to be followed by a numeric argument'
|
||||
let @/ = keep_search
|
||||
let &ic= keep_ic
|
||||
" call Dret("AlignCtrl")
|
||||
echoerr "(AlignCtrl) 'P' needs to be followed by a numeric argument'"
|
||||
call s:RestoreUserOptions()
|
||||
" call Dret("Align#AlignCtrl")
|
||||
return
|
||||
endif
|
||||
endif
|
||||
@ -263,10 +261,10 @@ fun! Align#AlignCtrl(...)
|
||||
" call Decho("style case w: ignore leading whitespace")
|
||||
let s:AlignLeadKeep= 'w'
|
||||
elseif style =~# 'W'
|
||||
" call Decho("style case w: keep leading whitespace")
|
||||
" call Decho("style case W: keep leading whitespace")
|
||||
let s:AlignLeadKeep= 'W'
|
||||
elseif style =~# 'I'
|
||||
" call Decho("style case w: retain initial leading whitespace")
|
||||
" call Decho("style case I: retain initial leading whitespace")
|
||||
let s:AlignLeadKeep= 'I'
|
||||
endif
|
||||
|
||||
@ -274,8 +272,8 @@ fun! Align#AlignCtrl(...)
|
||||
" first list item is a "g" selector pattern
|
||||
" call Decho("style case g: global selector pattern")
|
||||
if A[0] < 2
|
||||
if exists("s:AlignGPat")
|
||||
unlet s:AlignGPat
|
||||
if exists("s:AlignVPat")
|
||||
unlet s:AlignVPat
|
||||
" call Decho("unlet s:AlignGPat")
|
||||
endif
|
||||
else
|
||||
@ -286,8 +284,8 @@ fun! Align#AlignCtrl(...)
|
||||
" first list item is a "v" selector pattern
|
||||
" call Decho("style case v: global selector anti-pattern")
|
||||
if A[0] < 2
|
||||
if exists("s:AlignVPat")
|
||||
unlet s:AlignVPat
|
||||
if exists("s:AlignGPat")
|
||||
unlet s:AlignGPat
|
||||
" call Decho("unlet s:AlignVPat")
|
||||
endif
|
||||
else
|
||||
@ -297,9 +295,9 @@ fun! Align#AlignCtrl(...)
|
||||
endif
|
||||
|
||||
"[-lrc+:] : set up s:AlignStyle
|
||||
if style =~# '[-lrc+:]'
|
||||
if style =~# '[-lrc+:*]'
|
||||
" call Decho("style case [-lrc+:]: field justification")
|
||||
let s:AlignStyle= substitute(style,'[^-lrc:+]','','g')
|
||||
let s:AlignStyle= substitute(style,'[^-lrc:+*]','','g')
|
||||
" call Decho("AlignStyle<".s:AlignStyle.">")
|
||||
endif
|
||||
|
||||
@ -316,11 +314,9 @@ fun! Align#AlignCtrl(...)
|
||||
let s:AlignCtrl= '='
|
||||
endif
|
||||
|
||||
" restore search and options
|
||||
let @/ = keep_search
|
||||
let &ic= keep_ic
|
||||
|
||||
" call Dret("AlignCtrl ".s:AlignCtrl.'p'.s:AlignPrePad.'P'.s:AlignPostPad.s:AlignLeadKeep.s:AlignStyle)
|
||||
" restore options and return
|
||||
call s:RestoreUserOptions()
|
||||
" call Dret("Align#AlignCtrl ".s:AlignCtrl.'p'.s:AlignPrePad.'P'.s:AlignPostPad.s:AlignLeadKeep.s:AlignStyle)
|
||||
return s:AlignCtrl.'p'.s:AlignPrePad.'P'.s:AlignPostPad.s:AlignLeadKeep.s:AlignStyle
|
||||
endfun
|
||||
|
||||
@ -355,6 +351,9 @@ fun! Align#Align(hasctrl,...) range
|
||||
return
|
||||
endif
|
||||
|
||||
" save user options
|
||||
call s:SaveUserOptions()
|
||||
|
||||
" set up a list akin to an argument list
|
||||
if a:0 > 0
|
||||
let A= s:QArgSplitter(a:1)
|
||||
@ -384,7 +383,8 @@ fun! Align#Align(hasctrl,...) range
|
||||
let ipat= 1 + hasctrl
|
||||
while ipat <= A[0]
|
||||
if "" =~ A[ipat]
|
||||
echoerr "Align: separator<".A[ipat]."> matches zero-length string"
|
||||
echoerr "(Align) separator<".A[ipat]."> matches zero-length string"
|
||||
call s:RestoreUserOptions()
|
||||
" call Dret("Align#Align")
|
||||
return
|
||||
endif
|
||||
@ -392,10 +392,8 @@ fun! Align#Align(hasctrl,...) range
|
||||
endwhile
|
||||
|
||||
" record current search pattern for subsequent restoration
|
||||
let keep_search= @/
|
||||
let keep_ic = &ic
|
||||
let keep_report= &report
|
||||
set noic report=10000
|
||||
" (these are all global-only options)
|
||||
set noic report=10000 nohls
|
||||
|
||||
if A[0] > hasctrl
|
||||
" Align will accept a list of separator regexps
|
||||
@ -447,17 +445,32 @@ fun! Align#Align(hasctrl,...) range
|
||||
let begline = a:lastline
|
||||
let endline = a:firstline
|
||||
endif
|
||||
|
||||
" Expand range to cover align-able lines when the given range is only the current line.
|
||||
" Look for the first line above the current line that matches the first separator pattern, and
|
||||
" look for the last line below the current line that matches the first separator pattern.
|
||||
if begline == endline
|
||||
" call Decho("case begline == endline")
|
||||
if !exists("s:AlignPat_{1}")
|
||||
echohl Error|echo "(Align) no separators specified!"|echohl None
|
||||
call s:RestoreUserOptions()
|
||||
" call Dret("Align#Align")
|
||||
return
|
||||
endif
|
||||
let seppat = s:AlignPat_{1}
|
||||
let begline= search('^\%(\%('.seppat.'\)\@!.\)*$',"bnW")
|
||||
if begline == 0|let begline= 1|else|let begline= begline + 1|endif
|
||||
let endline= search('^\%(\%('.seppat.'\)\@!.\)*$',"nW")
|
||||
if endline == 0|let endline= line("$")|else|let endline= endline - 1|endif
|
||||
" call Decho("begline=".begline." endline=".endline." curline#".line("."))
|
||||
endif
|
||||
" call Decho("begline=".begline." endline=".endline)
|
||||
let fieldcnt = 0
|
||||
if (begline == line("'>") && endline == line("'<")) || (begline == line("'<") && endline == line("'>"))
|
||||
let vmode= visualmode()
|
||||
" call Decho("vmode=".vmode)
|
||||
if vmode == "\<c-v>"
|
||||
if exists("g:Align_xstrlen") && g:Align_xstrlen
|
||||
let ragged = ( col("'>") > s:Strlen(getline("'>")) || col("'<") > s:Strlen(getline("'<")) )
|
||||
else
|
||||
let ragged = ( col("'>") > strlen(getline("'>")) || col("'<") > strlen(getline("'<")) )
|
||||
endif
|
||||
else
|
||||
let ragged= 1
|
||||
endif
|
||||
@ -469,10 +482,14 @@ fun! Align#Align(hasctrl,...) range
|
||||
endif
|
||||
" call Decho("lines[".begline.",".endline."] col[".begcol.",".endcol."] ragged=".ragged." AlignCtrl<".s:AlignCtrl.">")
|
||||
|
||||
" Keep user options
|
||||
let etkeep = &l:et
|
||||
let pastekeep= &l:paste
|
||||
setlocal et paste
|
||||
" record initial whitespace
|
||||
if s:AlignLeadKeep == 'W'
|
||||
let wskeep = map(getline(begline,endline),"substitute(v:val,'^\\(\\s*\\).\\{-}$','\\1','')")
|
||||
endif
|
||||
|
||||
" Align needs these options
|
||||
setl et
|
||||
set paste
|
||||
|
||||
" convert selected range of lines to use spaces instead of tabs
|
||||
" but if first line's initial white spaces are to be retained
|
||||
@ -480,11 +497,30 @@ fun! Align#Align(hasctrl,...) range
|
||||
if begcol <= 0 && s:AlignLeadKeep == 'I'
|
||||
" retain first leading whitespace for all subsequent lines
|
||||
let bgntxt= substitute(getline(begline),'^\(\s*\).\{-}$','\1','')
|
||||
|
||||
" exception: retain first leading whitespace predicated on g and v patterns
|
||||
" if such a selected line exists
|
||||
if exists("s:AlignGPat")
|
||||
let firstgline= search(s:AlignGPat,"cnW",endline)
|
||||
if firstgline > 0
|
||||
let bgntxt= substitute(getline(firstgline),'^\(\s*\).\{-}$','\1','')
|
||||
endif
|
||||
elseif exists("s:AlignVPat")
|
||||
let firstvline= search(s:AlignVPat,"cnW",endline)
|
||||
if firstvline > 0
|
||||
let bgntxt= substitute('^\%(\%('.getline(firstvline).')\@!\)*$','^\(\s*\).\{-}$','\1','')
|
||||
endif
|
||||
endif
|
||||
" call Decho("retaining 1st leading whitespace: bgntxt<".bgntxt.">")
|
||||
set noet
|
||||
let &l:et= s:keep_et
|
||||
endif
|
||||
exe begline.",".endline."ret"
|
||||
|
||||
" record transformed to spaces leading whitespace
|
||||
if s:AlignLeadKeep == 'W'
|
||||
let wsblanks = map(getline(begline,endline),"substitute(v:val,'^\\(\\s*\\).\\{-}$','\\1','')")
|
||||
endif
|
||||
|
||||
" Execute two passes
|
||||
" First pass: collect alignment data (max field sizes)
|
||||
" Second pass: perform alignment
|
||||
@ -528,11 +564,7 @@ fun! Align#Align(hasctrl,...) range
|
||||
endif
|
||||
|
||||
" Extract visual-block selected text (init bgntxt, endtxt)
|
||||
if exists("g:Align_xstrlen") && g:Align_xstrlen
|
||||
let txtlen= s:Strlen(txt)
|
||||
else
|
||||
let txtlen= strlen(txt)
|
||||
endif
|
||||
if begcol > 0
|
||||
" Record text to left of selected area
|
||||
let bgntxt= strpart(txt,0,begcol)
|
||||
@ -557,7 +589,8 @@ fun! Align#Align(hasctrl,...) range
|
||||
" call Decho("Pass".pass.": txt<". txt .">")
|
||||
" call Decho("Pass".pass.": endtxt<".endtxt.">")
|
||||
if !exists("s:AlignPat_{1}")
|
||||
echohl Error|echo "no separators specified!"|echohl None
|
||||
echohl Error|echo "(Align) no separators specified!"|echohl None
|
||||
call s:RestoreUserOptions()
|
||||
" call Dret("Align#Align")
|
||||
return
|
||||
endif
|
||||
@ -575,7 +608,7 @@ fun! Align#Align(hasctrl,...) range
|
||||
let alignpostpad= s:AlignPostPad
|
||||
let alignsep = s:AlignSep
|
||||
let alignophold = " "
|
||||
let alignop = "l"
|
||||
let alignop = 'l'
|
||||
" call Decho("Pass".pass.": initial alignstyle<".alignstyle."> seppat<".seppat.">")
|
||||
|
||||
" Process each field on the line
|
||||
@ -606,16 +639,34 @@ fun! Align#Align(hasctrl,...) range
|
||||
endif
|
||||
endif
|
||||
|
||||
" cylic separator alignment specification handling
|
||||
" cyclic separator alignment specification handling
|
||||
let alignsepop= strpart(alignsep,0,1)
|
||||
let alignsep = strpart(alignsep,1).alignsepop
|
||||
|
||||
" ------------------------------------------------------
|
||||
" mark end-of-field and the subsequent end-of-separator.
|
||||
" Extend field if alignop is '-'
|
||||
" ------------------------------------------------------
|
||||
let endfield = match(txt,seppat,bgnfield)
|
||||
let sepfield = matchend(txt,seppat,bgnfield)
|
||||
let skipfield= sepfield
|
||||
" call Decho("Pass".pass.": endfield=match(txt<".txt.">,seppat<".seppat.">,bgnfield=".bgnfield.")=".endfield)
|
||||
" call Decho("Pass".pass.": endfield=match(txt<".txt.">,seppat<".seppat.">,bgnfield=".bgnfield.")=".endfield." alignop=".alignop)
|
||||
|
||||
" Mark eof: Extend field if alignop is '*' and AlignSkip() is true.
|
||||
if alignop == '*' && exists("g:AlignSkip") && type(g:AlignSkip) == 2
|
||||
" call Decho("Pass".pass.": endfield=match(txt<".txt.">,seppat<".seppat.">,bgnfield=".bgnfield.")=".endfield." alignop=".alignop)
|
||||
" a '*' acts like a '-' while the g:AlignSkip function reference is true except that alignop doesn't advance
|
||||
while g:AlignSkip(line,endfield) && endfield != -1
|
||||
let endfield = match(txt,seppat,skipfield)
|
||||
let sepfield = matchend(txt,seppat,skipfield)
|
||||
let skipfield = sepfield
|
||||
" call Decho("Pass".pass.": extend field: endfield<".strpart(txt,bgnfield,endfield-bgnfield)."> alignop<".alignop."> alignstyle<".alignstyle.">")
|
||||
endwhile
|
||||
let alignop = strpart(alignstyle,0,1)
|
||||
let alignstyle= strpart(alignstyle,1).strpart(alignstyle,0,1)
|
||||
" call Decho("Pass".pass.": endfield=match(txt<".txt.">,seppat<".seppat.">,bgnfield=".bgnfield.")=".endfield." alignop=".alignop." (after *)")
|
||||
endif
|
||||
|
||||
" Mark eof: Extend field if alignop is '-'
|
||||
while alignop == '-' && endfield != -1
|
||||
let endfield = match(txt,seppat,skipfield)
|
||||
let sepfield = matchend(txt,seppat,skipfield)
|
||||
@ -637,11 +688,7 @@ fun! Align#Align(hasctrl,...) range
|
||||
let field = bgntxt.field
|
||||
let bgntxt= ""
|
||||
endif
|
||||
if exists("g:Align_xstrlen") && g:Align_xstrlen
|
||||
let fieldlen = s:Strlen(field)
|
||||
else
|
||||
let fieldlen = strlen(field)
|
||||
endif
|
||||
let sFieldSize = "FieldSize_".ifield
|
||||
if !exists(sFieldSize)
|
||||
let FieldSize_{ifield}= fieldlen
|
||||
@ -675,11 +722,7 @@ fun! Align#Align(hasctrl,...) range
|
||||
let prepad = 0
|
||||
let postpad= 0
|
||||
endif
|
||||
if exists("g:Align_xstrlen") && g:Align_xstrlen
|
||||
let fieldlen = s:Strlen(field)
|
||||
else
|
||||
let fieldlen = strlen(field)
|
||||
endif
|
||||
let sep = s:MakeSpace(prepad).strpart(txt,endfield,sepfield-endfield).s:MakeSpace(postpad)
|
||||
if seplen < SepSize_{ifield}
|
||||
if alignsepop == "<"
|
||||
@ -746,7 +789,7 @@ fun! Align#Align(hasctrl,...) range
|
||||
" call Decho("Pass".pass.": bgntxt<".bgntxt."> line=".line)
|
||||
" call Decho("Pass".pass.": newtxt<".newtxt.">")
|
||||
" call Decho("Pass".pass.": endtxt<".endtxt.">")
|
||||
call setline(line,bgntxt.newtxt.endtxt)
|
||||
keepj call setline(line,bgntxt.newtxt.endtxt)
|
||||
endif
|
||||
|
||||
let line = line + 1
|
||||
@ -756,9 +799,18 @@ fun! Align#Align(hasctrl,...) range
|
||||
endwhile " pass loop
|
||||
" call Decho("end of two pass loop")
|
||||
|
||||
" Restore user options
|
||||
let &l:et = etkeep
|
||||
let &l:paste = pastekeep
|
||||
" restore original leading whitespace
|
||||
if s:AlignLeadKeep == 'W'
|
||||
let iline= begline
|
||||
let i = 0
|
||||
" call Decho("restore original leading whitespace")
|
||||
while iline <= endline
|
||||
" call Decho("exe ".iline."s/^".wsblanks[i]."/".wskeep[i]."/")
|
||||
exe "keepj ".iline."s/^".wsblanks[i]."/".wskeep[i]."/"
|
||||
let iline= iline + 1
|
||||
let i = i + 1
|
||||
endwhile
|
||||
endif
|
||||
|
||||
if exists("s:DoAlignPop")
|
||||
" AlignCtrl Map support
|
||||
@ -766,11 +818,8 @@ fun! Align#Align(hasctrl,...) range
|
||||
unlet s:DoAlignPop
|
||||
endif
|
||||
|
||||
" restore current search pattern
|
||||
let @/ = keep_search
|
||||
let &ic = keep_ic
|
||||
let &report = keep_report
|
||||
|
||||
" restore user options and return
|
||||
call s:RestoreUserOptions()
|
||||
" call Dret("Align#Align")
|
||||
return
|
||||
endfun
|
||||
@ -778,7 +827,7 @@ endfun
|
||||
" ---------------------------------------------------------------------
|
||||
" Align#AlignPush: this command/function pushes an alignment control string onto a stack {{{1
|
||||
fun! Align#AlignPush()
|
||||
" call Dfunc("AlignPush()")
|
||||
" call Dfunc("Align#AlignPush()")
|
||||
|
||||
" initialize the stack
|
||||
if !exists("s:AlignCtrlStackQty")
|
||||
@ -806,7 +855,7 @@ fun! Align#AlignPush()
|
||||
let s:AlignVPat_{s:AlignCtrlStackQty}= ""
|
||||
endif
|
||||
|
||||
" call Dret("AlignPush")
|
||||
" call Dret("Align#AlignPush")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
@ -817,13 +866,13 @@ fun! Align#AlignPop()
|
||||
|
||||
" sanity checks
|
||||
if !exists("s:AlignCtrlStackQty")
|
||||
echoerr "AlignPush needs to be used prior to AlignPop"
|
||||
echoerr "(AlignPop) AlignPush needs to be used prior to AlignPop"
|
||||
" call Dret("Align#AlignPop <> : AlignPush needs to have been called first")
|
||||
return ""
|
||||
endif
|
||||
if s:AlignCtrlStackQty <= 0
|
||||
unlet s:AlignCtrlStackQty
|
||||
echoerr "AlignPush needs to be used prior to AlignPop"
|
||||
echoerr "(AlignPop) AlignPush needs to be used prior to AlignPop"
|
||||
" call Dret("Align#AlignPop <> : AlignPop needs to have been called first")
|
||||
return ""
|
||||
endif
|
||||
@ -858,14 +907,10 @@ endfun
|
||||
" ---------------------------------------------------------------------
|
||||
" Align#AlignReplaceQuotedSpaces: {{{1
|
||||
fun! Align#AlignReplaceQuotedSpaces()
|
||||
" call Dfunc("AlignReplaceQuotedSpaces()")
|
||||
" call Dfunc("Align#AlignReplaceQuotedSpaces()")
|
||||
|
||||
let l:line = getline(line("."))
|
||||
if exists("g:Align_xstrlen") && g:Align_xstrlen
|
||||
let l:linelen = s:Strlen(l:line)
|
||||
else
|
||||
let l:linelen = strlen(l:line)
|
||||
endif
|
||||
let l:startingPos = 0
|
||||
let l:startQuotePos = 0
|
||||
let l:endQuotePos = 0
|
||||
@ -876,27 +921,27 @@ fun! Align#AlignReplaceQuotedSpaces()
|
||||
while (1)
|
||||
let l:startQuotePos = match(l:line, l:quoteRe, l:startingPos)
|
||||
if (l:startQuotePos < 0)
|
||||
" "call Decho("No more quotes to the end of line")
|
||||
" call Decho("No more quotes to the end of line")
|
||||
break
|
||||
endif
|
||||
let l:endQuotePos = match(l:line, l:quoteRe, l:startQuotePos + 1)
|
||||
if (l:endQuotePos < 0)
|
||||
" "call Decho("Mismatched quotes")
|
||||
" call Decho("Mismatched quotes")
|
||||
break
|
||||
endif
|
||||
let l:spaceReplaceRe = '^.\{' . (l:startQuotePos + 1) . '}.\{-}\zs\s\ze.*.\{' . (linelen - l:endQuotePos) . '}$'
|
||||
" "call Decho('spaceReplaceRe="' . l:spaceReplaceRe . '"')
|
||||
" call Decho('spaceReplaceRe="' . l:spaceReplaceRe . '"')
|
||||
let l:newStr = substitute(l:line, l:spaceReplaceRe, '%', '')
|
||||
while (l:newStr != l:line)
|
||||
" "call Decho('newstr="' . l:newStr . '"')
|
||||
" call Decho('newstr="' . l:newStr . '"')
|
||||
let l:line = l:newStr
|
||||
let l:newStr = substitute(l:line, l:spaceReplaceRe, '%', '')
|
||||
endwhile
|
||||
let l:startingPos = l:endQuotePos + 1
|
||||
endwhile
|
||||
call setline(line('.'), l:line)
|
||||
keepj call setline(line('.'), l:line)
|
||||
|
||||
" call Dret("AlignReplaceQuotedSpaces")
|
||||
" call Dret("Align#AlignReplaceQuotedSpaces")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
@ -923,19 +968,20 @@ fun! s:QArgSplitter(qarg)
|
||||
while args != ""
|
||||
let iarg = 0
|
||||
let arglen = strlen(args)
|
||||
" call Decho("args[".iarg."]<".args[iarg]."> arglen=".arglen)
|
||||
" call Decho(".args[".iarg."]<".args[iarg]."> arglen=".arglen)
|
||||
" find index to first not-escaped '"'
|
||||
" call Decho("find index to first not-escaped \"")
|
||||
while args[iarg] != '"' && iarg < arglen
|
||||
if args[iarg] == '\'
|
||||
let args= strpart(args,1)
|
||||
endif
|
||||
let iarg= iarg + 1
|
||||
endwhile
|
||||
" call Decho("args<".args."> iarg=".iarg." arglen=".arglen)
|
||||
" call Decho(".args<".args."> iarg=".iarg." arglen=".arglen)
|
||||
|
||||
if iarg > 0
|
||||
" handle left of quote or remaining section
|
||||
" call Decho("handle left of quote or remaining section")
|
||||
" call Decho(".handle left of quote or remaining section")
|
||||
if args[iarg] == '"'
|
||||
let qarglist= qarglist + split(strpart(args,0,iarg-1))
|
||||
else
|
||||
@ -946,7 +992,7 @@ fun! s:QArgSplitter(qarg)
|
||||
|
||||
elseif iarg < arglen && args[0] == '"'
|
||||
" handle "quoted" section
|
||||
" call Decho("handle quoted section")
|
||||
" call Decho(".handle quoted section")
|
||||
let iarg= 1
|
||||
while args[iarg] != '"' && iarg < arglen
|
||||
if args[iarg] == '\'
|
||||
@ -954,7 +1000,7 @@ fun! s:QArgSplitter(qarg)
|
||||
endif
|
||||
let iarg= iarg + 1
|
||||
endwhile
|
||||
" call Decho("args<".args."> iarg=".iarg." arglen=".arglen)
|
||||
" call Decho(".args<".args."> iarg=".iarg." arglen=".arglen)
|
||||
if args[iarg] == '"'
|
||||
call add(qarglist,strpart(args,1,iarg-1))
|
||||
let args= strpart(args,iarg+1)
|
||||
@ -963,12 +1009,14 @@ fun! s:QArgSplitter(qarg)
|
||||
let args = ""
|
||||
endif
|
||||
endif
|
||||
" call Decho("qarglist".string(qarglist)." iarg=".iarg." args<".args.">")
|
||||
" call Decho(".qarglist".string(qarglist)." iarg=".iarg." args<".args.">")
|
||||
endwhile
|
||||
" call Decho("end of loop (handling quoted arguments)")
|
||||
|
||||
else
|
||||
" split at all whitespace
|
||||
let qarglist= split(a:qarg)
|
||||
" call Decho("split at all whitespace")
|
||||
let qarglist= split(a:qarg,"[ \t]")
|
||||
endif
|
||||
|
||||
let qarglistlen= len(qarglist)
|
||||
@ -984,8 +1032,13 @@ endfun
|
||||
" nonzero value. Solution from Nicolai Weibull, vim docs
|
||||
" (:help strlen()), Tony Mechelynck, and my own invention.
|
||||
fun! s:Strlen(x)
|
||||
" call Dfunc("s:Strlen(x<".a:x.">")
|
||||
if g:Align_xstrlen == 1
|
||||
" call Dfunc("s:Strlen(x<".a:x."> g:Align_xstrlen=".g:Align_xstrlen)
|
||||
|
||||
if type(g:Align_xstrlen) == 1
|
||||
" allow user to specify a function to compute the string length
|
||||
exe "let ret= ".g:Align_xstrlen."('".substitute(a:x,"'","''","g")."')"
|
||||
|
||||
elseif g:Align_xstrlen == 1
|
||||
" number of codepoints (Latin a + combining circumflex is two codepoints)
|
||||
" (comment from TM, solution from NW)
|
||||
let ret= strlen(substitute(a:x,'.','c','g'))
|
||||
@ -1010,12 +1063,58 @@ fun! s:Strlen(x)
|
||||
|
||||
else
|
||||
" at least give a decent default
|
||||
ret= strlen(a:x)
|
||||
if v:version >= 703
|
||||
let ret= strdisplaywidth(a:x)
|
||||
else
|
||||
let ret= strlen(a:x)
|
||||
endif
|
||||
endif
|
||||
" call Dret("s:Strlen ".ret)
|
||||
return ret
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" s:SaveUserOptions: {{{1
|
||||
fun! s:SaveUserOptions()
|
||||
" call Dfunc("s:SaveUserOptions() s:saved_user_options=".(exists("s:saved_user_options")? s:saved_user_options : 'n/a'))
|
||||
if !exists("s:saved_user_options")
|
||||
let s:saved_user_options = 1
|
||||
let s:keep_search = @/
|
||||
let s:keep_et = &l:et
|
||||
let s:keep_hls = &hls
|
||||
let s:keep_ic = &ic
|
||||
let s:keep_paste = &paste
|
||||
let s:keep_report = &report
|
||||
else
|
||||
let s:saved_user_options = s:saved_user_options + 1
|
||||
endif
|
||||
" call Dret("s:SaveUserOptions : s:saved_user_options=".s:saved_user_options)
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" s:RestoreUserOptions: {{{1
|
||||
fun! s:RestoreUserOptions()
|
||||
" call Dfunc("s:RestoreUserOptions() s:saved_user_options=".(exists("s:saved_user_options")? s:saved_user_options : 'n/a'))
|
||||
if exists("s:saved_user_options") && s:saved_user_options == 1
|
||||
let @/ = s:keep_search
|
||||
let &l:et = s:keep_et
|
||||
let &hls = s:keep_hls
|
||||
let &ic = s:keep_ic
|
||||
let &paste = s:keep_paste
|
||||
let &report = s:keep_report
|
||||
unlet s:keep_search
|
||||
unlet s:keep_et
|
||||
unlet s:keep_hls
|
||||
unlet s:keep_ic
|
||||
unlet s:keep_paste
|
||||
unlet s:keep_report
|
||||
unlet s:saved_user_options
|
||||
elseif exists("s:saved_user_options")
|
||||
let s:saved_user_options= s:saved_user_options - 1
|
||||
endif
|
||||
" call Dret("s:RestoreUserOptions : s:saved_user_options=".(exists("s:saved_user_options")? s:saved_user_options : 'n/a'))
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" Set up default values: {{{1
|
||||
"call Decho("-- Begin AlignCtrl Initialization --")
|
||||
|
@ -1,15 +1,25 @@
|
||||
" AlignMaps.vim : support functions for AlignMaps
|
||||
" Author: Charles E. Campbell, Jr.
|
||||
" Date: Mar 03, 2009
|
||||
" Version: 41
|
||||
" Date: Jun 18, 2012
|
||||
" Version: 42
|
||||
" Copyright: Copyright (C) 1999-2012 Charles E. Campbell, Jr. {{{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
|
||||
"redraw!|call DechoSep()|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
|
||||
" ---------------------------------------------------------------------
|
||||
" Load Once: {{{1
|
||||
if &cp || exists("g:loaded_AlignMaps")
|
||||
finish
|
||||
endif
|
||||
let g:loaded_AlignMaps= "v41"
|
||||
let g:loaded_AlignMaps= "v42"
|
||||
let s:keepcpo = &cpo
|
||||
set cpo&vim
|
||||
"DechoTabOn
|
||||
|
||||
" =====================================================================
|
||||
" Functions: {{{1
|
||||
@ -20,7 +30,7 @@ fun! AlignMaps#WrapperStart(vis) range
|
||||
" call Dfunc("AlignMaps#WrapperStart(vis=".a:vis.")")
|
||||
|
||||
if a:vis
|
||||
norm! '<ma'>
|
||||
keepj norm! '<ma'>
|
||||
endif
|
||||
|
||||
if line("'y") == 0 || line("'z") == 0 || !exists("s:alignmaps_wrapcnt") || s:alignmaps_wrapcnt <= 0
|
||||
@ -34,22 +44,22 @@ fun! AlignMaps#WrapperStart(vis) range
|
||||
let s:alignmaps_posn = SaveWinPosn(0)
|
||||
" set up fencepost blank lines
|
||||
put =''
|
||||
norm! mz'a
|
||||
keepj norm! mz'a
|
||||
put! =''
|
||||
ky
|
||||
let s:alignmaps_zline = line("'z")
|
||||
exe "'y,'zs/@/\177/ge"
|
||||
exe "keepj 'y,'zs/@/\177/ge"
|
||||
else
|
||||
" call Decho("embedded wrapper")
|
||||
let s:alignmaps_wrapcnt = s:alignmaps_wrapcnt + 1
|
||||
norm! 'yjma'zk
|
||||
keepj norm! 'yjma'zk
|
||||
endif
|
||||
|
||||
" change some settings to align-standard values
|
||||
set nogd
|
||||
set ch=2
|
||||
AlignPush
|
||||
norm! 'zk
|
||||
keepj norm! 'zk
|
||||
" call Dret("AlignMaps#WrapperStart : alignmaps_wrapcnt=".s:alignmaps_wrapcnt." my=".line("'y")." mz=".line("'z"))
|
||||
endfun
|
||||
|
||||
@ -59,7 +69,7 @@ fun! AlignMaps#WrapperEnd() range
|
||||
" call Dfunc("AlignMaps#WrapperEnd() alignmaps_wrapcnt=".s:alignmaps_wrapcnt." my=".line("'y")." mz=".line("'z"))
|
||||
|
||||
" remove trailing white space introduced by whatever in the modification zone
|
||||
'y,'zs/ \+$//e
|
||||
keepj 'y,'zs/ \+$//e
|
||||
|
||||
" restore AlignCtrl settings
|
||||
AlignPop
|
||||
@ -67,14 +77,14 @@ fun! AlignMaps#WrapperEnd() range
|
||||
let s:alignmaps_wrapcnt= s:alignmaps_wrapcnt - 1
|
||||
if s:alignmaps_wrapcnt <= 0
|
||||
" initial wrapper ending
|
||||
exe "'y,'zs/\177/@/ge"
|
||||
exe "keepj 'y,'zs/\177/@/ge"
|
||||
|
||||
" if the 'z line hasn't moved, then go ahead and restore window position
|
||||
let zstationary= s:alignmaps_zline == line("'z")
|
||||
|
||||
" remove fencepost blank lines.
|
||||
" restore 'a
|
||||
norm! 'yjmakdd'zdd
|
||||
keepj norm! 'yjmakdd'zdd
|
||||
|
||||
" restore original 'y, 'z, and window positioning
|
||||
call RestoreMark(s:alignmaps_keepmy)
|
||||
@ -135,10 +145,10 @@ fun! AlignMaps#CharJoiner(chr)
|
||||
let aline = line("'a")
|
||||
let rep = line(".") - aline
|
||||
while rep > 0
|
||||
norm! 'a
|
||||
keepj norm! 'a
|
||||
while match(getline(aline),a:chr . "\s*$") != -1 && rep >= 0
|
||||
" while = at end-of-line, delete it and join with next
|
||||
norm! 'a$
|
||||
keepj norm! 'a$
|
||||
j!
|
||||
let rep = rep - 1
|
||||
endwhile
|
||||
@ -149,7 +159,7 @@ fun! AlignMaps#CharJoiner(chr)
|
||||
break
|
||||
endif
|
||||
" prepare for next line
|
||||
norm! jma
|
||||
keepj norm! jma
|
||||
let aline = line("'a")
|
||||
endwhile
|
||||
" call Dret("AlignMaps#CharJoiner")
|
||||
@ -159,31 +169,32 @@ endfun
|
||||
" AlignMaps#Equals: supports \t= and \T= {{{2
|
||||
fun! AlignMaps#Equals() range
|
||||
" call Dfunc("AlignMaps#Equals()")
|
||||
'a,'zs/\s\+\([*/+\-%|&\~^]\==\)/ \1/e
|
||||
'a,'zs@ \+\([*/+\-%|&\~^]\)=@\1=@ge
|
||||
'a,'zs/==/\="\<Char-0x0f>\<Char-0x0f>"/ge
|
||||
'a,'zs/\([!<>:]\)=/\=submatch(1)."\<Char-0x0f>"/ge
|
||||
norm g'zk
|
||||
keepj 'a,'zs/\s\+\([*/+\-%|&\~^]\==\)/ \1/e
|
||||
keepj 'a,'zs@ \+\([*/+\-%|&\~^]\)=@\1=@ge
|
||||
keepj 'a,'zs/==/\="\<Char-0x0f>\<Char-0x0f>"/ge
|
||||
keepj 'a,'zs/\([!<>:]\)=/\=submatch(1)."\<Char-0x0f>"/ge
|
||||
keepj norm g'zk
|
||||
AlignCtrl mIp1P1=l =
|
||||
AlignCtrl g =
|
||||
'a,'z-1Align
|
||||
'a,'z-1s@\([*/+\-%|&\~^!=]\)\( \+\)=@\2\1=@ge
|
||||
'a,'z-1s/\( \+\);/;\1/ge
|
||||
keepj 'a,'z-1Align
|
||||
keepj 'a,'z-1s@\([*/%|&\~^!=]\)\( \+\)=@\2\1=@ge
|
||||
keepj 'a,'z-1s@[^+\-]\zs\([+\-]\)\( \+\)=@\2\1=@ge
|
||||
keepj 'a,'z-1s/\( \+\);/;\1/ge
|
||||
if &ft == "c" || &ft == "cpp"
|
||||
" call Decho("exception for ".&ft)
|
||||
'a,'z-1v/^\s*\/[*/]/s/\/[*/]/@&@/e
|
||||
'a,'z-1v/^\s*\/[*/]/s/\*\//@&/e
|
||||
keepj 'a,'z-1v/^\s*\/[*/]/s/\/[*/]/@&@/e
|
||||
keepj 'a,'z-1v/^\s*\/[*/]/s/\*\//@&/e
|
||||
if exists("g:mapleader")
|
||||
exe "norm 'zk"
|
||||
exe "keepj norm 'zk"
|
||||
call AlignMaps#StdAlign(1)
|
||||
else
|
||||
exe "norm 'zk"
|
||||
exe "keepj norm 'zk"
|
||||
call AlignMaps#StdAlign(1)
|
||||
endif
|
||||
'y,'zs/^\(\s*\) @/\1/e
|
||||
keepj 'y,'zs/^\(\s*\) @/\1/e
|
||||
endif
|
||||
'a,'z-1s/\%x0f/=/ge
|
||||
'y,'zs/ @//eg
|
||||
keepj 'a,'z-1s/\%x0f/=/ge
|
||||
keepj 'y,'zs/ @//eg
|
||||
" call Dret("AlignMaps#Equals")
|
||||
endfun
|
||||
|
||||
@ -194,10 +205,11 @@ fun! AlignMaps#Afnc()
|
||||
" call Dfunc("AlignMaps#Afnc()")
|
||||
|
||||
" keep display quiet
|
||||
let chkeep = &ch
|
||||
let gdkeep = &gd
|
||||
let vekeep = &ve
|
||||
set ch=2 nogd ve=
|
||||
let chkeep = &l:ch
|
||||
let gdkeep = &l:gd
|
||||
let wwkeep = &l:ww
|
||||
let vekeep = &l:ve
|
||||
setlocal ch=2 nogd ve= ww=b,s,<,>,[,]
|
||||
|
||||
" will use marks y,z ; save current values
|
||||
let mykeep = SaveMark("'y")
|
||||
@ -206,7 +218,7 @@ fun! AlignMaps#Afnc()
|
||||
" Find beginning of function -- be careful to skip over comments
|
||||
let cmmntid = synIDtrans(hlID("Comment"))
|
||||
let stringid = synIDtrans(hlID("String"))
|
||||
exe "norm! ]]"
|
||||
exe "keepj norm! ]]"
|
||||
while search(")","bW") != 0
|
||||
" call Decho("line=".line(".")." col=".col("."))
|
||||
let parenid= synIDtrans(synID(line("."),col("."),1))
|
||||
@ -214,23 +226,23 @@ fun! AlignMaps#Afnc()
|
||||
break
|
||||
endif
|
||||
endwhile
|
||||
norm! %my
|
||||
s/(\s*\(\S\)/(\r \1/e
|
||||
exe "norm! `y%"
|
||||
s/)\s*\(\/[*/]\)/)\r\1/e
|
||||
exe "norm! `y%mz"
|
||||
'y,'zs/\s\+$//e
|
||||
'y,'zs/^\s\+//e
|
||||
'y+1,'zs/^/ /
|
||||
keepj norm! %my
|
||||
keepj s/(\s*\(\S\)/(\r \1/e
|
||||
exe "keepj norm! `y%"
|
||||
keepj s/)\s*\(\/[*/]\)/)\r\1/e
|
||||
exe "keepj norm! `y%mz"
|
||||
keepj 'y,'zs/\s\+$//e
|
||||
keepj 'y,'zs/^\s\+//e
|
||||
keepj 'y+1,'zs/^/ /
|
||||
|
||||
" insert newline after every comma only one parenthesis deep
|
||||
sil! exe "norm! `y\<right>h"
|
||||
exe "sil! keepj norm! `y\<right>h"
|
||||
let parens = 1
|
||||
let cmmnt = 0
|
||||
let cmmntline= -1
|
||||
while parens >= 1
|
||||
" call Decho("parens=".parens." @a=".@a)
|
||||
exe 'norm! ma "ay`a '
|
||||
exe 'keepj norm! ma "ay`a '
|
||||
" call Decho("parens=".parens." cmmnt=".cmmnt." cmmntline=".cmmntline." line(.)=".line(".")." @a<".@a."> line<".getline(".").">")
|
||||
if @a == "("
|
||||
let parens= parens + 1
|
||||
elseif @a == ")"
|
||||
@ -261,41 +273,42 @@ fun! AlignMaps#Afnc()
|
||||
endif
|
||||
|
||||
elseif @a == "," && parens == 1 && cmmnt == 0
|
||||
exe "norm! i\<CR>\<Esc>"
|
||||
exe "keepj norm! i\<CR>\<Esc>"
|
||||
endif
|
||||
endwhile
|
||||
norm! `y%mz%
|
||||
sil! 'y,'zg/^\s*$/d
|
||||
sil! keepj norm! `y%mz%
|
||||
sil! keepj 'y,'zg/^\s*$/d
|
||||
|
||||
" perform substitutes to mark fields for Align
|
||||
sil! 'y+1,'zv/^\//s/^\s\+\(\S\)/ \1/e
|
||||
sil! 'y+1,'zv/^\//s/\(\S\)\s\+/\1 /eg
|
||||
sil! 'y+1,'zv/^\//s/\* \+/*/ge
|
||||
sil! 'y+1,'zv/^\//s/\w\zs\s*\*/ */ge
|
||||
sil! keepj 'y+1,'zv/^\//s/^\s\+\(\S\)/ \1/e
|
||||
sil! keepj 'y+1,'zv/^\//s/\(\S\)\s\+/\1 /eg
|
||||
sil! keepj 'y+1,'zv/^\//s/\* \+/*/ge
|
||||
sil! keepj 'y+1,'zv/^\//s/\w\zs\s*\*/ */ge
|
||||
" func
|
||||
" ws <- declaration -> <-ptr -> <-var-> <-[array][] -> <-glop-> <-end->
|
||||
sil! 'y+1,'zv/^\//s/^\s*\(\(\K\k*\s*\)\+\)\s\+\([(*]*\)\s*\(\K\k*\)\s*\(\(\[.\{-}]\)*\)\s*\(.\{-}\)\=\s*\([,)]\)\s*$/ \1@#\3@\4\5@\7\8/e
|
||||
sil! 'y+1,'z+1g/^\s*\/[*/]/norm! kJ
|
||||
sil! 'y+1,'z+1s%/[*/]%@&@%ge
|
||||
sil! 'y+1,'z+1s%*/%@&%ge
|
||||
sil! keepj 'y+1,'zv/^\//s/^\s*\(\(\K\k*\s*\)\+\)\s\+\([(*]*\)\s*\(\K\k*\)\s*\(\(\[.\{-}]\)*\)\s*\(.\{-}\)\=\s*\([,)]\)\s*$/ \1@#\3@\4\5@\7\8/e
|
||||
sil! keepj 'y+1,'z+1g/^\s*\/[*/]/norm! kJ
|
||||
sil! keepj 'y+1,'z+1s%/[*/]%@&@%ge
|
||||
sil! keepj 'y+1,'z+1s%*/%@&%ge
|
||||
AlignCtrl mIp0P0=l @
|
||||
sil! 'y+1,'zAlign
|
||||
sil! 'y,'zs%@\(/[*/]\)@%\t\1 %e
|
||||
sil! 'y,'zs%@\*/% */%e
|
||||
sil! 'y,'zs/@\([,)]\)/\1/
|
||||
sil! 'y,'zs/@/ /
|
||||
sil! keepj 'y+1,'zAlign
|
||||
sil! keepj 'y,'zs%@\(/[*/]\)@%\t\1 %e
|
||||
sil! keepj 'y,'zs%@\*/% */%e
|
||||
sil! keepj 'y,'zs/@\([,)]\)/\1/
|
||||
sil! keepj 'y,'zs/@/ /
|
||||
AlignCtrl mIlrp0P0= # @
|
||||
sil! 'y+1,'zAlign
|
||||
sil! 'y+1,'zs/#/ /
|
||||
sil! 'y+1,'zs/@//
|
||||
sil! 'y+1,'zs/\(\s\+\)\([,)]\)/\2\1/e
|
||||
sil! keepj 'y+1,'zAlign
|
||||
sil! keepj 'y+1,'zs/#/ /
|
||||
sil! keepj 'y+1,'zs/@//
|
||||
sil! keepj 'y+1,'zs/\(\s\+\)\([,)]\)/\2\1/e
|
||||
|
||||
" Restore
|
||||
call RestoreMark(mykeep)
|
||||
call RestoreMark(mzkeep)
|
||||
let &ch= chkeep
|
||||
let &gd= gdkeep
|
||||
let &ve= vekeep
|
||||
let &l:ch= chkeep
|
||||
let &l:gd= gdkeep
|
||||
let &l:ww= wwkeep
|
||||
let &l:ve= vekeep
|
||||
|
||||
" call Dret("AlignMaps#Afnc")
|
||||
endfun
|
||||
@ -310,12 +323,42 @@ fun! AlignMaps#FixMultiDec()
|
||||
let curline = getline(".")
|
||||
" call Decho("curline<".curline.">")
|
||||
|
||||
" " Attempt to ignore function calls (ie. double x=pow(2.,3.),...
|
||||
" let leader= substitute(curline,'^\s*\([a-zA-Z_ \t][a-zA-Z0-9<>_ \t]*\)\s\+.*$','\1','')
|
||||
" let i = strlen(leader)
|
||||
" let paren = 0
|
||||
" let fmd = strpart(curline,i)
|
||||
" let ifmd = i
|
||||
" call Decho("fmd<".fmd."> ifmd=".ifmd)
|
||||
" while i < strlen(curline)
|
||||
" if strpart(curline,i,1) == '('
|
||||
" let paren= paren+1
|
||||
" elseif strpart(curline,i,1) == ')' && paren > 0
|
||||
" let paren= paren-1
|
||||
" elseif strpart(curline,i,1) == '='
|
||||
" let eq= 1
|
||||
" elseif strpart(curline,i,1) == ';'
|
||||
" let paren = 0
|
||||
" let eq = 0
|
||||
" let fmd = fmd.strpart(fmd,ifmd,i-ifmd).";\<cr>"
|
||||
" let ifmd = i + 2
|
||||
" let i = i + 1
|
||||
" let leader= substitute(curline,'^\s*\([a-zA-Z_ \t][a-zA-Z0-9<>_ \t]*\)\s\+.*$','\1','')
|
||||
" elseif strpart(curline,i,1) == ','
|
||||
" if paren == 0
|
||||
" let fmd = fmd.strpart(fmd,ifmd,i-ifmd).";\<cr>"
|
||||
" let ifmd = i + 2
|
||||
" let i = i + 1
|
||||
" endif
|
||||
" endif
|
||||
" let i= i + 1
|
||||
" endwhile
|
||||
" Get the type. I'm assuming one type per line (ie. int x; double y; on one line will not be handled properly)
|
||||
let @x=substitute(curline,'^\(\s*[a-zA-Z_ \t][a-zA-Z0-9_ \t]*\)\s\+[(*]*\h.*$','\1','')
|
||||
let @x=substitute(curline,'^\(\s*[a-zA-Z_ \t][a-zA-Z0-9<>_ \t]*\)\s\+[(*]*\h.*$','\1','')
|
||||
" call Decho("@x<".@x.">")
|
||||
|
||||
" transform line
|
||||
exe 's/,/;\r'.@x.' /ge'
|
||||
exe 'keepj s/,/;\r'.@x.' /ge'
|
||||
|
||||
"restore register x
|
||||
let @x= xkeep
|
||||
@ -323,6 +366,26 @@ fun! AlignMaps#FixMultiDec()
|
||||
" call Dret("AlignMaps#FixMultiDec : my=".line("'y")." mz=".line("'z"))
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" AlignMaps#AlignMapsClean: this function removes the AlignMaps plugin {{{2
|
||||
fun! AlignMaps#AlignMapsClean()
|
||||
" call Dfunc("AlignMaps#AlignMapsClean()")
|
||||
for home in split(&rtp,',') + ['']
|
||||
" call Decho("considering home<".home.">")
|
||||
if isdirectory(home)
|
||||
if filereadable(home."/autoload/AlignMaps.vim")
|
||||
" call Decho("deleting ".home."/autoload/AlignMaps.vim")
|
||||
call delete(home."/autoload/AlignMaps.vim")
|
||||
endif
|
||||
if filereadable(home."/plugin/AlignMapsPlugin.vim")
|
||||
" call Decho("deleting ".home."/plugin/AlignMapsPlugin.vim")
|
||||
call delete(home."/plugin/AlignMapsPlugin.vim")
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
" call Dret("AlignMaps#AlignMapsClean")
|
||||
endfun
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" Restore: {{{1
|
||||
let &cpo= s:keepcpo
|
||||
|
@ -46,6 +46,9 @@ endif"}}}
|
||||
if !exists("g:gundo_prefer_python3")"{{{
|
||||
let g:gundo_prefer_python3 = 0
|
||||
endif"}}}
|
||||
if !exists("g:gundo_auto_preview")"{{{
|
||||
let g:gundo_auto_preview = 1
|
||||
endif"}}}
|
||||
|
||||
let s:has_supported_python = 0
|
||||
if g:gundo_prefer_python3 && has('python3')"{{{
|
||||
@ -111,6 +114,7 @@ function! s:GundoMapGraph()"{{{
|
||||
nnoremap <script> <silent> <buffer> gg gg:call <sid>GundoMove(1)<CR>
|
||||
nnoremap <script> <silent> <buffer> P :call <sid>GundoPlayTo()<CR>
|
||||
nnoremap <script> <silent> <buffer> p :call <sid>GundoRenderChangePreview()<CR>
|
||||
nnoremap <script> <silent> <buffer> r :call <sid>GundoRenderPreview()<CR>
|
||||
nnoremap <script> <silent> <buffer> q :call <sid>GundoClose()<CR>
|
||||
cabbrev <script> <silent> <buffer> q call <sid>GundoClose()
|
||||
cabbrev <script> <silent> <buffer> quit call <sid>GundoClose()
|
||||
@ -318,11 +322,17 @@ function! s:GundoToggle()"{{{
|
||||
endfunction"}}}
|
||||
|
||||
function! s:GundoShow()"{{{
|
||||
if !s:GundoIsVisible()
|
||||
let g:gundo_target_n = bufnr('')
|
||||
let g:gundo_target_f = @%
|
||||
call s:GundoOpen()
|
||||
endif
|
||||
endfunction"}}}
|
||||
|
||||
function! s:GundoHide()"{{{
|
||||
if s:GundoIsVisible()
|
||||
call s:GundoClose()
|
||||
endif
|
||||
endfunction"}}}
|
||||
|
||||
"}}}
|
||||
@ -377,7 +387,9 @@ function! s:GundoMove(direction) range"{{{
|
||||
call cursor(0, idx2 + 1)
|
||||
endif
|
||||
|
||||
if g:gundo_auto_preview == 1
|
||||
call s:GundoRenderPreview()
|
||||
endif
|
||||
endfunction"}}}
|
||||
|
||||
"}}}
|
||||
@ -436,6 +448,14 @@ function! gundo#GundoToggle()"{{{
|
||||
call s:GundoToggle()
|
||||
endfunction"}}}
|
||||
|
||||
function! gundo#GundoShow()"{{{
|
||||
call s:GundoShow()
|
||||
endfunction"}}}
|
||||
|
||||
function! gundo#GundoHide()"{{{
|
||||
call s:GundoHide()
|
||||
endfunction"}}}
|
||||
|
||||
function! gundo#GundoRenderGraph()"{{{
|
||||
call s:GundoRenderGraph()
|
||||
endfunction"}}}
|
||||
|
@ -1,8 +1,8 @@
|
||||
*align.txt* The Alignment Tool Mar 04, 2009
|
||||
*align.txt* The Alignment Tool Jun 18, 2012
|
||||
|
||||
Author: Charles E. Campbell, Jr. <NdrOchip@ScampbellPfamily.AbizM>
|
||||
Author: Charles E. Campbell <NdrOchip@ScampbellPfamily.AbizM>
|
||||
(remove NOSPAM from Campbell's email first)
|
||||
Copyright: (c) 2004-2008 by Charles E. Campbell, Jr. *Align-copyright*
|
||||
Copyright: (c) 2004-2012 by Charles E. Campbell *Align-copyright*
|
||||
The VIM LICENSE applies to Align.vim, AlignMaps.vim, and Align.txt
|
||||
(see |copyright|) except use "Align and AlignMaps" instead of "Vim"
|
||||
NO WARRANTY, EXPRESS OR IMPLIED. USE AT-YOUR-OWN-RISK.
|
||||
@ -26,6 +26,7 @@ Copyright: (c) 2004-2008 by Charles E. Campbell, Jr. *Align-copyright*
|
||||
Temporary Settings.....: |alignctrl-m|
|
||||
Padding................: |alignctrl-p| |alignctrl-P|
|
||||
Current Options........: |alignctrl-settings| |alignctrl-|
|
||||
Alignment Control Init...: |alignctrl-init|
|
||||
Alignment................: |align-align|
|
||||
4. Alignment Maps...........: |align-maps|
|
||||
\a,....................: |alignmap-a,|
|
||||
@ -91,6 +92,7 @@ Copyright: (c) 2004-2008 by Charles E. Campbell, Jr. *Align-copyright*
|
||||
|| | | - skip this separator ||
|
||||
|| | | + re-use last justification method ||
|
||||
|| | | : treat rest of text as a field ||
|
||||
|| | | * use AlignSkip() function (to skip or not) ||
|
||||
|| | | ||
|
||||
|| | p1 | p### pad separator on left by # blanks ||
|
||||
|| | P1 | P### pad separator on right by # blanks ||
|
||||
@ -176,12 +178,14 @@ ALIGNMENT CONCEPTS *align-concept* *align-concepts* {{{2
|
||||
< Note how each "=" sign is surrounded by a single space; the
|
||||
default padding is p1P1 (p1 means one space before the separator,
|
||||
and P1 means one space after it). If you wish to change the
|
||||
padding, say to no padding, use (see |alignctrl-p|) >
|
||||
padding, say, to no padding, use (see |alignctrl-p|) >
|
||||
|
||||
:AlignCtrl lp0P0
|
||||
|
||||
< Next, note how each field is left justified; that's what the "l"
|
||||
(a small letter "ell") does. If right-justification of the fields
|
||||
had been desired, an "r" could've been used: >
|
||||
in the AlignCtrl parameters (a small letter "ell") does. If
|
||||
right-justification of the fields had been desired, an "r"
|
||||
could've been used: >
|
||||
:AlignCtrl r
|
||||
< yielding >
|
||||
x = y = z = 3;
|
||||
@ -196,10 +200,10 @@ ALIGNMENT CONCEPTS *align-concept* *align-concepts* {{{2
|
||||
justify, right justify, or center them, too (see |alignctrl-<|).
|
||||
|
||||
Assume that for some reason a left-right-left-right-... justification
|
||||
sequence was wished. This wish is simply achieved with >
|
||||
sequence was desired. This wish is simply achieved with >
|
||||
:AlignCtrl lr
|
||||
:1,4Align =
|
||||
< because the justification commands are considered to be "cylic"; ie.
|
||||
< because the justification commands are considered to be "cyclic"; ie.
|
||||
lr is the same as lrlrlrlrlrlrlr...
|
||||
|
||||
There's a lot more discussed under |alignctrl|; hopefully the examples
|
||||
@ -261,7 +265,7 @@ ALIGNMENT COMMANDS *align-command* *align-commands* {{{2
|
||||
< Also see |alignctrl-m| for a way to automatically do
|
||||
an AlignPop after an Align (primarily this is for maps).
|
||||
|
||||
ALIGNMENT OPTIONS *align-option* *align-options* {{{2
|
||||
ALIGNMENT OPTIONS *align-option* *align-options* *align-xstrlen* {{{2
|
||||
*align-utf8* *align-utf* *align-codepoint* *align-strlen* *align-multibyte*
|
||||
|
||||
For those of you who are using 2-byte (or more) characters such as are
|
||||
@ -279,7 +283,7 @@ ALIGNMENT OPTIONS *align-option* *align-options* {{{2
|
||||
vim compiled without multi-byte support
|
||||
$LANG is en_US.UTF-8 (assuming USA english)
|
||||
|
||||
Number of codepoints (Latin a + combining circumflex is two codepoints)~
|
||||
Number of codepoints (Latin a + combining circumflex are two codepoints)~
|
||||
>
|
||||
let g:Align_xstrlen= 1 (default)
|
||||
<
|
||||
@ -295,13 +299,20 @@ ALIGNMENT OPTIONS *align-option* *align-options* {{{2
|
||||
>
|
||||
let g:Align_xstrlen= 3
|
||||
<
|
||||
User may specify a function to compute the string length~
|
||||
>
|
||||
let g:Align_xstrlen= "strlen"
|
||||
< This method will cause Align to call upon the named function returning
|
||||
string length. it should resemble the |strlen()| function, taking one
|
||||
argument (the string) for input and returning the string length.
|
||||
|
||||
By putting one of these settings into your <.vimrc>, Align will use an
|
||||
internal (interpreted) function to determine a string's length instead
|
||||
of the Vim's built-in |strlen()| function. Since the function is
|
||||
of Vim's built-in |strlen()| function. Since the function is
|
||||
interpreted, Align will run a bit slower but will handle such strings
|
||||
correctly. The last setting (g:Align_xstrlen= 3) probably will run
|
||||
the slowest but be the most accurate. (thanks to Tony Mechelynck for
|
||||
these)
|
||||
correctly. The last settings (g:Align_xstrlen= 3 and
|
||||
g:Align_xstrlen="userfuncname") probably will run the slowest but be
|
||||
the most accurate. (thanks to Tony Mechelynck for these)
|
||||
|
||||
|
||||
ALIGNMENT CONTROL *alignctrl* *align-control* {{{2
|
||||
@ -337,10 +348,11 @@ ALIGNMENT CONTROL *alignctrl* *align-control* {{{2
|
||||
(ie. @), and then perform a substitute to revert the separators back
|
||||
to their desired condition (ie. s/@/ :: /g).
|
||||
|
||||
The Align#Align() function will first convert tabs over the region into
|
||||
spaces and then apply alignment control. Except for initial white
|
||||
space, white space surrounding the fields is ignored. One has three
|
||||
options just for handling initial white space:
|
||||
The Align#Align() function (which is invoked by the :Align command)
|
||||
will first convert tabs over the region into spaces and then apply
|
||||
alignment control. Except for initial white space, white space
|
||||
surrounding the fields is ignored. One has three options just for
|
||||
handling initial white space:
|
||||
|
||||
|
||||
--- *alignctrl-w*
|
||||
@ -397,17 +409,19 @@ ALIGNMENT CONTROL *alignctrl* *align-control* {{{2
|
||||
cycle only consists of one character (the "l").
|
||||
Every time left-justification is used for fields.
|
||||
AlignCtrl r : The = separator is repeatedly re-used, as the
|
||||
cycle only consists of one character (the "l").
|
||||
cycle only consists of one character (the "r").
|
||||
Every time right-justification is used for fields
|
||||
AlignCtrl lr: Again, the "=" separator is repeatedly re-used,
|
||||
but the fields are justified alternately between
|
||||
left and right.
|
||||
|
||||
Even more separator control is available. With "-+:":
|
||||
Even more separator control is available! With "-+:":
|
||||
|
||||
- : skip treating the separator as a separator. *alignctrl--*
|
||||
+ : repeat use of the last "lrc" justification *alignctrl-+*
|
||||
: : treat the rest of the line as a single field *alignctrl-:*
|
||||
* : like -, but only if g:AlignSkip() returns true *alignctrl-star*
|
||||
(see |alignctrl-alignskip|)
|
||||
|
||||
Example: More justification options: Align = >
|
||||
+------------+---------------+--------------------+---------------+
|
||||
@ -452,6 +466,35 @@ ALIGNMENT CONTROL *alignctrl* *align-control* {{{2
|
||||
3rd separator only: AlignCtrl --l:
|
||||
etc.
|
||||
|
||||
*g:AlignSkip*
|
||||
Align Skip Control *alignctrl-alignskip*
|
||||
|
||||
The separator control '*' permits a function to decide whether or
|
||||
not a character which matches the current separator pattern should
|
||||
instead be skipped.
|
||||
|
||||
1. Define a function; example: >
|
||||
|
||||
fun! AlignSkipString(lineno,indx)
|
||||
let synid = synID(a:lineno,a:indx+1,1)
|
||||
let synname = synIDattr(synIDtrans(synid),"name")
|
||||
let ret= (synname == "String")? 1 : 0
|
||||
return ret
|
||||
endfun
|
||||
<
|
||||
Input: lineno: current line number
|
||||
indx : index to character; leftmost character
|
||||
in the line has an indx of 0 (like |strpart()|)
|
||||
Output: 0 : if separator is ok
|
||||
1 : skip separator like it was a '-'
|
||||
|
||||
2. Set up |g:AlignSkip| as a function reference (see |Funcref|): >
|
||||
|
||||
let g:AlignSkip= function("AlignSkipString")
|
||||
<
|
||||
3. Use * as a separator control where a separator potentially should
|
||||
be skipped over.
|
||||
|
||||
|
||||
--- *alignctrl-=*
|
||||
=C CYCLIC VS ALL-ACTIVE SEPARATORS *alignctrl-C* {{{3
|
||||
@ -465,8 +508,10 @@ ALIGNMENT CONTROL *alignctrl* *align-control* {{{2
|
||||
constructed: >
|
||||
|
||||
AlignCtrl ... pat1 pat2 pat3
|
||||
< becomes >
|
||||
\(pat1\|pat2\|pat3\)
|
||||
<
|
||||
< (ie. pat1 -or- pat2 -or- pat3; see |/bar|)
|
||||
|
||||
Each separator pattern is thus equivalent and simultaneously active.
|
||||
The cyclic separator AlignCtrl option stores a list of patterns, only
|
||||
one of which is active for each field at a time.
|
||||
@ -606,11 +651,11 @@ ALIGNMENT CONTROL *alignctrl* *align-control* {{{2
|
||||
|five= 6; |five = 6; |five = 6; |
|
||||
+----------------+------------------+----------------+
|
||||
<
|
||||
The first "Align =" aligned with all "="s, including that one in the
|
||||
"skip=this" comment.
|
||||
The first "Align =" aligned with all "="s, including the one in the
|
||||
"/* skip=this */" comment.
|
||||
|
||||
The second "Align =" had a AlignCtrl v-pattern which caused it to skip
|
||||
(ignore) the "skip=this" line when aligning.
|
||||
(ignore) the "/* skip=this */" line when aligning.
|
||||
|
||||
To remove AlignCtrl's g and v patterns, use (as appropriate) >
|
||||
|
||||
@ -697,7 +742,19 @@ ALIGNMENT CONTROL *alignctrl* *align-control* {{{2
|
||||
however: >
|
||||
|
||||
:let alignctrl= Align#AlignCtrl("d")
|
||||
<
|
||||
|
||||
|
||||
ALIGNMENT CONTROL INITIALIZATION *alignctrl-init* *alignctrl-initialization* {{{2
|
||||
|
||||
If you'd like to have your own default AlignCtrl, you'll be wanting to
|
||||
put it in a file such as: >
|
||||
|
||||
$HOME/.vim/after/plugin/AlignPlugin.vim
|
||||
|
||||
< Anything in that file would be sourced at startup, but after your
|
||||
.vimrc and after $HOME/.vim/plugin/AlignPlugin.vim; hence, :Align
|
||||
and :AlignCtrl will then be defined.
|
||||
|
||||
|
||||
ALIGNMENT *align-align* {{{2
|
||||
|
||||
@ -758,23 +815,31 @@ ALIGNMENT *align-align* {{{2
|
||||
==============================================================================
|
||||
4. Alignment Maps *alignmaps* *align-maps* {{{1
|
||||
|
||||
There are a number of maps using Align#AlignCtrl() and Align#Align()
|
||||
in the <AlignMapsPlugin.vim> file. This file may also be put into the
|
||||
plugins subdirectory. Since AlignCtrl and Align supercede textab and
|
||||
its <ttalign.vim> file, the maps either have a leading "t" (for
|
||||
"textab") or the more complicated ones an "a" (for "alignment") for
|
||||
backwards compatibility.
|
||||
There are a number of maps provided in the AlignMaps plugin which
|
||||
depend upon the Align plugin. The maps provided by AlignMaps
|
||||
typically start with a leading "t" (for the older "textab" program
|
||||
which Align supercedes) or with an "a" for the more complicated
|
||||
alignment maps.
|
||||
|
||||
The maps are shown below with a leading backslash (\). Actually, the
|
||||
<Leader> construct is used (see |mapleader|), so the maps' leading
|
||||
kick-off character is easily customized.
|
||||
The AlignMaps plugin, although provided in the vimball containing
|
||||
Align.vim, is really a separate plugin (Align doesn't depend on
|
||||
AlignMaps). Consequently, if you'd rather not have AlignMaps's
|
||||
mappings, just use the *:AlignMapsClean* command to remove its
|
||||
components. The :AlignMapsClean command does not remove any maps
|
||||
generated by AlignMaps in the current instance of vim.
|
||||
|
||||
Furthermore, all AlignMapsPlugin.vim maps use the <Plug> construct (see
|
||||
|<Plug>|and |usr_41.txt|). Hence, if one wishes to override the
|
||||
mapping entirely, one may do that, too. As an example: >
|
||||
The maps are shown below with a leading backslash (\). However, the
|
||||
actual maps use the <Leader> construct (see |mapleader|), so the maps'
|
||||
leading kick-off character is easily customized.
|
||||
|
||||
Furthermore, all the maps specified by the AlignMaps plugin use the
|
||||
<Plug> construct (see |<Plug>|and |usr_41.txt|). Hence, if one wishes
|
||||
to override the mapping(s) entirely, one may do that, too. As an
|
||||
example: >
|
||||
map <Leader>ACOM <Plug>AM_acom
|
||||
< would have \ACOM do what \acom previously did (assuming that the
|
||||
mapleader has been left at its default value of a backslash).
|
||||
< would have \ACOM do
|
||||
what \acom previously did (assuming that the mapleader has been left
|
||||
at its default value of a backslash).
|
||||
|
||||
\a, : useful for breaking up comma-separated
|
||||
declarations prior to \adec |alignmap-a,|
|
||||
@ -831,9 +896,9 @@ ALIGNMENT *align-align* {{{2
|
||||
character "x" where "x" is: ,:<=@# |alignmap-T=|
|
||||
\m= : like \t= but aligns with %... style comments
|
||||
|
||||
The leading backslash is actually <leader> (see |mapleader| for how to
|
||||
customize the leader to be whatever you like). These maps use the
|
||||
<Align.vim> package and are defined in the <AlignMaps.vim> file.
|
||||
The leading backslash is actually <leader> (see |mapleader| to learn
|
||||
how to customize the leader to be whatever you like). These maps use
|
||||
the <Align.vim> package and are defined in the <AlignMaps.vim> file.
|
||||
Although the maps use AlignCtrl options, they typically use the "m"
|
||||
option which pushes the options (AlignPush). The associated Align
|
||||
call which follows will then AlignPop the user's original options
|
||||
@ -847,6 +912,18 @@ ALIGNMENT *align-align* {{{2
|
||||
Alternatively, one may select the text with the "V" visual mode
|
||||
command.
|
||||
|
||||
If you want to use visual-block mode (ctrl-v), I suggest using
|
||||
an AlignMap with the vis.vim plugin, available at either
|
||||
|
||||
stable: http://vim.sourceforge.net/scripts/script.php?script_id=1195
|
||||
devel : http://mysite.verizon.net/astronaut/vim/index.html#VIS
|
||||
|
||||
Use it with commands such as >
|
||||
|
||||
ctrl-v (move)
|
||||
:B norm \alignmap_sequence
|
||||
<
|
||||
|
||||
ALIGNMENT MAP USE WITH MENUS~
|
||||
One may use the mark-and-move style (ma, move, use the menu) or
|
||||
the visual mode style (use the V visual mode, move, then select
|
||||
@ -862,7 +939,6 @@ ALIGNMENT *align-align* {{{2
|
||||
must be included).
|
||||
|
||||
COMPLEX ALIGNMENT MAP METHOD~
|
||||
|
||||
For those complex alignment maps which do alignment on constructs
|
||||
(e.g. \acom, \adec, etc), a series of substitutes is used to insert
|
||||
"@" symbols in appropriate locations. Align#Align() is then used to
|
||||
@ -981,6 +1057,17 @@ ALIGNMENT *align-align* {{{2
|
||||
Alignment Map Examples: \anum *alignmap-anum* {{{3
|
||||
---------------------------
|
||||
|
||||
First, note that the behavior of the \anum map depends on the existence
|
||||
of either the vim variable >
|
||||
g:alignmaps_usanumber
|
||||
< or >
|
||||
g:alignmaps_euronumber
|
||||
< when AlignMaps is loaded.
|
||||
|
||||
Essentially, "usa" numbers use "."s and "euro" numbers use ","s to
|
||||
separate the integer from the fractional portion of a number.
|
||||
"Usa" numbers are default.
|
||||
|
||||
Original: illustrates how to get numbers lined up >
|
||||
-1.234 .5678 -.901e-4
|
||||
1.234 5.678 9.01e-4
|
||||
@ -1012,7 +1099,8 @@ ALIGNMENT *align-align* {{{2
|
||||
12,34 56,78 90,1e-4
|
||||
123,4 567,8 901,e-4
|
||||
<
|
||||
Becomes: Go to first line, ma. Go to last line, press \anum >
|
||||
Becomes: (assuming g:alignmaps_euronumber exists)
|
||||
Go to first line, ma. Go to last line, press \anum >
|
||||
-1,234 ,5678 -,901e-4
|
||||
1,234 5,678 9,01e-4
|
||||
12,34 56,78 90,1e-4
|
||||
@ -1022,9 +1110,10 @@ ALIGNMENT *align-align* {{{2
|
||||
\aenum is provided to support European-style numbers
|
||||
\aunum is provided to support USA-style numbers
|
||||
|
||||
One may get \aenum behavior for \anum >
|
||||
*g:alignmaps_usanumber* *g:alignmaps_euronumber*
|
||||
One may get \aenum behavior for \anum by putting >
|
||||
let g:alignmaps_euronumber= 1
|
||||
< or \aunum behavior for \anum if one puts >
|
||||
< or \aunum behavior for \anum by putting >
|
||||
let g:alignmaps_usanumber= 1
|
||||
< in one's <.vimrc>.
|
||||
|
||||
@ -1311,6 +1400,33 @@ ALIGNMENT *align-align* {{{2
|
||||
4. Alignment Tools' History *align-history* {{{1
|
||||
|
||||
ALIGN HISTORY {{{2
|
||||
36 : May 20, 2009 * Previously, the "W" AlignCtrl setting, intended
|
||||
to retain initial white space, did so by convert-
|
||||
ing any leading tabs into an equivalent quantity
|
||||
of blanks (using the current tabstop setting).
|
||||
Align will now retain leading tabs.
|
||||
Nov 24, 2009 * QArgSplitter() used split(), intending to split
|
||||
on white space only. However, the \tab map
|
||||
uses ctrl-o as a separator instead of tabs; the
|
||||
split() function treated the ctrl-o as a whitespace
|
||||
character, too. Solution: give split() an explicit
|
||||
pattern matching blanks and tabs, only. \tab now
|
||||
works again!
|
||||
Jun 29, 2010 * included |g:AlignSkip| and |alignctrl-star| support
|
||||
May 10, 2011 * if the range is only one line, then Align will
|
||||
automatically grow the range to accommodate all
|
||||
lines containing the first separator pattern
|
||||
surrounding the current line.
|
||||
Aug 05, 2011 * g:Align_xstrlen usage extended to permit users to
|
||||
specify a function by name which computes string
|
||||
length.
|
||||
Oct 27, 2011 * (reported by Fco Javier) reported a problem with
|
||||
the default s:Strlen() result; there was a missing
|
||||
"let". Fixed.
|
||||
Nov 10, 2011 * (Lewis Thompson) Align was doing "set noet" when
|
||||
it should've been doing "setlocal noet".
|
||||
Dec 22, 2011 * modifed s:Strlen() to use |strdisplaywidth()| when
|
||||
g:Align_xstrlen is zero.
|
||||
35 : Nov 02, 2008 * g:loaded_AlignPlugin testing to prevent re-loading
|
||||
installed
|
||||
Nov 19, 2008 * new sanity check for an AlignStyle of just ":"
|
||||
@ -1382,6 +1498,15 @@ ALIGN HISTORY {{{2
|
||||
9 : Jun 25, 2002 : implemented cyclic padding
|
||||
|
||||
ALIGNMENT MAP HISTORY *alignmap-history* {{{2
|
||||
v42 Jan 06, 2010 * new maps for \anum, \aenum, \aunum
|
||||
Feb 16, 2010 * map for \t=, \T= now handles x++ = something;
|
||||
for c, c++ correctly.
|
||||
Oct 29, 2010 * added a note on having one's own default
|
||||
AlignCtrl (see |alignctrl-init|)
|
||||
Feb 22, 2011 * for menus, &go =~# used to insure correct case
|
||||
Jun 10, 2011 * |:AlignMapsClean| command provided to make it
|
||||
easy for those who would prefer not to have
|
||||
AlignMaps' maps not to have them.
|
||||
v41 Nov 02, 2008 * g:loaded_AlignMapsPlugin testing to prevent
|
||||
re-loading installed
|
||||
* AlignMaps now use 0x0f (ctrl-p) for special
|
||||
|
@ -5,9 +5,9 @@ Making Vim's undo tree usable by humans.
|
||||
==============================================================================
|
||||
CONTENTS *Gundo-contents*
|
||||
|
||||
1. Intro .......................... |GundoIntro|
|
||||
2. Usage .......................... |GundoUsage|
|
||||
3. Configuration .................. |GundoConfig|
|
||||
1. Intro ........................... |GundoIntro|
|
||||
2. Usage ........................... |GundoUsage|
|
||||
3. Configuration ................... |GundoConfig|
|
||||
3.1 gundo_width ............... |gundo_width|
|
||||
3.2 gundo_preview_height ...... |gundo_preview_height|
|
||||
3.3 gundo_preview_bottom ...... |gundo_preview_bottom|
|
||||
@ -19,11 +19,12 @@ CONTENTS *Gundo-contents*
|
||||
3.8 gundo_close_on_revert ..... |gundo_close_on_revert|
|
||||
3.9 gundo_preview_statusline .. |gundo_preview_statusline|
|
||||
gundo_tree_statusline ..... |gundo_tree_statusline|
|
||||
4. License ........................ |GundoLicense|
|
||||
5. Bugs ........................... |GundoBugs|
|
||||
6. Contributing ................... |GundoContributing|
|
||||
7. Changelog ...................... |GundoChangelog|
|
||||
8. Credits ........................ |GundoCredits|
|
||||
3.10 gundo_auto_preview ........ |gundo_auto_preview|
|
||||
4. License ......................... |GundoLicense|
|
||||
5. Bugs ............................ |GundoBugs|
|
||||
6. Contributing .................... |GundoContributing|
|
||||
7. Changelog ....................... |GundoChangelog|
|
||||
8. Credits ......................... |GundoCredits|
|
||||
|
||||
==============================================================================
|
||||
1. Intro *GundoIntro*
|
||||
@ -206,6 +207,15 @@ Set these to a string to display it as the status line for each Gundo window.
|
||||
|
||||
Default: unset (windows use the default statusline)
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
3.10 g:gundo_auto_preview *gundo_auto_preview*
|
||||
|
||||
Set this to 0 to disable automatically rendering preview diffs as you move
|
||||
through the undo tree (you can still render a specific diff with r). This can
|
||||
be useful on large files and undo trees to speed up Gundo.
|
||||
|
||||
Default: 1 (automatically preview diffs)
|
||||
|
||||
==============================================================================
|
||||
4. License *GundoLicense*
|
||||
|
||||
@ -228,7 +238,10 @@ GitHub: http://github.com/sjl/gundo.vim/
|
||||
|
||||
==============================================================================
|
||||
7. Changelog *GundoChangelog*
|
||||
|
||||
v2.4.0
|
||||
* Add auto preview option.
|
||||
* Add 'r' mapping to preview current state.
|
||||
* Add public gundo#GundoShow() and gundo#GundoHide() functions.
|
||||
v2.3.0
|
||||
* Add statusline configuration.
|
||||
v2.2.2
|
||||
|
@ -1,3 +1,4 @@
|
||||
:AlignMapsClean Align.txt /*:AlignMapsClean*
|
||||
:CVSEdit vcscommand.txt /*:CVSEdit*
|
||||
:CVSEditors vcscommand.txt /*:CVSEditors*
|
||||
:CVSUnedit vcscommand.txt /*:CVSUnedit*
|
||||
@ -158,6 +159,7 @@ align-usage Align.txt /*align-usage*
|
||||
align-userguide Align.txt /*align-userguide*
|
||||
align-utf Align.txt /*align-utf*
|
||||
align-utf8 Align.txt /*align-utf8*
|
||||
align-xstrlen Align.txt /*align-xstrlen*
|
||||
align.txt Align.txt /*align.txt*
|
||||
alignctrl Align.txt /*alignctrl*
|
||||
alignctrl- Align.txt /*alignctrl-*
|
||||
@ -171,8 +173,11 @@ alignctrl-C Align.txt /*alignctrl-C*
|
||||
alignctrl-I Align.txt /*alignctrl-I*
|
||||
alignctrl-P Align.txt /*alignctrl-P*
|
||||
alignctrl-W Align.txt /*alignctrl-W*
|
||||
alignctrl-alignskip Align.txt /*alignctrl-alignskip*
|
||||
alignctrl-c Align.txt /*alignctrl-c*
|
||||
alignctrl-g Align.txt /*alignctrl-g*
|
||||
alignctrl-init Align.txt /*alignctrl-init*
|
||||
alignctrl-initialization Align.txt /*alignctrl-initialization*
|
||||
alignctrl-l Align.txt /*alignctrl-l*
|
||||
alignctrl-m Align.txt /*alignctrl-m*
|
||||
alignctrl-no-option Align.txt /*alignctrl-no-option*
|
||||
@ -180,6 +185,7 @@ alignctrl-p Align.txt /*alignctrl-p*
|
||||
alignctrl-r Align.txt /*alignctrl-r*
|
||||
alignctrl-separators Align.txt /*alignctrl-separators*
|
||||
alignctrl-settings Align.txt /*alignctrl-settings*
|
||||
alignctrl-star Align.txt /*alignctrl-star*
|
||||
alignctrl-v Align.txt /*alignctrl-v*
|
||||
alignctrl-w Align.txt /*alignctrl-w*
|
||||
alignman Align.txt /*alignman*
|
||||
@ -1497,11 +1503,14 @@ ex-visincr-IYMD visincr.txt /*ex-visincr-IYMD*
|
||||
fetch pi_netrw.txt /*fetch*
|
||||
ftp pi_netrw.txt /*ftp*
|
||||
g% matchit.txt /*g%*
|
||||
g:AlignSkip Align.txt /*g:AlignSkip*
|
||||
g:MultipleSearchColorSequence MultipleSearch.txt /*g:MultipleSearchColorSequence*
|
||||
g:MultipleSearchMaxColors MultipleSearch.txt /*g:MultipleSearchMaxColors*
|
||||
g:MultipleSearchTextColorSequence MultipleSearch.txt /*g:MultipleSearchTextColorSequence*
|
||||
g:NetrwTopLvlMenu pi_netrw.txt /*g:NetrwTopLvlMenu*
|
||||
g:Netrw_funcref pi_netrw.txt /*g:Netrw_funcref*
|
||||
g:alignmaps_euronumber Align.txt /*g:alignmaps_euronumber*
|
||||
g:alignmaps_usanumber Align.txt /*g:alignmaps_usanumber*
|
||||
g:netrw_alto pi_netrw.txt /*g:netrw_alto*
|
||||
g:netrw_altv pi_netrw.txt /*g:netrw_altv*
|
||||
g:netrw_banner pi_netrw.txt /*g:netrw_banner*
|
||||
@ -1623,6 +1632,7 @@ glvs-options pi_getscript.txt /*glvs-options*
|
||||
glvs-plugins pi_getscript.txt /*glvs-plugins*
|
||||
glvs-usage pi_getscript.txt /*glvs-usage*
|
||||
gundo.txt gundo.txt /*gundo.txt*
|
||||
gundo_auto_preview gundo.txt /*gundo_auto_preview*
|
||||
gundo_close_on_revert gundo.txt /*gundo_close_on_revert*
|
||||
gundo_disable gundo.txt /*gundo_disable*
|
||||
gundo_help gundo.txt /*gundo_help*
|
||||
|
@ -1,11 +1,9 @@
|
||||
" AlignMapsPlugin: Alignment maps based upon <Align.vim> and <AlignMaps.vim>
|
||||
" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
|
||||
" Date: Mar 03, 2009
|
||||
" Date: Jun 18, 2012
|
||||
"
|
||||
" NOTE: the code herein needs vim 6.0 or later
|
||||
" needs <Align.vim> v6 or later
|
||||
" needs <cecutil.vim> v5 or later
|
||||
" Copyright: Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
|
||||
" NOTE: the code herein needs vim 7.0 or later
|
||||
" Copyright: Copyright (C) 1999-2012 Charles E. Campbell, Jr. {{{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,
|
||||
@ -14,7 +12,12 @@
|
||||
" 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
|
||||
@ -29,20 +32,18 @@
|
||||
"
|
||||
" Note: these maps all use <Align.vim>.
|
||||
"
|
||||
" 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.
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" Load Once: {{{1
|
||||
if &cp || exists("g:loaded_AlignMapsPlugin")
|
||||
finish
|
||||
endif
|
||||
let s:keepcpo = &cpo
|
||||
let g:loaded_AlignMapsPlugin = "v41"
|
||||
let g:loaded_AlignMapsPlugin = "v42"
|
||||
set cpo&vim
|
||||
|
||||
" =====================================================================
|
||||
" Public Interface: {{{1
|
||||
com! AlignMapsClean :call AlignMaps#AlignMapsClean()
|
||||
|
||||
" =====================================================================
|
||||
" Maps: {{{1
|
||||
|
||||
@ -79,14 +80,17 @@ if !hasmapto('<Plug>AM_adec') |map <unique> <Leader>adec <Plug>AM_adec|endif
|
||||
if !hasmapto('<Plug>AM_adef') |map <unique> <Leader>adef <Plug>AM_adef|endif
|
||||
if !hasmapto('<Plug>AM_afnc') |map <unique> <Leader>afnc <Plug>AM_afnc|endif
|
||||
if !hasmapto('<Plug>AM_afnc') |map <unique> <Leader>afnc <Plug>AM_afnc|endif
|
||||
if !hasmapto('<Plug>AM_aunum')|map <unique> <Leader>aunum <Plug>AM_aenum|endif
|
||||
if !hasmapto('<Plug>AM_aenum')|map <unique> <Leader>aenum <Plug>AM_aunum|endif
|
||||
|
||||
" Number alignment maps: {{{2
|
||||
if !hasmapto('<Plug>AM_aunum')|map <unique> <Leader>aunum <Plug>AM_aunum|endif
|
||||
if !hasmapto('<Plug>AM_aenum')|map <unique> <Leader>aenum <Plug>AM_aenum|endif
|
||||
if exists("g:alignmaps_euronumber") && !exists("g:alignmaps_usanumber")
|
||||
if !hasmapto('<Plug>AM_anum')|map <unique> <Leader>anum <Plug>AM_aenum|endif
|
||||
else
|
||||
if !hasmapto('<Plug>AM_anum')|map <unique> <Leader>anum <Plug>AM_aunum|endif
|
||||
endif
|
||||
|
||||
" Plug maps: (the real thing) {{{2
|
||||
map <silent> <script> <Plug>AM_a? <SID>WS:AlignCtrl mIp1P1lC ? : : : : <CR>:'a,.Align<CR>:'a,'z-1s/\(\s\+\)? /?\1/e<CR><SID>WE
|
||||
map <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
|
||||
map <silent> <script> <Plug>AM_a< <SID>WS:AlignCtrl mIp1P1=l << >><CR>:'a,.Align<CR><SID>WE
|
||||
@ -97,12 +101,11 @@ map <silent> <script> <Plug>AM_acom <SID>WS:'a,.s/\/[*/]\/\=/@&@/e<CR>:'a,.s/\*
|
||||
map <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
|
||||
map <silent> <script> <Plug>AM_aocom <SID>WS:AlignPush<CR>:AlignCtrl g /[*/]<CR>:exe "norm \<Plug>AM_acom"<cr>:AlignPop<CR><SID>WE
|
||||
map <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
|
||||
map <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*\%(\K\k*\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
|
||||
map <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
|
||||
map <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
|
||||
map <silent> <script> <Plug>AM_afnc :<c-u>set lz<CR>:silent call AlignMaps#Afnc()<CR>:set nolz<CR>
|
||||
map <silent> <script> <Plug>AM_aunum <SID>WS:'a,'zs/\%([0-9.]\)\s\+\zs\([-+.]\=\d\)/@\1/ge<CR>:'a,'zs/\(\(^\|\s\)\d\+\)\(\s\+\)@/\1@\3@/ge<CR>:'a,'zs/\.@/\.0@/ge<CR>:AlignCtrl wmp0P0r<CR>:'a,'zAlign [.@]<CR>:'a,'zs/@/ /ge<CR>:'a,'zs/\(\.\)\(\s\+\)\([0-9.,eE+]\+\)/\1\3\2/ge<CR>:'a,'zs/\([eE]\)\(\s\+\)\([0-9+\-+]\+\)/\1\3\2/ge<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_aenum <SID>WS:'a,'zs/\%([0-9.]\)\s\+\([-+]\=\d\)/\1@\2/ge<CR>:'a,'zs/\.@/\.0@/ge<CR>:AlignCtrl wmp0P0r<CR>:'a,'zAlign [,@]<CR>:'a,'zs/@/ /ge<CR>:'a,'zs/\(,\)\(\s\+\)\([-0-9.,eE+]\+\)/\1\3\2/ge<CR>:'a,'zs/\([eE]\)\(\s\+\)\([0-9+\-+]\+\)/\1\3\2/ge<CR><SID>WE
|
||||
|
||||
map <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
|
||||
map <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
|
||||
@ -120,6 +123,7 @@ if !hasmapto('<Plug>AM_T<') |map <unique> <Leader>T< <Plug>AM_T<|endif
|
||||
if !hasmapto('<Plug>AM_T=') |map <unique> <Leader>T= <Plug>AM_T=|endif
|
||||
if !hasmapto('<Plug>AM_T?') |map <unique> <Leader>T? <Plug>AM_T?|endif
|
||||
if !hasmapto('<Plug>AM_T@') |map <unique> <Leader>T@ <Plug>AM_T@|endif
|
||||
if !hasmapto('<Plug>AM_TW@') |map <unique> <Leader>TW@ <Plug>AM_TW@|endif
|
||||
if !hasmapto('<Plug>AM_Tab') |map <unique> <Leader>Tab <Plug>AM_Tab|endif
|
||||
if !hasmapto('<Plug>AM_Tsp') |map <unique> <Leader>Tsp <Plug>AM_Tsp|endif
|
||||
if !hasmapto('<Plug>AM_T~') |map <unique> <Leader>T~ <Plug>AM_T~|endif
|
||||
@ -134,6 +138,7 @@ map <silent> <script> <Plug>AM_T< <SID>WS:AlignCtrl mIp0P0=r <<CR>:'a,.Align<C
|
||||
map <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"
|
||||
map <silent> <script> <Plug>AM_T? <SID>WS:AlignCtrl mIp0P0=r ?<CR>:'a,.Align<CR>:'y,'zs/ \( *\);/;\1/ge<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_T@ <SID>WS:AlignCtrl mIp0P0=r @<CR>:'a,.Align<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_TW@ <SID>WS:AlignCtrl mWp0P0=r @<CR>:'a,.Align<CR><SID>WE
|
||||
map <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
|
||||
map <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
|
||||
map <silent> <script> <Plug>AM_T~ <SID>WS:AlignCtrl mIp0P0=r ~<CR>:'a,.Align<CR>:'y,'zs/ \( *\);/;\1/ge<CR><SID>WE
|
||||
@ -156,6 +161,7 @@ if !hasmapto('<Plug>AM_w=') |map <unique> <Leader>w= <Plug>AM_w=|endif
|
||||
if !hasmapto('<Plug>AM_t?') |map <unique> <Leader>t? <Plug>AM_t?|endif
|
||||
if !hasmapto('<Plug>AM_t~') |map <unique> <Leader>t~ <Plug>AM_t~|endif
|
||||
if !hasmapto('<Plug>AM_t@') |map <unique> <Leader>t@ <Plug>AM_t@|endif
|
||||
if !hasmapto('<Plug>AM_tW@') |map <unique> <Leader>tW@ <Plug>AM_tW@|endif
|
||||
if !hasmapto('<Plug>AM_m=') |map <unique> <Leader>m= <Plug>AM_m=|endif
|
||||
if !hasmapto('<Plug>AM_tab') |map <unique> <Leader>tab <Plug>AM_tab|endif
|
||||
if !hasmapto('<Plug>AM_tml') |map <unique> <Leader>tml <Plug>AM_tml|endif
|
||||
@ -170,28 +176,29 @@ map <silent> <script> <Plug>AM_t: <SID>WS:AlignCtrl mIp1P1=l :<CR>:'a,.Align<CR
|
||||
map <silent> <script> <Plug>AM_t; <SID>WS:AlignCtrl mIp0P1=l ;<CR>:'a,.Align<CR>:sil 'y,'zs/\( *\);/;\1/ge<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_t< <SID>WS:AlignCtrl mIp0P0=l <<CR>:'a,.Align<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_t= <SID>WS:call AlignMaps#Equals()<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_ts, <SID>WS:AlignCtrl mIp0P1=l #<CR>:'a,.Align<CR>:sil 'y+1,'z-1s/\(\s*\)#/,\1/ge<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_ts, <SID>WS:AlignCtrl mIp0P1=l ,<CR>:'a,.Align<CR>:sil 'y+1,'z-1s/\(\s*\),/,\1/ge<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_ts: <SID>WS:AlignCtrl mIp1P1=l :<CR>:'a,.Align<CR>:sil 'y+1,'z-1s/\(\s*\):/:\1/ge<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_ts; <SID>WS:AlignCtrl mIp1P1=l ;<CR>:'a,.Align<CR>:sil 'y+1,'z-1s/\(\s*\);/;\1/ge<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_ts< <SID>WS:AlignCtrl mIp1P1=l <<CR>:'a,.Align<CR>:sil 'y+1,'z-1s/\(\s*\)</<\1/ge<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_ts= <SID>WS:AlignCtrl mIp1P1=l =<CR>:'a,.Align<CR>:sil 'y+1,'z-1s/\(\s*\)=/=\1/ge<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_ts, <SID>WS:AlignCtrl mIp0P1=l #\zs<CR>:'a,.Align<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_ts, <SID>WS:AlignCtrl mIp0P1=l ,\zs<CR>:'a,.Align<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_ts: <SID>WS:AlignCtrl mIp1P1=l :\zs<CR>:'a,.Align<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_ts; <SID>WS:AlignCtrl mIp1P1=l ;\zs<CR>:'a,.Align<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_ts< <SID>WS:AlignCtrl mIp1P1=l <\zs<CR>:'a,.Align<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_ts= <SID>WS:AlignCtrl mIp1P1=l =\zs<CR>:'a,.Align<CR><SID>WE
|
||||
map <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
|
||||
map <silent> <script> <Plug>AM_t? <SID>WS:AlignCtrl mIp0P0=l ?<CR>:'a,.Align<CR>:.,'zs/ \( *\);/;\1/ge<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_t~ <SID>WS:AlignCtrl mIp0P0=l ~<CR>:'a,.Align<CR>:'y,'zs/ \( *\);/;\1/ge<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_t@ <SID>WS::call AlignMaps#StdAlign(1)<cr>:<SID>WE
|
||||
map <silent> <script> <Plug>AM_t@ <SID>WS:call AlignMaps#StdAlign(1)<cr><SID>WE
|
||||
map <silent> <script> <Plug>AM_tW@ <SID>WS:call AlignMaps#StdAlign(2)<cr><SID>WE
|
||||
map <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
|
||||
map <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 \<Char-0x0f>"<bar>endif<CR>:'a,.Align<CR>:exe "'y+1,'z-1s/\<Char-0x0f>/".((&ts == 1)? '\t' : ' ')."/g"<CR><SID>WE
|
||||
map <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
|
||||
map <silent> <script> <Plug>AM_tml <SID>WS:AlignCtrl mWp1P0=l \\\@<!\\\s*$<CR>:'a,.Align<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_tsp <SID>WS:'a,.s/^\(\s*\)\(.*\)/\=submatch(1).escape(substitute(submatch(2),'\s\+','@','g'),'\')/<CR>:AlignCtrl mI=lp0P0 @<CR>:'a,.Align<CR>:'y+1,'z-1s/@/ /g<CR><SID>WE
|
||||
map <silent> <script> <Plug>AM_tsq <SID>WS:'a,.AlignReplaceQuotedSpaces<CR>:'a,.s/^\(\s*\)\(.*\)/\=submatch(1).substitute(submatch(2),'\s\+','@','g')/<CR>:AlignCtrl mIp0P0=l @<CR>:'a,.Align<CR>:'y+1,'z-1s/[%@]/ /g<CR><SID>WE
|
||||
map <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
|
||||
map <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
|
||||
map <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")
|
||||
if has("menu") && has("gui_running") && &go =~# 'm' && !exists("s:firstmenu")
|
||||
let s:firstmenu= 1
|
||||
if !exists("g:DrChipTopLvlMenu")
|
||||
let g:DrChipTopLvlMenu= "DrChip."
|
||||
|
@ -3,7 +3,7 @@
|
||||
" Date: Nov 02, 2008
|
||||
" GetLatestVimScripts: 294 1 :AutoInstall: Align.vim
|
||||
" GetLatestVimScripts: 1066 1 :AutoInstall: cecutil.vim
|
||||
" Copyright: Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1
|
||||
" Copyright: Copyright (C) 1999-2012 Charles E. Campbell, Jr. {{{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,
|
||||
@ -22,7 +22,7 @@
|
||||
if &cp || exists("g:loaded_AlignPlugin")
|
||||
finish
|
||||
endif
|
||||
let g:loaded_AlignPlugin = "v35"
|
||||
let g:loaded_AlignPlugin = "v36"
|
||||
let s:keepcpo = &cpo
|
||||
set cpo&vim
|
||||
|
||||
|
@ -2,8 +2,8 @@
|
||||
" save/restore mark position
|
||||
" save/restore selected user maps
|
||||
" Author: Charles E. Campbell, Jr.
|
||||
" Version: 18b ASTRO-ONLY
|
||||
" Date: Aug 27, 2008
|
||||
" Version: 18h ASTRO-ONLY
|
||||
" Date: Apr 05, 2010
|
||||
"
|
||||
" Saving Restoring Destroying Marks: {{{1
|
||||
" call SaveMark(markname) let savemark= SaveMark(markname)
|
||||
@ -27,16 +27,17 @@
|
||||
" 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 = "v18b"
|
||||
let g:loaded_cecutil = "v18h"
|
||||
let s:keepcpo = &cpo
|
||||
set cpo&vim
|
||||
"DechoTabOn
|
||||
"DechoRemOn
|
||||
|
||||
" =======================
|
||||
" Public Interface: {{{1
|
||||
@ -56,15 +57,17 @@ nmap <silent> <Plug>RestoreWinPosn :call RestoreWinPosn()<CR>
|
||||
" ---------------------------------------------------------------------
|
||||
" Command Interface: {{{2
|
||||
com! -bar -nargs=0 SWP call SaveWinPosn()
|
||||
com! -bar -nargs=0 RWP call RestoreWinPosn()
|
||||
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 "
|
||||
let s:modifier= "sil! "
|
||||
else
|
||||
let s:modifier= "sil keepj "
|
||||
let s:modifier= "sil! keepj "
|
||||
endif
|
||||
|
||||
" ===============
|
||||
@ -77,9 +80,9 @@ endif
|
||||
" 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(...)
|
||||
" call Dfunc("SaveWinPosn() a:0=".a:0)
|
||||
if line(".") == 1 && getline(1) == ""
|
||||
" call Dfunc("SaveWinPosn : empty buffer")
|
||||
" echomsg "Decho: SaveWinPosn() a:0=".a:0
|
||||
if line("$") == 1 && getline(1) == ""
|
||||
" echomsg "Decho: SaveWinPosn : empty buffer"
|
||||
return ""
|
||||
endif
|
||||
let so_keep = &l:so
|
||||
@ -87,14 +90,20 @@ fun! SaveWinPosn(...)
|
||||
let ss_keep = &l:ss
|
||||
setlocal so=0 siso=0 ss=0
|
||||
|
||||
let swline = line(".")
|
||||
let swcol = col(".")
|
||||
let swwline = winline() - 1
|
||||
let swwcol = virtcol(".") - wincol()
|
||||
let savedposn = "call GoWinbufnr(".winbufnr(0).")|silent ".swline
|
||||
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."norm! ".swwline."\<c-y>\<cr>"
|
||||
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>"
|
||||
@ -110,7 +119,7 @@ fun! SaveWinPosn(...)
|
||||
else
|
||||
let b:cecutil_iwinposn= b:cecutil_iwinposn + 1
|
||||
endif
|
||||
" call Decho("saving posn to SWP stack")
|
||||
" echomsg "Decho: saving posn to SWP stack"
|
||||
let b:cecutil_winposn{b:cecutil_iwinposn}= savedposn
|
||||
endif
|
||||
|
||||
@ -119,11 +128,11 @@ fun! SaveWinPosn(...)
|
||||
let &l:ss = ss_keep
|
||||
|
||||
" if exists("b:cecutil_iwinposn") " Decho
|
||||
" call Decho("b:cecutil_winpos{".b:cecutil_iwinposn."}[".b:cecutil_winposn{b:cecutil_iwinposn}."]")
|
||||
" echomsg "Decho: b:cecutil_winpos{".b:cecutil_iwinposn."}[".b:cecutil_winposn{b:cecutil_iwinposn}."]"
|
||||
" else " Decho
|
||||
" call Decho("b:cecutil_iwinposn doesn't exist")
|
||||
" echomsg "Decho: b:cecutil_iwinposn doesn't exist"
|
||||
" endif " Decho
|
||||
" call Dret("SaveWinPosn [".savedposn."]")
|
||||
" echomsg "Decho: SaveWinPosn [".savedposn."]"
|
||||
return savedposn
|
||||
endfun
|
||||
|
||||
@ -132,11 +141,11 @@ endfun
|
||||
" call RestoreWinPosn()
|
||||
" call RestoreWinPosn(winposn)
|
||||
fun! RestoreWinPosn(...)
|
||||
" call Dfunc("RestoreWinPosn() a:0=".a:0)
|
||||
" call Decho("getline(1)<".getline(1).">")
|
||||
" call Decho("line(.)=".line("."))
|
||||
if line(".") == 1 && getline(1) == ""
|
||||
" call Dfunc("RestoreWinPosn : empty buffer")
|
||||
" 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
|
||||
@ -147,9 +156,9 @@ fun! RestoreWinPosn(...)
|
||||
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}")
|
||||
" call Decho("using stack b:cecutil_winposn{".b:cecutil_iwinposn."}<".b:cecutil_winposn{b:cecutil_iwinposn}.">")
|
||||
" echomsg "Decho: using stack b:cecutil_winposn{".b:cecutil_iwinposn."}<".b:cecutil_winposn{b:cecutil_iwinposn}.">"
|
||||
try
|
||||
exe "silent! ".b:cecutil_winposn{b:cecutil_iwinposn}
|
||||
exe s:modifier.b:cecutil_winposn{b:cecutil_iwinposn}
|
||||
catch /^Vim\%((\a\+)\)\=:E749/
|
||||
" ignore empty buffer error messages
|
||||
endtry
|
||||
@ -173,9 +182,9 @@ fun! RestoreWinPosn(...)
|
||||
endif
|
||||
|
||||
else " handle input argument
|
||||
" call Decho("using input a:1<".a:1.">")
|
||||
" echomsg "Decho: using input a:1<".a:1.">"
|
||||
" use window position passed to this function
|
||||
exe "silent ".a:1
|
||||
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
|
||||
@ -197,17 +206,34 @@ fun! RestoreWinPosn(...)
|
||||
" 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
|
||||
silent norm! hl
|
||||
exe s:modifier."norm! hl"
|
||||
elseif virtcol(".") < virtcol("$")
|
||||
silent norm! lh
|
||||
exe s:modifier."norm! lh"
|
||||
endif
|
||||
let &ve= vekeep
|
||||
|
||||
let &l:so = so_keep
|
||||
let &l:siso = siso_keep
|
||||
let &l:ss = ss_keep
|
||||
|
||||
" call Dret("RestoreWinPosn")
|
||||
" 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
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
@ -453,7 +479,7 @@ fun! SaveUserMaps(mapmode,maplead,mapchx,suffix)
|
||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|silent! ".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 ".amap." ".dobuffer.maprhs
|
||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|".mapmode."map ".dobuffer.amap." ".maprhs
|
||||
endif
|
||||
if dounmap
|
||||
exe "silent! ".mapmode."unmap ".dobuffer.amap
|
||||
@ -471,7 +497,7 @@ fun! SaveUserMaps(mapmode,maplead,mapchx,suffix)
|
||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|silent! ".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 ".amap." ".dobuffer.maprhs
|
||||
let s:restoremap_{a:suffix} = s:restoremap_{a:suffix}."|".mapmode."map ".dobuffer.amap." ".maprhs
|
||||
endif
|
||||
if dounmap
|
||||
exe "silent! ".mapmode."unmap ".dobuffer.amap
|
||||
|
@ -41,6 +41,8 @@
|
||||
" 01/27/05 - added sleep to consume less CPU
|
||||
" removed frame counter
|
||||
" 01/26/05 - initial version
|
||||
"
|
||||
" This script is released under MIT license.
|
||||
|
||||
|
||||
" Speed range, must be positive. Lower delay = faster.
|
||||
|
Loading…
x
Reference in New Issue
Block a user