> Hi, I'm trying to write a small function that is called when I press 
> tab key and checks if current line is empty; if it is, it should 
> insert a tab, and if not, it should call two other functions. Here's 
> the example of what I came up with, which does not work right:
>
> function! DoTab()
>    if match(getline('.'), '^\s*$') != -1
>        call feedkeys("\<tab>") | return ''
>    else
>        call CloseMenu()
>        call feedkeys("\<c-r>=TriggerSnippet()\<cr>") | return ''
>    endif
> endfu
> ino <silent> <tab> <c-o>:call DoTab()<CR>
>
> CloseMenu is another function I have that closes a popup menu if it's 
> open, TriggerSnippet is a snipmate function that expands current 
> snippet.
Wanting to either insert something or run another function is a good 
case for <expr> mappings.  It depends a bit on how TriggerSnippet works, 
the following might be all you need:
fun! DoTab()
    if getline('.') =~ '^\s*$'
        return "\<tab>"
    else
        call CloseMenu()
 	   return TriggerSnippet()
    endif
endfun
ino <expr> <tab> DoTab()
-- 
Best,
Ben
-- 
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