mirror of
https://github.com/troglobit/libuev.git
synced 2026-11-01 12:20:30 +00:00
My stuff
This commit is contained in:
1 parent
ebffcbed5b
commit
38a03fe357
24 files changed
+2900
-14
No files matched your search
@@ -0,0 +1,173 @@
|
||||
" File: increment.vim
|
||||
" Author: Srinath Avadhanula
|
||||
" Email: srinath@eecs.berkeley.edu
|
||||
"
|
||||
" This script provides a way to quickly create incremented lists (either
|
||||
" increasing or decreasing) using the visual block mode.
|
||||
"
|
||||
" Synopsis:
|
||||
" =========
|
||||
" 1. Suppose you have a column of the following form:
|
||||
" array(1) = 3;
|
||||
" array(1) = 3;
|
||||
" array(1) = 3;
|
||||
" array(1) = 3;
|
||||
" array(1) = 3;
|
||||
" 2. Choose the column of '1's using Ctrl-V and then run the command Inc (you
|
||||
" should see "'<,'>Inc" on the command line at this point)(if you do not
|
||||
" have any other user commands starting with 'I', just I will suffice).
|
||||
" This will tranform the text as:
|
||||
" array(1) = 3; array(1) = 3;
|
||||
" array(1) = 3; array(2) = 3;
|
||||
" array(1) = 3; --> array(3) = 3;
|
||||
" array(1) = 3; array(4) = 3;
|
||||
" array(1) = 3; array(5) = 3;
|
||||
" 3. You can then choose the column of '3's (again using Ctrl-V) and run the
|
||||
" command "Inc 3" to generate another incremented list. This will
|
||||
" generate:
|
||||
" array(1) = 3; array(1) = 3;
|
||||
" array(2) = 3; array(2) = 6;
|
||||
" array(3) = 3; --> array(3) = 9;
|
||||
" array(4) = 3; array(4) = 12;
|
||||
" array(5) = 3; array(5) = 15;
|
||||
"
|
||||
"
|
||||
" Note: increment.vim automatically pads the numbers in the the column
|
||||
" with spaces in order to get them right aligned. This is useful in most
|
||||
" cases, but for cases when this might be bad, use IncN which doesnt do
|
||||
" any alignment.
|
||||
"
|
||||
" Commands:
|
||||
" =========
|
||||
" 1. Inc : generates a column of increasing numbers with RIGHT alignment.
|
||||
" 2. IncN: generates a column of increasing numbers with NO alignment.
|
||||
" 3. IncL: generates a column of increasing numbers with LEFT alignment
|
||||
" 2. Inc : generates a column of increasing numbers with RIGHT alignment.
|
||||
" 4. IncN: generates a column of increasing numbers with NO alignment.
|
||||
" 6. IncL: generates a column of increasing numbers with LEFT alignment
|
||||
"
|
||||
" Tip:
|
||||
" A mapping which goes well with this command is the following:
|
||||
"
|
||||
" vnoremap <c-a> :Inc<CR>
|
||||
"
|
||||
" With this mapping, select a column of numbers and press Ctrl-A, which will
|
||||
" get them in increasing order. I use <c-a> because its similar to the <c-a>
|
||||
" command in normal mode which increments the number under the cursor.
|
||||
"
|
||||
" Last Modification: Dec 17 2001 00:59:09
|
||||
|
||||
|
||||
"===========================================================================
|
||||
com! -ra -nargs=? Inc :call IncrementColumn(1,<args>)
|
||||
com! -ra -nargs=? IncR :call IncrementColumn(2,<args>)
|
||||
com! -ra -nargs=? IncN :call IncrementColumn(0,<args>)
|
||||
com! -ra -nargs=? IncA :call IncrementColumn(11,<args>)
|
||||
com! -ra -nargs=? IncAR :call IncrementColumn(12,<args>)
|
||||
com! -ra -nargs=? IncAN :call IncrementColumn(10,<args>)
|
||||
vnoremap <c-a> :Inc<CR>
|
||||
|
||||
"===========================================================================
|
||||
function! StrRepeat(str, count)
|
||||
let i = 1
|
||||
let retStr = ""
|
||||
while i <= a:count
|
||||
let retStr = retStr.a:str
|
||||
let i = i + 1
|
||||
endwhile
|
||||
return retStr
|
||||
endfunction
|
||||
|
||||
" first argument is either 0 or 1 or 2 depending on whether padding with
|
||||
" spaces is desired (pad = 1,2) or not. the second argument contains the
|
||||
" counter increment. its optional. if not specified, its assumed to be 1.
|
||||
function! IncrementColumn(pad, ...)
|
||||
if a:0 == 0
|
||||
let incr = 1
|
||||
elseif a:0 == 1
|
||||
let incr = a:1
|
||||
else
|
||||
return
|
||||
end
|
||||
|
||||
let pad = a:pad
|
||||
let addonly = 0
|
||||
if pad >= 10
|
||||
let addonly = 1
|
||||
let pad = pad - 10
|
||||
endif
|
||||
|
||||
let c1 = col("'<")
|
||||
let c2 = col("'>")
|
||||
let c1v = virtcol("'<")
|
||||
let c2v = virtcol("'>")
|
||||
let clen = c2v - c1v
|
||||
if c1 > c2
|
||||
let temp = c1
|
||||
let c1 = c2
|
||||
let c2 = temp
|
||||
end
|
||||
|
||||
let r1 = line("'<")
|
||||
let r2 = line("'>")
|
||||
if r1 > r2
|
||||
let temp = r1
|
||||
let r1 = r2
|
||||
let r2 = temp
|
||||
end
|
||||
|
||||
exe r1
|
||||
|
||||
exe "let presNum = ".strpart(getline('.'), c1-1, clen+1)
|
||||
|
||||
let lastnum = presNum
|
||||
if !addonly
|
||||
let lastnum = lastnum + incr*(r2-r1)
|
||||
endif
|
||||
" a simple way to find the number of digits in a number (including decimal
|
||||
" points, - signs etc).
|
||||
let maxstrlen = strlen("".lastnum)
|
||||
|
||||
let r = r1
|
||||
exe 'normal '.c1v.'|'
|
||||
while (r <= r2)
|
||||
let cnow = col(".")
|
||||
let linebef = strpart(getline('.'), 0, cnow-1)
|
||||
let lineaft = strpart(getline('.'), cnow+clen, 1000)
|
||||
|
||||
if addonly
|
||||
exe "let presNum = ".strpart(getline('.'), cnow-1, clen+1)
|
||||
let presNum = presNum + incr
|
||||
endif
|
||||
|
||||
" find the number of padding spaces required for left/rigth alignment
|
||||
if pad
|
||||
let preslen = strlen("".presNum)
|
||||
let padspace = StrRepeat(" ", maxstrlen - preslen)
|
||||
else
|
||||
let padspace = ""
|
||||
end
|
||||
|
||||
" the final line is made up of
|
||||
" 1. the part of the line before the number
|
||||
" 2. the padding spaces.
|
||||
" 3. the present number
|
||||
" 4. the part of the line after the number
|
||||
" the padding spaces are either before or after the current number
|
||||
" depending on whether the pad argument is 1 or 2 (respectively).
|
||||
if pad == 1
|
||||
let lineset = linebef.padspace.presNum.lineaft
|
||||
elseif pad == 2
|
||||
let lineset = linebef.presNum.padspace.lineaft
|
||||
else
|
||||
let lineset = linebef.presNum.lineaft
|
||||
end
|
||||
|
||||
call setline('.', lineset)
|
||||
let presNum = presNum + incr
|
||||
normal j
|
||||
let r = r + 1
|
||||
endwhile
|
||||
normal `<
|
||||
endfunction
|
||||
|
||||
Reference in new issue
Block a user