On 11/11/11 15:34, Taylor Hedberg wrote:
I'm running into some strange behavior with autocommands, using Vim
7.3.353. I'm not sure whether it's a bug, or just one of those "gotchas"
that seem to pop up throughout Vim's syntax.

I have a command defined as follows:

     command! WinWidth execute 'vertical resize' (&textwidth + 1)

I want the command to be automatically executed when I enter a window in
which w:winwidth is 1. So I wrote:

     autocmd WinEnter * if exists(w:winwidth)&&  w:winwidth | WinWidth | endif

But whenever the autocommand triggers, I get:

     E488: Trailing characters: WinWidth | endif

This doesn't make sense to me, as WinWidth doesn't take any arguments,
nor am I passing any. Somehow, the `| endif` is being interpreted as
arguments to the command.

But if I rewrite it like this, it works:

     function! s:auto_win_width()
         if exists(w:winwidth)&&  w:winwidth
             WinWidth
         endif
     endfunction
     autocmd WinEnter * call s:auto_win_width()

So it seems that there is some problem with using a user-defined command
in a single-line series of commands, separated by '|'s (if I replace the
`WinWidth` with something built-in, like `echo 'foo'`, it works in both
cases). Is this some obscure special case of Vim's syntax or is it just
a bug?


You forgot to set the -bar switch in the definition of WinWidth, therefore it cannot be followed by | and another command.

See :help :command-bar


Best regards,
Tony.
--
What I want is all of the power and none of the responsibility.

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

Reply via email to