Thursday, September 29, 2011

Re: Insert a tab or call a function

On Thu, September 29, 2011 1:52 pm, AK wrote:
> On 09/29/2011 01:58 AM, Benjamin R. Haskell wrote:
>> On Wed, 28 Sep 2011, AK wrote:
>>> 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:
>>
>> 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()
>
> I get 'E523: not allowed here' in TriggerSnippet. I tried :set secure ,
> but that did not help.

I think what happens is, that one of your functions triggers an
action, that is not allowed inside an expr-mapping. If you need to do
something like this, you need to have the functions return the
commands, that will do that.

See :h :map-<expr>
and look at the third paragraph.

regards,
Christian

--
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: