I followed QA_1.

I use vim 9.1.0 instead of nvim which seems to also have the following bug and I have the following in foo.vim at line 67:

if g:LOG_MSG==v:true | echow "g:mode_class " | else | echo "" | endif

Here when g:LOG_MSG=v:true it will echow "g:mode_class " and all is fine. But when g:LOG_MSG=v:false, it will throw line 92: E171: Missing :endif (Notice it is at line 92 instead of 67). And when I do :if g:LOG_MSG==v:true | echow "g:mode_class " | else | echo "" | endif in the command mode it works all well.

By QA_2, here echow may be probably not the source of this problem.

IMHO, it is probably due to if v:false will skip all the following in that line. And multi-line if else endif block works.

The minimal reproduction:

$ cat ~/.vim/tmp/if_endif.vim
if v:false | echow "g:mode_class " | else | echo "" | endif
$ echo "" > ~/.tmp.vimrc;vim --noplugin -u ~/.tmp.vimrc -c ":source ~/.vim/tmp/if_endif.vim"
Error detected while processing command line..script /c/Users/czg/.vim/tmp/if_endif.vim:
line    2:
E171: Missing :endif


How to make if else endif oneliner work in VIM?

1 Answer 1


The issue is within echo(w) as it can't figure out where is the end of the command.

A workaround is to wrap it with execute:

if v:false | exe 'echow "g:mode_class "' | else | exe 'echo ""' | endif

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.