Those are valid commands that can be inserted at that position (in this case, at the very beginning of the command line), although not all of them may make much sense to run.
By make sense, I mean that a command may have certain dependencies/prerequisites to have a meaningful effect. Some commands are also designed to modify other commands (e.g., :silent
) or take arguments (e.g., echo
), although they are perfectly valid (albeit pretty useless) by themselves.
Take :sNext
for example. We have :h :sNext
:
:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext*
Short for ":split | [N]Next": split window and go to Nth
previous argument. But when there is no previous file, the
window is not split. Also see |++opt| and |+cmd|.
That is, if there is no previous argument/file, it won't have any (observable) effect. It won't crash, though. It'll give you a pretty harmless error msg, but some commands won't even do that, just silently do nothing.
For completeness, one could also mention that it's quite common that commands assume one or more arguments if none was supplied. For instance, :e {file}
would edit {file}
, while :e
without arguments would edit the current file.
As an example, enter :echo sNex
and press tab and you'll notice that vim won't suggest sNext
.
Now, do the same but for :echo expa
. Notice how the suggestions are context dependent and you'll get a couple of suggestions this time.
:sNext
for instance. It's pretty useless if there isn't anything in the argument list, but it's still a valid command and won't crash if there isn't; it just won't do anything. It seems like you've misunderstood something here, because it works like you explain/expect.