On Sun, Aug 13, 2006 at 01:04:23AM -0500, Bill McCarthy wrote:
> Hello Vim List,
> 
> " odd result
> "
> " This is part of some code going into a "command".  If the
> " left 3 columns are removed - making this code with 1
> " statement per line - the code works perfectly.  [It sets
> " 'wfw' for all windows that can be reached with ":wincmd
> " l", then returns to the original window.]
> "
> " However, as is, it only works if there is a window to the
> " right of the current window.  If there isn't, it errors
> " out with:  E170: missing :endwhile
> 
>    let owin = winnr()
> \| let lwin = owin
> \| winc l
> \| let nwin = winnr()
> \| while nwin != lwin
> \|     let w:owfw = &winfixwidth
> \|     set wfw
> \|     let lwin = nwin
> \|     wincmd l
> \|     let nwin = winnr()
> \| endwhile
> \| exec owin . 'wincmd w'
> 
> " Can anyone help me get around this little misunderstanding
> " I am having with the Vim interpreter?  (I know that I can
> " put this code into a function with 1 statement per line,
> " but I am curious as to why it will not work as is.)

     It looks inconsistent to me.  I tried a simplified version:

:let owin = winnr() | let lwin = owin | winc l | let nwin = winnr() | while 
nwin != lwin | let lwin = nwin | wincmd l | let nwin = winnr() | endwhile

(all one line) and saw something similar:  with only one window, vim
waits for more input, but it is fine after :vsplit .  I decided I wanted
some feedback, so I added an :echo :

:let owin = winnr() | let lwin = owin | winc l | let nwin = winnr() | while 
nwin != lwin | let lwin = nwin | wincmd l | let nwin = winnr() | endwhile | 
echo "done"

(again, one llne).  Now, vim waits for :endwhile whether or not I have
multiple windows.

     I also tried

:let n = 0 | while n > 0 | let n = n-1 | endwhile | echo "n =" n
:let n = 1 | while n > 0 | let n = n-1 | endwhile | echo "n =" n

and both of these worked fine.

     I remember something about not allowing :endwhile on the same line
as the :while , separated by | , but I cannot find it in the docs today.

HTH                                     --Benji Fisher

Reply via email to