On 2006-08-25, Max Dyckhoff <[EMAIL PROTECTED]> wrote: > > From: A.J.Mechelynck [mailto:[EMAIL PROTECTED] > > Sent: Friday, August 25, 2006 12:36 PM
> > Max Dyckhoff wrote: > > > Recently something rather annoying has started happening; key > > > codes have started occasionally timing, despite my express > > > desire for them to never time out. notimeout and nottimeout > > > are both set. > > > > > > If I move to a place in the file and type ^W quickly and then > > > pause before typing ], then it will timeout after around a > > > second. If I move to a place in the file and then wait for a > > > small period of time, the ^W will no longer time out. > > > > > > It looks like something related to the CursorHold time is > > > happening, but I can't for the life of me work out what it is. > > > Any ideas? > > As your subject hints, try > > > > :verbose set timeout? ttimeout? timeoutlen? ttimeoutlen? > > > > then read the help about these 4 options. > > > > In a nutshell, to have Vim time out after 0.25 second for multibyte > > keycodes (generated by the keyboard driver) and after only 5 seconds > > when you're typing the {lhs} of a mapping, use > > > > :set timeout ttimeoutlen=250 timeoutlen=5000 > > > > To time out after 0.1 second for keycodes and never for mappings, use > > > > :set notimeout ttimeout ttimeoutlen=100 > > > > etc. The default is one second for both. > I'm sorry, perhaps I wasn't being clear enough. I don't want a timeout > to ever occur for a mapping. timeout and ttimeout are both set to "no" > (or whatever the correct syntax for describing such options is). > > Here are two use cases. Again, I apologise for the clumsy syntax. > > 1) > * Move cursor > * Type ^w > * Wait updatetime from cursor movement > * Observe mapping timeout > > 2) > * Move cursor > * Wait updatetime > * Type ^w > * Observe no mapping timeout > > If I set updatetime=1 then the timeout never occurs, because the second > use case is followed, but I want updatetime to be around 1000. :verbose > au CursorHold shows that the only CursorHold au is one set from > ctags.vim: > > autocmd CursorHold * > \ if generate_tags != 0 > \ | call s:SetTagDisplay() > \ | endif > > Is this au timing out my mapping? Can I make it stop doing so without > removing the au or altering the updatetime? I can verify this behavior and that removing the CursorHold autocommand "fixes" the problem. It may be a bug in Vim. I reported a similar problem with the 7.0b or 7.0c release that did turn out to be a bug in the event handler. It's not just mappings that are affected. With the following settings: showcmd notimeout nottimeout updatetime=500 and the ctags.vim CursorHold autocommand enabled, if I type a cursor-movement command (such as 'j') immediately followed by a double-quote to start a register name, the double-quote briefly appears in the 'showcmd' area, then disappears with a beep. If I increase 'updatetime' to 5000 and repeat the experiment, the double-quote stays for about 5 seconds before disappearing. It looks to me like an undesirable interaction between processing of the CursorHold autocommand and processing of commands from the keyboard. Bram? I should mention that I'm using the 7.0 release, unpatched. I'm working on bringing it up to the current patch level, but I'm not done with that yet. Regards, Gary -- Gary Johnson | Agilent Technologies [EMAIL PROTECTED] | Wireless Division | Spokane, Washington, USA