2011/7/23 Ben Schmidt <mail_ben_schmidt@yahoo.com.au>
Thanks a lot for your kind comments.
You don't need to apologies for bothering us. If we didn't enjoy helpingI wanted to thank you guys for the patience, and for all the tips. I
am quite new with Vimscript, so everything is hard to me. But that is
the reason I keep trying, to learn and to educate myself. Sorry for
bothering you guys. As I said, trying to educate myself with
Vimscript,
people with Vim, we wouldn't be on this mailing list. It's also clear
that you've put in some effort yourself into solving your problems, and
aren't just using us as a first response. Anyone with that kind of
attitude will be warmly welcomed here, and have their questions gladly
received (and if they're not answered, it's probably because we don't
know the answer...).
Thanks a lot for your kind comments.
So here is an implementation I am minimally satisfied with (can be improved, but for the time being I am happy with it).
It would have been impossible without your help.
function Comment(...) range
"
" Function to comment-out and uncomment-out blocks of code
"
" If a range is passed, all lines in it are used.
" Otherwise, the first and last line of the current paragraph
" are calculated.
"
" The commenting string can be passed as argument.
" # is used as default otherwise.
"
" Once the region and commenting string are determined,
" it checks if all lines in that region already starts
" with that string. In that case it is assumed the
" desired operation is to uncomment the block.
" If at least one line is not already commented it is
" assumed the desired operation is to comment the block.
"
" --------------------------------------------------
" determining range
" --------------------------------------------------
if a:firstline == a:lastline
" no range has been provide, so ...
" searching for first and last line of the current block.
" searching backwards for the first blank line, and ading 1
let firstline = search('\v^\s*$', 'bnW') + 1
" searching forward for the first blank line, and substracting 1
let lastline = search('\v^\s*$', 'nW') - 1
if lastline == -1
" we hitted the end of the file
let lastline = line('$')
endif
else
" the range was provided
let firstline = a:firstline
let lastline = a:lastline
endif
" --------------------------------------------------
" determining commenting string
" --------------------------------------------------
let comstring = a:0 == 1 ? a:1 : '#'
" --------------------------------------------------
" checking if the region is already commented
" --------------------------------------------------
let commented = 1
for linenum in range(firstline, lastline)
let line = getline(linenum)
if match(line, comstring) != 0
" as soon as a line not starting
" with the commenting string is found
" is it understood the region is NOT commented
let commented = 0
endif
endfor
" --------------------------------------------------
" operations
" --------------------------------------------------
for linenum in range(firstline, lastline)
let oldline = getline(linenum)
if commented == 1
" uncommenting-out ...
" the commenting string is substituted by ''
let newline = substitute(oldline, comstring, '', '')
else
" commenting-out ...
" the commenting string is added to the line
let newline = comstring.oldline
endif
call setline(linenum, newline)
endfor
endfunction
It would have been impossible without your help.
function Comment(...) range
"
" Function to comment-out and uncomment-out blocks of code
"
" If a range is passed, all lines in it are used.
" Otherwise, the first and last line of the current paragraph
" are calculated.
"
" The commenting string can be passed as argument.
" # is used as default otherwise.
"
" Once the region and commenting string are determined,
" it checks if all lines in that region already starts
" with that string. In that case it is assumed the
" desired operation is to uncomment the block.
" If at least one line is not already commented it is
" assumed the desired operation is to comment the block.
"
" --------------------------------------------------
" determining range
" --------------------------------------------------
if a:firstline == a:lastline
" no range has been provide, so ...
" searching for first and last line of the current block.
" searching backwards for the first blank line, and ading 1
let firstline = search('\v^\s*$', 'bnW') + 1
" searching forward for the first blank line, and substracting 1
let lastline = search('\v^\s*$', 'nW') - 1
if lastline == -1
" we hitted the end of the file
let lastline = line('$')
endif
else
" the range was provided
let firstline = a:firstline
let lastline = a:lastline
endif
" --------------------------------------------------
" determining commenting string
" --------------------------------------------------
let comstring = a:0 == 1 ? a:1 : '#'
" --------------------------------------------------
" checking if the region is already commented
" --------------------------------------------------
let commented = 1
for linenum in range(firstline, lastline)
let line = getline(linenum)
if match(line, comstring) != 0
" as soon as a line not starting
" with the commenting string is found
" is it understood the region is NOT commented
let commented = 0
endif
endfor
" --------------------------------------------------
" operations
" --------------------------------------------------
for linenum in range(firstline, lastline)
let oldline = getline(linenum)
if commented == 1
" uncommenting-out ...
" the commenting string is substituted by ''
let newline = substitute(oldline, comstring, '', '')
else
" commenting-out ...
" the commenting string is added to the line
let newline = comstring.oldline
endif
call setline(linenum, newline)
endfor
endfunction
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
No comments:
Post a Comment