TL;DR
If your program does not already implement or integrate a scripting language, use a standardized format like TOML, YAML, JSON, or XML. In this case, I would include to appropriate file extension, just to make clear that it is, indeed, that format, and not just something superficially similar.
If your program does implement or integrate a scripting language and it's one the typical user will be exposed to frequently enough to gain familiarity during typical usage of your app, consider just using that language.
Vim and Zsh are both interpreters. Vim implements the Vim Scripting Language (sometimes called Vimscript or VimL):
The Vim script language is used for the startup vimrc file, syntax files, and many other things.
Zsh implements, um, Zsh, which is also a programming language:
Zsh is a shell designed for interactive use, although it is also a powerful scripting language.
(Emphasis added by me)
The Vim quote outright says it, vimrc
is written in VimL. The same applies to zshrc
: it's written in Zsh. Additionally, whenever you use a command in command-line-mode in Vim or write a command at Zsh's shell prompt in the terminal, you're writing VimL or the Zsh language, respectively.
What this all boils down to is that the authors of Vim and Zsh didn't invent some new, unique syntax for their config files, they just reused the programming languages their programs already implemented. Since their users use these languages to interact with the programs, the users can easily become quite familiar with them, making it easy to understand the config files.
This is especially true for Zsh, where, aside from some control-codes, and minor cursor manipulation, the only way to interact with the shell is through the language. It's somewhat less true for Vim, where most of the interaction may happen through normal and insert mode, and even the number of commonly used command-line commands may be limited.