This is only partly possible. I provide the explanation below after giving some examples, first.
When you open a terminal inside Vim using :term[inal]
, the terminal is opened in a mode called Terminal-Job mode. This means that the job, i.e. the terminal process is in control of the contents of the buffer containing the terminal. You can use termwinkey
, which defaults to Ctrl-W if the option termwinkey
is unset, and then type N
(capital N, i.e. Shift-N) to switch to Terminal-Normal mode. This enables you to visually select and yank text. It does not allow you to delete text, though, as (out of necessity, see below) the buffer is not modifiable. To go back to Terminal-Job mode, i.e. the mode where you can type and execute commands, press anything that normally would lead you to enter insert mode such as i
or a
. Here you can insert previously yanked text by again pressing termwinkey
and then "
, followed by a letter indicating the register whose contents you would like to paste. E.g. if you simply copied text with a command such as y
(without explicitly specifying a register) to the default register, you need to type termwinkey
"
"
(i.e. "
twice) to paste the text you copied to the terminal.
Hence, to follow your example someCommand someArg1 someArg2
: You can enter Terminal-Normal mode by pressing Ctrl-W and than (capital) N
(resp. termwinkey
N
), and then visually select someArg2
and yank it using y
. Then, you can switch back to Terminal-Job by pressing i
, delete someArg2
by pressing backspace (or Ctrl-Alt-H if your shell allows for this), move to before someArg1
using arrow keys (or using Ctrl-B and Alt-B if your shell allows for this) and insert someArg2
before someArg1
using <C-W>""
.
There is no way to delete any text in the terminal, though. To understand why this is impossible, we must discuss roughly what happens when you press a key in the terminal resp. terminal-emulator. A usual misconception is to think that if you type someCommand
in a terminal resp. terminal emulator, the characters corresponding to the key strokes are only sent to the shell (i.e. the process running in your terminal resp. terminal emulator that executes your comments) after pressing enter. Usually, this is not what happens. The misconception arises because shells typically echo every character back to the terminal resp. terminal emulator whenever you type it, such that you can see what characters you have just typed. Additionally, they typically implement features to edit the command you have typed before executing it (a typical choice to implement such features is the readline
library).
Consequently, whenever you open a terminal in Vim - as in a regular terminal emulator - Vim immediately sends a key stroke to the shell instead of displaying the corresponding character in the buffer by itself. Then, typically, the shell echoes the character back. Vim receives the output from the terminal and displays it in the buffer, i.e. you are able to see the character on the screen corresponding to the key you just have pressed.
Hence, Vim is not really in charge of the contents you see in the buffer in which a terminal has been opened within Vim. It is the shell that decides over the contents of this buffer, and for this shell Vim acts as a terminal emulator where the buffer is the display. Keystrokes are send immediately to the shell and Vim displays whatever the shell instructs Vim to display, including the characters the shell echoes back to you whenever you press a key. In particular, Vim does not allow you to edit anything you have typed before sending it to the shell.
This behaviour is intended. Otherwise, within Vim, you would not be able you use the command line editing features of your shell, such as (if your shell is capable and configured to do so) going back through your command line history by pressing Ctrl-P (resp. arrow key up).