DaleSchool

터미널 텍스트 편집기

입문25분

학습 목표

  • nano로 파일을 열고 편집하고 저장할 수 있다
  • vim의 모드 시스템을 이해하고 기본 편집을 할 수 있다
  • vim Normal 모드의 핵심 명령어를 사용할 수 있다
  • 서버 환경에서 터미널 편집기가 필요한 이유를 설명할 수 있다

동작하는 코드

예제 1: nano로 파일 편집하기

nano는 가장 직관적인 터미널 편집기입니다. 단축키가 화면 아래에 항상 표시됩니다.

nano hello.txt

파일이 열립니다. 텍스트를 바로 입력할 수 있습니다:

안녕하세요, 터미널 편집기!
두 번째 줄입니다.

저장하고 종료:

  • Ctrl+O → Enter — 저장 (Write Out)
  • Ctrl+X — 종료

화면 아래의 ^는 Ctrl을 의미합니다.

예제 2: nano에서 유용한 단축키

nano를 열어 편집하면서 다음 단축키를 연습해보세요:

| 단축키 | 동작 | | -------- | ---------------------- | | Ctrl+O | 저장 | | Ctrl+X | 종료 | | Ctrl+K | 현재 줄 잘라내기(삭제) | | Ctrl+U | 붙여넣기 | | Ctrl+W | 검색 | | Ctrl+G | 도움말 | | Ctrl+/ | 특정 줄로 이동 |

예제 3: vim 시작하기 — 탈출법부터

vim을 처음 열면 당황하기 쉽습니다. 가장 먼저 배울 것은 나가는 법입니다:

vim test.txt

vim이 열립니다. 이 상태는 Normal 모드입니다.

종료하는 방법:

  • :q + Enter — 변경사항 없을 때 종료
  • :q! + Enter — 저장 없이 강제 종료
  • :wq + Enter — 저장하고 종료

어떤 상태든 Esc를 여러 번 누르면 Normal 모드로 돌아옵니다.

직접 수정하기

vim 모드 시스템

vim의 핵심은 모드입니다. 다른 편집기와 가장 다른 점입니다.

Normal 모드 → i(insert) → Insert 모드
Insert 모드 → Esc       → Normal 모드
Normal 모드 → v         → Visual 모드
Visual 모드 → Esc       → Normal 모드
Normal 모드 → :         → Command 모드

vim을 열면 항상 Normal 모드에서 시작합니다.

기본 편집 흐름:

vim myfile.txt
  1. i — Insert 모드 진입 (화면 아래 -- INSERT -- 표시)
  2. 텍스트 입력
  3. Esc — Normal 모드로 복귀
  4. :wq + Enter — 저장하고 종료

Normal 모드 핵심 명령어

Normal 모드에서는 타이핑이 명령어입니다. 모든 커서 이동과 편집을 키보드로 처리합니다.

이동

| 키 | 동작 | | ----- | ------------------ | | h | ← 왼쪽 | | l | → 오른쪽 | | j | ↓ 아래 | | k | ↑ 위 | | w | 다음 단어 시작으로 | | b | 이전 단어 시작으로 | | 0 | 줄 처음으로 | | $ | 줄 끝으로 | | gg | 파일 처음으로 | | G | 파일 끝으로 | | :10 | 10번째 줄로 |

편집

| 키 | 동작 | | -------- | -------------------------------- | | i | 커서 앞에서 Insert 모드 | | a | 커서 뒤에서 Insert 모드 (append) | | o | 다음 줄에 새 줄 + Insert 모드 | | O | 이전 줄에 새 줄 + Insert 모드 | | dd | 현재 줄 삭제 (잘라내기) | | yy | 현재 줄 복사 (yank) | | p | 붙여넣기 (paste) | | u | 실행 취소 (undo) | | Ctrl+R | 재실행 (redo) | | x | 커서 위 문자 삭제 |

검색과 치환

| 키/명령 | 동작 | | ----------------- | -------------- | | /단어 | 앞으로 검색 | | ?단어 | 뒤로 검색 | | n | 다음 검색 결과 | | N | 이전 검색 결과 | | :%s/원본/교체/g | 전체 치환 |

Visual 모드: 블록 선택

v       → 문자 단위 선택
V       → 줄 단위 선택
Ctrl+V  → 직사각형 블록 선택

선택 후:

  • d — 삭제
  • y — 복사
  • > — 들여쓰기
  • < — 내어쓰기

실전 시나리오: git commit 메시지 편집

git commit을 -m 없이 실행하면 vim이 열립니다:

git config --global core.editor vim  # vim을 기본 편집기로 설정

git commit  # vim이 열림

vim에서 커밋 메시지 작성:

  1. i — Insert 모드
  2. 메시지 입력 (feat: 새 기능 추가)
  3. Esc — Normal 모드
  4. :wq — 저장하고 종료

vim이 불편하면 nano로 바꿀 수 있습니다:

git config --global core.editor nano

"왜?" — 터미널 편집기가 필요한 이유

서버에는 VS Code, Cursor 같은 GUI 편집기가 없습니다. SSH로 서버에 접속해서 설정 파일을 수정하거나, 빠르게 파일을 편집할 때 터미널 편집기가 필수입니다.

편집기 선택 가이드

| 상황 | 추천 편집기 | | ----------------- | -------------------------- | | 빠르게 파일 수정 | nano (쉽고 직관적) | | 서버 작업이 많음 | vim (어디서나 사용 가능) | | 강력한 기능 원함 | neovim (vim의 현대적 버전) | | 이미 VS Code 사용 | code 파일명 (로컬에서) |

vim을 배울 가치가 있는 이유:

  1. 거의 모든 리눅스/Mac 서버에 기본 설치
  2. 손이 키보드를 떠나지 않아 빠름
  3. 마우스 없이 모든 편집 가능
  4. 커스터마이징이 뛰어남

흔한 실수

실수 1: vim에서 텍스트가 입력되지 않음

vim을 열면 Normal 모드입니다. 타이핑하면 명령어로 해석됩니다.

# vim을 열었을 때 "hello" 입력하면
# h → 왼쪽 이동
# e → 단어 끝으로 이동
# l → 오른쪽 이동
# l → 오른쪽 이동
# o → 새 줄 + Insert 모드

반드시 i를 눌러 Insert 모드로 전환한 후 텍스트를 입력하세요.

실수 2: Esc를 누르지 않고 저장 시도

# Insert 모드에서 :wq 입력하면
# ← ":wq"가 텍스트로 입력됨

# 올바른 순서
Esc → :wq → Enter

실수 3: 여러 파일을 열어 혼란

# 실수로 vim을 여러 번 열었을 때
# :q로 현재 파일 종료 후 다음으로
vim file1.txt file2.txt

:n  # 다음 파일
:N  # 이전 파일

심화 학습

vim 설정 파일 (~/.vimrc)

vim의 기본 동작을 커스터마이징할 수 있습니다:

" ~/.vimrc
set number          " 줄 번호 표시
set tabstop=2       " 탭을 2칸으로
set expandtab       " 탭을 스페이스로
set autoindent      " 자동 들여쓰기
set hlsearch        " 검색 결과 하이라이트
set incsearch       " 실시간 검색
syntax on           " 문법 강조

파일이 없으면 만들면 됩니다: vim ~/.vimrc

neovim: 현대적인 vim

neovim은 vim의 현대적 버전으로, 더 나은 기본값과 플러그인 생태계를 갖고 있습니다:

brew install neovim
nvim 파일명

사용법은 vim과 동일합니다. 개발자들 사이에서 점점 더 인기를 얻고 있습니다.

VS Code를 터미널 편집기로 사용하기

로컬 개발 환경에서는 VS Code를 터미널 편집기로 설정할 수 있습니다:

git config --global core.editor "code --wait"

git commit 시 VS Code가 열리고, 닫으면 커밋이 완료됩니다.

주의: 이 방법은 서버(SSH)에서는 사용할 수 없습니다.

  1. nano practice.txt로 새 파일을 열어 3줄을 입력하고, Ctrl+O로 저장하고 Ctrl+X로 종료하세요.
  2. cat practice.txt로 내용을 확인하세요.
  3. vim practice.txt로 파일을 열어 G로 끝으로 이동하고, o로 새 줄을 추가하고, Esc:wq로 저장하세요.
  4. vim에서 dd로 줄을 삭제하고, u로 실행 취소해보세요.
  5. /찾는단어로 검색하고 n으로 다음 결과로 이동해보세요.

Q1. vim에서 저장하지 않고 강제 종료하는 명령어는?

  • A) :exit
  • B) :q
  • C) :q!
  • D) :quit!