On 17/02/09 19:15, Larson, DavidX S wrote: > Hello all, > > I was working on my script when I ran across this unexpected behavior with > the "if" statement. The doc says: > > :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. > > I thought that meant that if {expr1} evaluated to anything other than zero > (such as a string) then the "if" statement passes, but it doesn't. It's > simple enough to reproduce: > > if "atoehu" > echom "pass" > else > echom "fail" > endif > > Always echo's: "fail". > > Is the bug in the doc, vim, or in my head? I have version 7.2.106. > > Cheers, > David
If {expr} is a Number, zero means "true", anything else means "false". If {expr} is a Float, a List, a Dictionary or a Funcref, the if statement has a syntax error. If {expr} is a String, it is first converted to a Number according to the rules explained about one page or so below ":help variables", under "Conversion from a String to a Number". This means that if the String starts with the string representation of a nonzero number it evaluates to TRUE, otherwise to FALSE. "atoehu" will give you "fail" but "12345" "0xEDCB" and "0377" will give you "pass". Best regards, Tony. -- It is illegal to rob a bank and then shoot at the bank teller with a water pistol. [real standing law in Louisana, United States of America] --~--~---------~--~----~------------~-------~--~----~ You received this message from the "vim_dev" maillist. For more information, visit http://www.vim.org/maillist.php -~----------~----~----~----~------~----~------~--~---