write guide to ed
This commit is contained in:
260
writing/ed.md
Normal file
260
writing/ed.md
Normal file
@@ -0,0 +1,260 @@
|
||||
---
|
||||
title: "Ed: The Standard Editor"
|
||||
tags: [ "writing", "guide" ]
|
||||
---
|
||||
|
||||
`ed` was designed for real terminals, i.e. a typewriter.
|
||||
You would type a command to the computer, and it would type out any errors.
|
||||
It would not waste paper, ink, and time by typing out `COMMAND RUN SUCCESSFULLY` after each command.
|
||||
A silent machine meant a happy machine.
|
||||
|
||||
# Basic Usage
|
||||
|
||||
Open a file:
|
||||
|
||||
```sh
|
||||
ed file.md
|
||||
```
|
||||
|
||||
Insert a new line.
|
||||
|
||||
1. Press `i<Return>`
|
||||
1. Type the line.
|
||||
1. Finish your edit with single dot.
|
||||
|
||||
|
||||
```ed
|
||||
i
|
||||
dear diary,
|
||||
.
|
||||
```
|
||||
|
||||
Print the current line:
|
||||
|
||||
```ed
|
||||
p
|
||||
```
|
||||
|
||||
Change the current line:
|
||||
|
||||
```ed
|
||||
c
|
||||
Dear diary,
|
||||
.
|
||||
```
|
||||
|
||||
Delete the current line:
|
||||
|
||||
|
||||
```ed
|
||||
d
|
||||
```
|
||||
|
||||
|
||||
|
||||
Write the 'buffer' to disk:
|
||||
|
||||
|
||||
```ed
|
||||
w
|
||||
```
|
||||
|
||||
Quit:
|
||||
|
||||
```ed
|
||||
q
|
||||
```
|
||||
|
||||
# Working with Lines
|
||||
|
||||
Open that file:
|
||||
|
||||
|
||||
```ed
|
||||
ed file.md
|
||||
```
|
||||
|
||||
Add a line:
|
||||
|
||||
```ed
|
||||
a
|
||||
Fortune of the day:
|
||||
.
|
||||
```
|
||||
|
||||
Run `fortune`, and place the results inside the current buffer:
|
||||
|
||||
```ed
|
||||
r!fortune
|
||||
?
|
||||
```
|
||||
|
||||
The `?` indicates an error. We can ask what the error was with the command
|
||||
`h`:
|
||||
|
||||
```ed
|
||||
r!fortune
|
||||
?
|
||||
h
|
||||
Unexpected command suffix
|
||||
|
||||
```
|
||||
|
||||
The command `r` has something after it which makes no sense. It should have a
|
||||
space after the `r`!
|
||||
|
||||
|
||||
```ed
|
||||
r !fortune
|
||||
42
|
||||
```
|
||||
|
||||
That last line means `ed` has 42 characters in its buffer.
|
||||
|
||||
Read the current line, and show the line number:
|
||||
|
||||
|
||||
```ed
|
||||
n
|
||||
2 How many weeks are there in a light year?
|
||||
```
|
||||
|
||||
This means we are on line 2.
|
||||
|
||||
Fill up the file with fortunes:
|
||||
|
||||
```ed
|
||||
r !for x in 1 2 3 ; do echo --- && fortune ; done
|
||||
```
|
||||
|
||||
Print out which line in the file we are currently on:
|
||||
|
||||
```ed
|
||||
=
|
||||
12
|
||||
```
|
||||
|
||||
There are twelve lines. Go back up to line 3:
|
||||
|
||||
```ed
|
||||
3
|
||||
---
|
||||
```
|
||||
|
||||
So line 3 just has our delimiter: `---`.
|
||||
|
||||
Whenever you hit enter, `ed` prints the current line then moves to the next
|
||||
line.
|
||||
|
||||
|
||||
```ed
|
||||
I would have promised those terrorists a trip to Disneyland if it would have
|
||||
|
||||
gotten the hostages released. I thank God they were satisfied with the
|
||||
|
||||
missiles and we didn't have to go to that extreme.
|
||||
```
|
||||
|
||||
Go back a few lines:
|
||||
|
||||
```ed
|
||||
-3
|
||||
```
|
||||
|
||||
Print out 'current line', using the dot:
|
||||
|
||||
|
||||
```ed
|
||||
.
|
||||
```
|
||||
|
||||
Print current line with the number of that line:
|
||||
|
||||
|
||||
```ed
|
||||
.n
|
||||
11 Possessions increase to fill the space available for their storage.
|
||||
```
|
||||
|
||||
Print and number the next three lines:
|
||||
|
||||
|
||||
```ed
|
||||
.,+3n
|
||||
9 You have no real enemies.
|
||||
10 ------
|
||||
11 Possessions increase to fill the space available for their storage.
|
||||
```
|
||||
|
||||
Skip ahead four lines:
|
||||
|
||||
```ed
|
||||
+4
|
||||
?
|
||||
h
|
||||
Invalid address
|
||||
```
|
||||
|
||||
This is an `invalid address` because there are no more lines, so `ed` cannot print them.
|
||||
|
||||
# All Commands
|
||||
Meta Commands
|
||||
-------------
|
||||
|
||||
|
||||
| Aim | Command |
|
||||
|:------------------------------------------------|:---------------:|
|
||||
| Explain an error (`?`) | `h` |
|
||||
| Show a prompt when `ed` can take a command. | `P` |
|
||||
| Change the default filename to `rec.txt`. | `f rec.txt` |
|
||||
| Save the file. | `w` |
|
||||
| Append a line after line 8. | `8a` |
|
||||
| Move three lines down. | `+3` |
|
||||
| Move four lines back. | `-4` |
|
||||
| Move to the last line. | `$` |
|
||||
|
||||
Create
|
||||
------
|
||||
|
||||
| Aim | Command |
|
||||
|:--------------------------------------------------------------------|:---------------:|
|
||||
| Insert a line before line 5. | `5i` |
|
||||
| Append a line after line 8. | `8a` |
|
||||
| Read all of `~/.profile` into the current position. | `r ~/.profile` |
|
||||
| Run `dir` and place the results into the current position. | `r !dir` |
|
||||
| Copy lines 10 to 15 to line 23. | `10,15t23` |
|
||||
|
||||
|
||||
Read
|
||||
------
|
||||
|
||||
| Aim | Command |
|
||||
|:--------------------------------------------------------|:--------------:|
|
||||
| Print current line. | `.` or `p` |
|
||||
| Read lines 1 to 10. | `1,10p` |
|
||||
| Print and number lines 2 to 7. | 2,7n |
|
||||
| Find the next line ending with `fi` | /fi$/n |
|
||||
| Show the number of the next line starting with `if`. | `/^if/=` |
|
||||
| Find the line which contains `HOME`. | `?HOME?` |
|
||||
| Print the next five lines literally (showing tabs). | `.,+5l` |
|
||||
| Print from here till the end of the file. | `.,$p` |
|
||||
| Show all lines with `HOME` and show their numbers. | `g/HOME/n` |
|
||||
|
||||
|
||||
Update
|
||||
------
|
||||
|
||||
| Aim | Command |
|
||||
|:------------------------------------------------|:------------------------:|
|
||||
| On line 30, substitute `less` with `less -R` | `30s/less/less -R/` |
|
||||
| Change each line starting `#` to `##` | `,s^# /## /g` |
|
||||
| Move lines 50 to 55 to line 20. | `50,55m20` |
|
||||
|
||||
Delete
|
||||
------
|
||||
|
||||
| Aim | Command |
|
||||
|:------------------------------------------------|:-----------:|
|
||||
| Delete line 4. | `4d` |
|
||||
| Delete from here to four lines down. | `.,+4d |
|
||||
| Delete all lines starting with `#`. | `g/^#/d` |
|
||||
Reference in New Issue
Block a user