On Sep 30, 11:28 am, Bee <[email protected]> wrote:
> On Sep 30, 7:34 am, Ben Fritz <[email protected]> wrote:
> > You're trying to use conditional logic in a tiny or small build. This
> > will not work. Expression evaluation is only available in Normal
> > builds or bigger.
>
>
> Hi Ben,
>
> This is the information you are missing, :help :if
>
> :if {expr1} *:if* *:endif* *:en* *E171* *E579* *E580*
> :en[dif] Execute the commands until the next matching ":else"
> or ":endif" if {expr1} evaluates to non-zero.
>
> From Vim version 4.5 until 5.0, every Ex command in
> between the ":if" and ":endif" is ignored. These two
> commands were just to allow for future expansions in a
> backwards compatible way. Nesting was allowed. Note
> that any ":else" or ":elseif" was ignored, the "else"
> part was not executed either.
>
Actually, this says absolutely nothing about small or tiny builds of
Vim 7.3. I take it, you expect Vim 7.3 Tiny to act like Vim 4.5 in
this case? This does seem reasonable, but is not explicitly stated. I
think you're right and that's how it's supposed to work.
> This is a conditional PARSING problem.
>
> As stated, the "if 0" is used to comment out a region of the vimrc.
>
> This vimrc works on all vim versions on all platforms I work, with the
> exception of the one formatted as T05().
> The workaround is to use the T01() or T02() formatted version below.
>
> I should have used ''if has("eval")'' in the example. See below.
>
> Both tiny and small are designed skip any region bracketed with any
> conditional sense (future expansions), but in one of the three
> examples FAILs to parse correctly.
>
> Only EXAMPLE 3 above, did tiny and small FAIL to parse the conditional
> correctly.
>
> I will try writing differently:
>
Thanks, your new example is much clearer.
> if has("eval") " tiny, small, normal parse CORRECTLY
> function! T01()
> let r = 1
> if r > 0
> let r = 0
> endif
> endfun
> endif
>
> if has("eval") " tiny, small, normal parse CORRECTLY
> function! T02()
> let r = 1
> if r > 0 | let r = 0 " <<= <<= <<= only change
> endif
> endfun
> endif
>
> tiny and small FAIL to parse correctly when formatted like:
>
> if has("eval") " tiny, small FAIL -- normal parse correctly
> function! T05()
> let r = 1 | if r > 0 " <<= <<= <<= only change
> let r = 0
> endif
> endfun
> endif
>
> T05() is parsed fine in a normal build with all other options the
> same.
>
This does look like a bug. However, I note that :let is an expression-
related command. Maybe :let commands without +eval just ignore
everything on the line without checking for more commands? I'm not
sure if there's really a way around this, since expressions cannot be
parsed without +eval.
What happens if you replace the "let r = 1" command with a :set
command or something else that does not relate to expression
evaluation? I'm more curious than anything else...I don't have the
knowledge of Vim's code or the desire to use a Tiny/Small build to
even begin to know how to fix this.
--
You received this message from the "vim_dev" 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