Hi,
I'm a noob myself but I believe "VIM::Buffer.current.line" + a "vmap"
is all you need.
Here's what I've coded recently, maybe that'll help you out:
###########################
####start of vimscript#####
###########################
autocmd bufenter * :call Get_filetype()
nmap <S-F4> :call PrependComment("up")<cr>
nmap <F4> :call PrependComment("down")<cr>
imap <S-F4> <esc>:call PrependComment("up")<cr>
imap <F4> <esc>:call PrependComment("down")<cr>
"" <F16> is <C-F4> (for me)
nmap <F16> :call PrependComment("stationary")<cr>
imap <F16> <esc>:call PrependComment("stationary")<cr>
vmap <F4> :call PrependComment("stationary_vmap")<cr>
fun! Get_filetype()
ruby << EOF_Get_filetype
filetype = VIM::evaluate("&filetype")
$comment_token = case filetype
when "sh", "perl", "python", "ruby": "#"
when "c", "cpp", "java": "//"
when "vim": '"'
else ""
end
EOF_Get_filetype
endfun
fun! PrependComment(direction)
ruby << EOF_PrependComment
direction = VIM::evaluate("a:direction")
if direction == 'up'
VIM.command("normal -")
end
line = VIM::Buffer.current.line
if line =~ /^\s*#{$comment_token}[ [:alnum:]].*/ #
if comment at beginning of line
line.gsub!(/(^\s*)(#{$comment_token}[ ]?)(.*)/, '\1\3') #
delete comment
else
if direction == "stationary_vmap"
line.gsub!(/.+/, "#{$comment_token} \\0") #
comment token on the far left
else
line.gsub!(/[^ ].*/, "#{$comment_token} \\0") #
otherwise add comment
end
end
VIM::Buffer.current.line = line
if direction == 'down'
VIM.command("normal +")
end
EOF_PrependComment
endfun
#########################
####end of vimscript#####
#########################
If that's of any interest, I can send you the rest of the file if you
wish.
All the best and good luck,
Ben
On Mar 25, 10:24 am, [email protected] wrote:
> Hi,
>
> I've checked the docs on the ruby scripting features in vim but I
> cannot find a way to retrieve the visual selection area in either
> VIM::window or VIM::buffer. Is there any way to do this or any easy
> workaround for this?
>
> As an example I would like to be able to visually select an area and
> invoke a ruby script that would add a comment line to the top and
> bottom of the selection (while of course preserving undo history).
> Also I would like to be able to select an arbitrary area and execute a
> ruby script that could search in for certain characters in the area.
>
> /Anton
--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_use" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---