NealStephenson? said it best [In the Beginning...]
The existance of a command line is a key feature of powerful text editors.
Command lines are used in the ViFamily, EmacsFamily, IbmEditorFamily, and others.
Also most editors that do have a commandline have an escape, usually the bang ('!') that allows one to execute system commands. Thus giving the editor a basic Shell feature.
An alternative is the ability to "filter" a buffer of text with a command. That command could be either a built-in, a macro, or a Shell command. In VI, this is the '|' pipe character's function on the CommandLine.
For instance, editors in the IbmEditorFamily like ISPF/PDF, XEDIT, ICCF, THE, T, cse, X2 have an actual command line on the screen interface. Editors like Vi provide a means to execute a command in a sub-shell (via ":!command") but don't have a command line per se. Some editors, like Kate or X2, hide their command lines and provide a key sequence to make it visible.
Editors with command lines, of course, also provide commands to be typed there. Many are simple: top, bottom, up, down, etc.; these are equivalent to ALT- or CTRL- key combinations used by other editors. More complicated commands like find and change are implemented in other editors with pop-up windows. When used one at a time there is little difference between command line commands and key-combination commands; the advantage for command line commands is that they can be chained together, either by separating them with a logical line-end character, or with a sort of cascading method; thus, in the X2 editor, after marking a block of lines, one may enter top^/string/^c/from/to/m* (where ^ is the logical line-end character), which does the following:
/* Simple EXAMPLE XEDIT */ signal on error /* Stop when RC (return code) is non-zero. */ 'locate *-/firstString/' /* Start from the last occurance of firstString. */ do while rc = 0 /* While the string is found, */ 'change /from/to/ /lastString/ 2' /* change fromString to toString from there to lastString, */ 'locate -/firstString/' /* then find the previous occurance of firstString. */ end error: exit rc
The macro can also be written to accept arbitrary strings on the command line, etc.
By contrast, shell escapes allow one to execute non-editor commands, and perhaps insert the results into the text being edited, but this is not quite the same as modifying the text using editor commands. --JLTurriff