On Thu, 8 Jul 2010, Bram Moolenaar wrote: > > Benjamin Haskell wrote: > > > On Tue, 6 Jul 2010, Tony Mechelynck wrote: > > > > > Forward to list. > > > > > > -------- Original Message -------- > > > Subject: Re: synstack() in insert mode > > > Date: Tue, 6 Jul 2010 05:59:18 +0100 > > > From: Marcin Szamotulski <[email protected]> > > > To: Tony Mechelynck <[email protected]> > > > > > > On 04:09 Tue 06 Jul , Tony Mechelynck wrote: > > > > On 06/07/10 02:13, Marcin Szamotulski wrote: > > > > > > > > > > Sorry for not being precise, this doesn't give an error, but > > > > > g:synstack variable should be a list while if I do ':echo > > > > > g:synstack' I get '0' not '[]'. > > > > > > > > > > In a script I'm getting error because I then process with > > > > > g:synstack as a list. > > > > > > > > > > Best regards, > > > > > Marcin > > > > > > > > Well, I get the value [] in g:synstack. > > > > > > > > Also, please remember that bottom-posting is preferred on this list, > > > > as mentioned until two and a half hours ago at the very bottom of > > > > every post. > > > > > > > > > > In both gentoo distributed version of vim and fresh install (using svn) > > > I get an error while in empty line, in non empty line things works fine. > > > > > > > Using Tony's example autocmd: > > :set cmdheight=2 > > :aug testing > > :au! > > :au CursorMovedI * echo synstack(line('.'),col('.')) > > :aug END > > I get an empty value (not []) when the cursor is at the end of the line. > > > > E.g. with ft=sql, enter insert mode and use the arrow keys to move. > > Cursor position marked with '^' below, and the output of the autocmd. > > There's no trailing space on the line. > > > > select * from > > ^ - [] > > select * from > > ^ - [108] > > select * from > > ^ - blank > > > > Changing the autocmd to need a list, I get 'List required' errors: > > > > e.g.: > > :aug testing > > :au! > > :au CursorMovedI * let l=synstack(line('.'),col('.')) | for x in l | echo > > "," l | endfor > > :aug END > > > > For the OP: The workaround is probably to change whatever is setting > > g:synstack > > to check for an index beyond the end of the line: > > > > " off the cuff -- probably wrong for multibyte encodings... > > if col('.') > strlen(getline('.')) > > let g:synstack = [] > > else > > let g:synstack = synstack(line('.'),col('.')) > > endif > > I'll make it so that synstack() works when on the character just after > the end of the line. It was already working for an empty line, thus > should also work when just after the last character.
Would it make sense to have it work on any character past the end of the line? I don't use 'virtualedit', but it seems like it'd make sense to treat the situation similarly. -- 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
