home *** CD-ROM | disk | FTP | other *** search
- " Defines an :align alias for aligning = signs, or some other delimiter. This
- " can be handy when you're trying to make a Makefile look pretty.
- " Contributed by Ian Utley (iu@apertus.uk.com)
-
- alias align {
- "Align any = signs (or other given text) in selected line
- local f=0 i=0 k report=0 nosaveregexp magic magicchar=^$.[* noignorecase
- "
- " The following if tests to see if we have visually highlighted lines.
- "
- if ( !> !!= "" )
- then {
- !< mark a
- !> mark b
- let f=1
- }
- if ( f == 1)
- then {
- "
- " Initialise i which will store the alignment column.
- " Mark the current line to return the cursor at the end.
- "
- set i=0
- mark z
- "
- " Remove any whitespace before the alignment character.
- "
- 'a,'b s/[ ]*!(=)\$/!(=)\$/
- "
- " We could be aligning != <= or >= so we want to keep this letter
- " near. Of course we may not be aligning an equals but we commonly do.
- "
- if ( "!(=)\$" == "=" )
- then {
- 'a,'b s/[ ]*\([!!<>]*\)!(=)\$[ ]*/ \1!(=)\$ /
- }
- "
- "
- let f=0
- 'a,'bglobal /!(=)\$/ {
- "
- " Special case for the top line as -1 will not work.
- "
- if ( current("line") == 1 )
- then {
- 1 insert ""
- let f=1
- }
- -1
- /!(=)\$
- "
- "
- " Remember the largest column number for alignment.
- "
- if (current("column")>i)
- then let i=current("column")
- "
- " Special case removal
- "
- if ( current("line") > 1 && f == 1)
- then {
- 1 delete
- let f=0
- }
- }
- "
- " Do the alignment.
- "
- let f=0
- 'a,'bglobal /!(=)\$/ {
- "
- " Special case for the top line as -1 will not work.
- "
- if ( current("line") == 1 )
- then {
- 1i ""
- let f=1
- }
- -1
- /!(=)\$
- "
- " Not sure why I need to add +1
- "
- let k=i-current("column")+1
- s/\([!!<>]*\)!(=)\$/ \1!(=)\$/
- eval s/ *\\\( \{(k)\}[!!<>]*!(=)\$\\\)/\1
- "
- " Special case removal
- "
- if ( current("line") > 1 && f == 1 )
- then {
- 1 delete
- let f=0
- }
- }
- "
- " Return the cursor to the line it was previously on.
- "
- 'z
- }
- }
-