Next: Options, Previous: Mapping, Up: Commands [Contents][Index]

### 4.6 Shell Commands

The symbol ‘`%`’ is used in Ex shell commands to mean current file. If you want a ‘`%`’ in your command, it must be escaped as ‘`\%`’. However if ‘`%`’ is the first character, it stands as the address for the whole file. Similarly, ‘`#`’ expands to the previous file. The previous file is the first file in `:args` listing. This defaults to the previous file in the VI sense if you have one window.

Symbols ‘`%`’ and ‘`#`’ are also used in the Ex commands `:e` and `:r <shell-cmd>`. The commands `:w` and the regular `:r <file>` command don’t support these meta symbols, because file history is a better mechanism.

`:sh`

  Execute a subshell in another window

`:[x,y]!<cmd>`

  Execute a shell <cmd> [on lines x through y; % is replace by current file, \% is changed to %

`:[x,y]!! [<args>]`

  Repeat last shell command [and append <args>].

`:!<cmd>`

  Just execute command and display result in a buffer.

`:!! <args>`

  Repeat last shell command and append <args>

`<count> !<move><cmd>`

  The shell executes <cmd>, with standard input the lines described by <count><move>, next the standard output replaces those lines (think of ‘`cb`’, ‘`sort`’, ‘`nroff`’, etc.).

`<count> !!<cmd>`

  Give <count> lines as standard input to the shell <cmd>, next let the standard output replace those lines.

`:[x,y] w !<cmd>`

  Let lines x to y be standard input for <cmd> (notice the <sp> between `w` and `!`).

`:<address>r !<cmd>`

  Put the output of <cmd> after the line <address> (default current).

`:<address>r <name>`

  Read the file <name> into the buffer after the line <address> (default current).

`:make`

  Run the make command in the current directory.

Next: Options, Previous: Mapping, Up: Commands [Contents][Index]