๐งฎ Part 2. vi Editor
(Text Editing in UNIX/Linux Using vi)
๐ฏ ํ์ต ๋ชฉํ (Learning Objectives)
- ๋ฆฌ๋ ์ค์์ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ํ ์คํธ ํธ์ง๊ธฐ vi์ ์ฌ์ฉ๋ฒ์ ์ดํดํ๋ค.
- vi์ ๋ชจ๋ ์ ํ๊ณผ ๋ช ๋ น์ด ๊ตฌ์กฐ๋ฅผ ์ตํ๋ค.
- ํ์ผ ์์ฑ, ํธ์ง, ์ ์ฅ, ์ข ๋ฃ ๋ฑ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ํํ ์ ์๋ค.
- ์ปค์ ์ด๋, ์ญ์ , ๋ณต์ฌ, ๊ฒ์, ๋ฐ๊พธ๊ธฐ ๋ช ๋ น์ ์ฌ์ฉํ ์ ์๋ค.
๐งฉ 1. vi๋ ๋ฌด์์ธ๊ฐ (What is vi?)
- vi editor๋ ๋ฆฌ๋
์ค ๊ณ์ด์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํด๋์ ํ
์คํธ ํธ์ง๊ธฐ์ด๋ค.
(The vi editor is the most popular and classic text editor in the Linux family.) - ๋๋ถ๋ถ์ ๋ฆฌ๋
์ค ๋ฐฐํฌํ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ฉฐ, ํ๋ซํผ ๊ฐ ์ผ๊ด๋ ๋์์ ๋ณด์ธ๋ค.
(It is available in almost all Linux distributions and behaves the same across platforms.) - ์ฌ์ฉ์ ์นํ์ (User-friendly) ์ด๋ฉฐ, ๋ง์ ๋ฆฌ๋ ์ค ์ฌ์ฉ์๋ค์ด ์ ํธํ๋ค.
- vi์ ๋ฐ์ ๋ฒ์ ์ผ๋ก VIM (Vi Improved) ์ด ์๋ค.
๊ทธ ์ธ ์ ์ฌํ ํธ์ง๊ธฐ๋ก๋ Elvis, Nvi, Nano, Vile ๋ฑ์ด ์กด์ฌํ๋ค.
โ๏ธ 2. vi์ ์ธ ๊ฐ์ง ๋ชจ๋ (Modes of vi)
vi๋ ์ธ ๊ฐ์ง ๋ชจ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค:
1๏ธโฃ ๋ช
๋ น ๋ชจ๋(Command Mode)
2๏ธโฃ ์
๋ ฅ ๋ชจ๋(Insert Mode)
3๏ธโฃ ๋ง์ง๋ง ์ค ๋ชจ๋(Last Line Mode)
๐งฑ Command Mode (๋ช ๋ น ๋ชจ๋)
- vi ์คํ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ ํ๋ ๋ชจ๋.
- ์ปค์ ์ด๋, ์ค ์ญ์ , ๋ณต์ฌ, ๋ถ์ฌ๋ฃ๊ธฐ ๋ฑ์ ๋ช ๋ น ์ํ.
- ์ ๋ ฅํ ํค๋ฅผ ๋ช ๋ น์ผ๋ก ํด์ํ๋ค.
- ESC ํค๋ฅผ ๋๋ฌ ํญ์ ๋ช ๋ น ๋ชจ๋๋ก ๋์์ฌ ์ ์๋ค.
๐๏ธ ์์:
dd → ํ ์ค ์ญ์
3dd → ์ธ ์ค ์ญ์
x → ์ปค์ ์์น์ ๋ฌธ์ ์ญ์
yy → ํ ์ค ๋ณต์ฌ (yank)
p → ๋ถ์ฌ๋ฃ๊ธฐ (put)
โ๏ธ Insert Mode (์ ๋ ฅ ๋ชจ๋)
- ํ ์คํธ๋ฅผ ์ค์ ๋ก ์ ๋ ฅํ๋ ๋ชจ๋.
- ์ปค์ ์์น์์ ํค ์ ๋ ฅ์ด ๊ทธ๋๋ก ํ์ผ ๋ด์ฉ์ ๋ฐ์๋๋ค.
- ๋ช ๋ น ๋ชจ๋์์ ๋ค์ ๋ช ๋ น์ผ๋ก ์ง์ ํ๋ค:
i → ์ปค์ ์์น์์ ์
๋ ฅ ์์
I → ์ค ๋งจ ์์์ ์
๋ ฅ
a → ์ปค์ ๋ค์ ์์น์์ ์
๋ ฅ
A → ์ค ๋งจ ๋์์ ์
๋ ฅ
o → ํ์ฌ ์ค ์๋ ์ ์ค ์์ฑ ํ ์
๋ ฅ
O → ํ์ฌ ์ค ์์ ์ ์ค ์์ฑ ํ ์
๋ ฅ
- ESC๋ฅผ ๋๋ฌ ๋ค์ ๋ช ๋ น ๋ชจ๋๋ก ๋ณต๊ท.
๐ Last Line Mode (๋ง์ง๋ง ์ค ๋ชจ๋)
- ๋ช ๋ น ๋ชจ๋์์ : ์ ๋ ฅ ์ ์ง์ .
- ํ์ผ ์ ์ฅ, ์ข ๋ฃ, ๊ฒ์, ๋ฌธ์์ด ์นํ ๋ฑ ์ํ.
๐งญ ์ฃผ์ ๋ช ๋ น์ด:
:w → ํ์ผ ์ ์ฅ (write)
:q → ์ข
๋ฃ (quit)
:wq → ์ ์ฅ ํ ์ข
๋ฃ
:q! → ์ ์ฅํ์ง ์๊ณ ๊ฐ์ ์ข
๋ฃ
:s/old/new/ → ํ์ฌ ์ค์์ ๋ฌธ์์ด ๊ต์ฒด
:1,$s/old/new/g → ํ์ผ ์ ์ฒด์์ ๋ฌธ์์ด ๊ต์ฒด
:n → n๋ฒ์งธ ์ค๋ก ์ด๋
๐ง 3. vi ์คํ ๋ฐ ๊ธฐ๋ณธ ์กฐ์ (Launching and Navigating vi)
โถ๏ธ vi ์คํ
$ vi <filename>
- <filename>์ด ์์ผ๋ฉด ์ ํ์ผ ์์ฑ.
- ๊ธฐ์กด ํ์ผ๋ช ์ ์ ๋ ฅํ๋ฉด ํด๋น ํ์ผ์ ํธ์ง ๋ชจ๋๋ก ์ถ.
๐ก ์์: vi ์คํ ํ๋ฆ
1๏ธโฃ ๋ช
๋ น์ด ์
๋ ฅ → $ vi test.txt
2๏ธโฃ vi ์ง์
→ Command Mode
3๏ธโฃ i ์
๋ ฅ → Insert Mode๋ก ์ ํ
4๏ธโฃ ๋ด์ฉ ์
๋ ฅ
5๏ธโฃ ESC → ๋ช
๋ น ๋ชจ๋ ๋ณต๊ท
6๏ธโฃ :wq → ์ ์ฅ ํ ์ข
๋ฃ
๐งญ 4. ์ปค์ ์ด๋ ๋ช ๋ น (Moving Within a File)
ํค๋์์ค๋ช
| h | ← | ์ผ์ชฝ์ผ๋ก ์ด๋ |
| l | → | ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ |
| j | ↓ | ํ ์ค ์๋๋ก ์ด๋ |
| k | ↑ | ํ ์ค ์๋ก ์ด๋ |
| ^ | ์ค์ ์์์ผ๋ก ์ด๋ | |
| $ | ์ค์ ๋์ผ๋ก ์ด๋ | |
| ^u | ํ๋ฉด ์์ชฝ์ผ๋ก ์ด๋ (half page up) | |
| ^d | ํ๋ฉด ์๋์ชฝ์ผ๋ก ์ด๋ (half page down) | |
| G | ํ์ผ ๋์ผ๋ก ์ด๋ | |
| gg | ํ์ผ ์ฒ์์ผ๋ก ์ด๋ |
[์ถ๊ฐ๋ ๋ด์ฉ]
- ์ปค์ ์ด๋์ ๋ฐฉํฅํค๋ก๋ ๊ฐ๋ฅํ์ง๋ง, vi ๊ณ ์ ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋์ ํจ์จ๋ฉด์์ ๋ ๋น ๋ฅด๋ค.
- ์ฌ๋ฌ ๊ฐ์ ์ซ์ ๋ช ๋ น์ ์กฐํฉํ ์๋ ์๋ค. ์: 10j → ์๋๋ก 10์ค ์ด๋.
๐พ 5. ํ์ผ ์ ์ฅ ๋ฐ ์ข ๋ฃ (Saving and Closing the File)
๋ช
๋ น์ค๋ช
| Shift + ZZ | ์ ์ฅ ํ ์ข ๋ฃ |
| :w | ์ ์ฅ (์ข ๋ฃํ์ง ์์) |
| :q | ์ข ๋ฃ (์ ์ฅ ์ ํจ) |
| :wq | ์ ์ฅ ํ ์ข ๋ฃ |
| :q! | ์ ์ฅํ์ง ์๊ณ ๊ฐ์ ์ข ๋ฃ |
โ๏ธ 6. ํธ์ง ๋ช ๋ น (Editing Commands)
๋ช
๋ น์ค๋ช
| dd | ํ์ฌ ์ค ์ญ์ |
| 3dd | ํ์ฌ ์ค ํฌํจ 3์ค ์ญ์ |
| dw | ๋จ์ด ์ญ์ |
| cw | ๋จ์ด ์์ (์ ๋ ฅ ๋ชจ๋๋ก ์ ํ) |
| x | ์ปค์ ์์น์ ๋ฌธ์ ์ญ์ |
| r | ์ปค์ ์์น ๋ฌธ์ ๊ต์ฒด |
| yy | ํ์ฌ ์ค ๋ณต์ฌ |
| p | ๋ถ์ฌ๋ฃ๊ธฐ |
| u | ๋ง์ง๋ง ๋ช ๋ น ์ทจ์(Undo) |
| U | ํ ์ค ์ ์ฒด๋ฅผ ์ด์ ์ํ๋ก ๋ณต๊ตฌ |
[์ถ๊ฐ๋ ๋ด์ฉ]
- Undo(u) ๋ ๋จ๊ณ๋ณ๋ก ์ฌ๋ฌ ๋ฒ ์ ์ฉ ๊ฐ๋ฅ.
- Redo ๊ธฐ๋ฅ์ Vim์์ Ctrl + r ๋ก ์ฌ์ฉ ๊ฐ๋ฅ.
- . (๋ง์นจํ)๋ ์ง์ ๋ช ๋ น์ ๋ฐ๋ณต ์ํํ๋ค.
๐ 7. ๋ฌธ์์ด ๊ฒ์ ๋ฐ ์นํ (Searching and Substitution)
๋ช
๋ น๊ธฐ๋ฅ
| /string | ๋ฌธ์์ด์ ์ ๋ฐฉํฅ์ผ๋ก ๊ฒ์ |
| ?string | ๋ฌธ์์ด์ ๋ค ๋ฐฉํฅ์ผ๋ก ๊ฒ์ |
| n | ๋ค์ ๊ฒ์ ๊ฒฐ๊ณผ |
| N | ์ด์ ๊ฒ์ ๊ฒฐ๊ณผ |
| :s/old/new/ | ํ์ฌ ์ค์์ old → new ๋ก ๊ต์ฒด |
| :1,$s/old/new/g | ํ์ผ ์ ์ฒด์์ old → new ๋ก ๊ต์ฒด |
[์ถ๊ฐ๋ ๋ด์ฉ]
- /string ์ ๋ ฅ ํ Enter ๋ฅผ ๋๋ฅด๋ฉด ์ฒซ ๋ฒ์งธ ์ผ์น ํญ๋ชฉ์ผ๋ก ์ด๋.
- ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ผ๋ ค๋ฉด /string\c ์ฌ์ฉ.
- ์ ์ฒด ์นํ ์ g ์ต์ (Global)์ ๋ฐ๋์ ํฌํจํด์ผ ํ๋ค.
๐ 8. ์ค์ต ์์ (Example Workflow)
$ vi example.txt
i
Hello, Linux World!
ESC
:wq
๐ชถ ๊ฒฐ๊ณผ:
- example.txt ํ์ผ์ด ์์ฑ๋๊ณ , “Hello, Linux World!” ๋ด์ฉ์ด ์ ์ฅ๋จ.
- cat example.txt ๋ก ๋ด์ฉ ํ์ธ ๊ฐ๋ฅ.
๐ก [์ถ๊ฐ๋ ๋ด์ฉ ์ ๋ฆฌ]
- vi๋ ๋ชจ๋ ๋ฆฌ๋ ์ค ํ๊ฒฝ์์ ๊ธฐ๋ณธ ๋ด์ฅ ํธ์ง๊ธฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- GUI ์๋ ์๋ฒ ํ๊ฒฝ์์๋ ํธ์ง์ด ๊ฐ๋ฅํ๋ฏ๋ก ์์คํ ํ๋ก๊ทธ๋๋ฐ์์ ํ์์ ์ด๋ค.
- ์ค๋ฌด์์๋ vim(Vi IMproved)์ ๋ ์์ฃผ ์ฌ์ฉํ์ง๋ง, ๊ธฐ๋ณธ ๋ช ๋ น ์ฒด๊ณ๋ vi์ ๋์ผํ๋ค.
- Vim์๋ ๊ตฌ๋ฌธ ๊ฐ์กฐ(syntax highlighting), ์๋ ์์ฑ(auto-completion) ๋ฑ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ์๋ค.
๐ง ํต์ฌ ์์ฝ (Summary)
๊ตฌ๋ถ๋ช
๋ น์ด์ค๋ช
| ๋ชจ๋ ์ ํ | i, ESC, : | ์ ๋ ฅ ↔ ๋ช ๋ น ↔ ๋ง์ง๋ง ์ค ๋ชจ๋ |
| ์ ์ฅ ์ข ๋ฃ | :w, :q, :wq, :q!, ZZ | ์ ์ฅ/์ข ๋ฃ ์กฐํฉ |
| ์ปค์ ์ด๋ | h, j, k, l, ^, $ | ๊ธฐ๋ณธ ์ด๋ ๋ช ๋ น |
| ํธ์ง ๋ช ๋ น | dd, cw, x, p, u | ์ญ์ , ์์ , ๋ณต์ฌ, ์ทจ์ |
| ๊ฒ์ | /text, n, N | ๋ฌธ์์ด ๊ฒ์๊ณผ ํ์ |
| ์นํ | :s/old/new/, :1,$s/old/new/g | ๋ฌธ์์ด ๋ณ๊ฒฝ |