2. Part 2: ex
ex is the underlying editor for vi. It offers a richer set of commands to do multi-line editing.
The general syntax for ex commands is: [scope]command[command argument], where scope specifies the range of lines that you want command to have effect on. A command without a scope is assumed to affect the current line. I’ll try to summarize scope, command and command argument in three separate subsections
2.1. Scope
Scope is represented by specifying two lines: Start Line and End Line. Command will only operate on lines within this bound. You can use any of the following methods to identify a target line, and you can use symbol ‘,’ to combine two lines to represent the scope.(Note: You can also use ‘;’ to combine two lines. The subtle difference lies in how current line anchor is defined when searching for Start Line and End Line)
- Explicit line numbers: num1 represents line num1
- Symbols: You can use the following symbols to specify a line relative to current line.
. Current line $ Last line of file % Every line in the file symbol num The line represented by symbol with offset num - Search Patterns: /pattern/ represents the next line containing /pattern/. You can also use to do offset.
2.2. Command
Here is a list of Commands:
:num | Go to line num |
:p | Print lines |
:# | Print lines with line number |
:= | Print line number |
:g/pattern/ cmd | Run cmd on each of the lines containing pattern |
:g/pattern/ cmd | Run cmd on each of the lines not containing pattern |
:d | Delete |
:m target line | Move to target line |
:co/t target line | Copy to target line |
:s/pattern1/pattern2/ | Replace pattern1 with pattern2 |
:cmd1cmd2 | Combine multiple commands. Run cmd2 after cmd1 |
:w file | Save to file but not quit |
:r file | Read file and append |
:e file | Open file to edit. |
:q | Quit if you have not made any edits |
2.3. Command Arguments
Command argument format usually depends on the specific command. For example, :w takes a string to represent the name of the file, while :m takes as argument another line specified by one of the methods described in Scope. vi maintains two file names accessed most recently by :e, and there are two symbols that can be used in command arguments to represent them:
% | Current file name |
# | Alternative file name |