๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
6. CS ๊ธฐ์ดˆ ๐Ÿ“š/Linux & Unix ๐Ÿง

[Linux/Unix] vi Editor

by lxvxxu 2025. 10. 20.

 

๐Ÿงฎ 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 ๋ฌธ์ž์—ด ๋ณ€๊ฒฝ