23.10.26 최초 작성
리눅스 환경에서 주로 사용하는 문서 편집기로는 크게 행 단위 편집기
, 화면 단위 편집기
로 나눌 수 있다. 이 중 vi
의 기능과 특징에 대해 알아보도록 한다.
화면 단위 편집기 | 특징 |
---|
vi | 리눅스에서 일반적으로 사용하는 편집기 |
emacs | 제공하는 기능이 다양하지만 사용법이 복잡하다 |
행 단위 편집기 | 특징 |
---|
ed | 유닉스 초기의 행 편집기 |
ex | 주로 vi와 조합해 vi에 기능을 더 편리하게 하는 역할 |
sed | 지시된 명령에 따라 파일의 내용을 일괄적으로 바꿔 출력 |
1. vi 환경 설정
1.1 환경 설정 명령
환경 설정 명령 | 기능 |
---|
:set nu | 파일에 각 행 번호를 표시 (실제 값 X) |
:set nonu | 행 번호를 감춤 |
:set list | 눈에 보이지 않는 특수문자 표시 |
:set nolist | 특수문자 감춤 |
:set showmode | 현재 모드 표시 |
:set noshowmode | 현재 모드 감춤 |
:set | set으로 설정한 모든 vi 환경 설정 값 출력 |
:set all | 모든 vi 환경 변수와 현재 값 출력 |
1.2 .exrc 파일에 설정
-
사용자 홈 디렉토리에 .exrc 파일로 저장
-
기본적으로 없는 파일이므로 직접 작성해야 함
-
파일에는 set 명령과 옵션 지정
-
vi 실행시 마다 적용됨
set nu
set list
1.3 EXINIT 환경변수에 설정
EXINIT = 'set nu list'
export EXINIT
au FileType * setl fo-=cro
syntax on / off
set number / nonumber
set wrap / nowrap
set hlsearch
set ignorecase
set ts = 4
au BufReadPost * if line("'\'")|execute("normal '\"")|endif
- 자동 주석
- c문법에 맞는 파일인지 검사
- 행 번호 표시(=nu)
- 행이 길어질 경우 아래 행에 표시되는 것처럼 보임
- 검색 시 결과를 색깔로 표시
- 대소문자 구분 없이 검색
- 탭 크기를 4로 지정
- 파일을 열 때 원래 작성하던 위치로 자동으로 이동
2. vi 사용법

명령 모드
: 파일의 내용을 수정, 복사, 붙여넣기 등의 작업을 수행하는 모드
입력 모드
: 파일의 내용을 입력하는 모드
마지막 행 모드
: 문서 작성을 마무리하고 검색, 저장 등의 작업을 하는 모드
vi [filename] ///filename을 이름으로 가진 파일을 생성하고 편집을 시작한다.
2.1 마지막 행 모드
입력 | 기능 |
---|
:q | vi에서 작업한 것이 없을 때 종료 |
:q! | 작업한 내용을 저장하지 않고 종료 |
:w[파일명] | 작업한 내용을 저장 |
:wq, :wq! | 작업한 내용을 저장하고 종료 |
범위 지정 | 기능 |
---|
1.$, 1.% | 1행부터 마지막 행까지 지정 |
1.. | 1행부터 커서가 있는 행까지 지정 |
..$ | 커서가 있는 행부터 마지막 행까지 지정 |
.-3 | 현재 행과 이전 세 행까지 지정 |
10.20 | 10행부터 20행 지정 |
복사, 잘라내기 | 기능 |
---|
:(번호)y | 지정한 행 복사 (1y) |
:(번호.번호)y | 범위로 지정한 행 복사 (2.4y) |
:(번호)d | 지정한 행 잘라내기 (3d) |
:(번호.번호)d | 지정한 행 잘라내기 (1.4d) |
:pu | 현재 행 다음에 버퍼의 내용 붙이기 |
:(번호)pu | 지정핸 행 다음에 버퍼의 내용 붙이기 (4pu) |
검색 (/이나 ?으로 진입) | 기능 |
---|
/(문자열) | 문자열을 아래 방향으로 검색 |
?(문자열) | 문자열을 위 방향으로 검색 |
n | 원래 찾던 방향으로 다음 문자열 검색 |
N | 반대 방향으로 다음 문자열 검색 |
바꾸기 | 기능 |
---|
:s/(문자열1)/(문자열2)/ | 커서가 위치한 행에서 처음 나오는 문자열1을 문자열2로 바꿈 |
:%s/(문자열1)/(문자열2)/g | 파일 전체에서 모든 문자열1을 문자열 2로 바꿈 |
:(번호.번호)s/(문자열1)/(문자열2)/ | 범위 내 모든 각 행에서 첫번째로 나오는 문자열1을 문자열2로 바꿈 |
:(번호.번호)s/(문자열1)/(문자열2)/g | 범위 내 모든 행에서 문자열1을 문자열2로 바꿈 |
:(번호.번호)s/(문자열1)/(문자열2)/gc | 범위 내 모든 행에서 문자열1을 문자열2로 바꿀 때 수정할지 물어봄 |
파일 읽어오기, 여러 파일 편집하기 | 기능 |
---|
:r (파일) | 지정한 파일을 읽어들여 현재 파일에 삽입 |
:e (파일) | 지정한 파일로 전환 (기존 파일 저장해야 함) |
:n | vi 시작 시 여러 파일을 지정했을 경우 다음 파일로 이동 |
쉘 명령어 사용 | 기능 |
---|
:! 쉘 명령 | vi 작업을 잠시 중단하고 쉘 명령 실행 (Enter시 vi 복귀) |
:sh | vi를 잠시 중단하고 쉘 명령 실행 (exit 입력시 복귀) |
2.2 명령 모드
입력 관련 | 기능 |
---|
ZZ | 작업한 내용을 저장하고 종료 |
i | 커서 앞에서부터 입력 시작 |
a | 커서 뒤어서부터 입력 시작 |
o | 커서가 위차한 행의 다음 행에 입력 |
I | 커서가 위치한 행의 첫 요소로 이동해 입력 |
A | 커서가 위치한 행의 마지막 요소로 이동해 입력 |
O | 커서가 위치한 행의 이전 행에 입력 |
커서 이동 | 기능 |
---|
k, 윗 방향키 | 커서 위로 이동 |
j, 아래 방향키 | 커서 아래 이동 |
l, 오른쪽 방향키 | 커서 오른쪽 이동 |
h, 왼쪽 방향키 | 커서 왼쪽 이동 |
^, O, Home | 커서를 현재 행의 처음으로 이동 |
$, End | 커서를 현재 행의 마지막으로 이동 |
- | 앞 행의 처음으로 이동 |
+, Enter | 다음 행의 처음으로 이동 |
H | 화면의 맨 윗행으로 이동 |
M | 화면의 중간 행으로 이동 |
L | 화면의 아랫행으로 이동 |
w | 다음 단어의 첫 글자로 이동 |
b | 앞 단어의 첫 글자로 이동 |
e | 다음 단어의 마지막 글자로 이동 |
화면 이동 | 기능 |
---|
ctrl + u | 반 화면 위로 이동 |
ctrl + d | 반 화면 아래로 이동 |
ctrl + b | 한 화면 위로 이동 |
ctrl + f | 한 화면 아래로 이동 |
ctrl + y | 한 행 화면 위로 이동 |
ctrl + e | 한 행 화면 아래로 이동 |
특정 행으로 이동 | 기능 |
---|
gg | 파일의 첫 행으로 커서 이동 |
G | 파일의 마지막 행으로 커서 이동 |
(번호)G | 지정한 행으로 커서 이동 |
:(번호) | 지정한 행으로 커서 이동 (마지막 행 모드) |
:$ | 파일의 마지막 행으로 커서 이동 (마지막 행 모드) |
내용 수정 | 기능 |
---|
r | 커서가 위치한 글자를 다른 글자로 수정 (Esc 입력 필요 없음) |
cw, #cw | 커서 위치부터 현재 단어의 끝까지 수정 (#에는 수정할 단어의 수) |
s, #s | 커서 위치부터 Esc 입력할 때 까지 수정 |
cc | 커서가 위치한 행의 내용 모두 수정 |
C | 커서 위치부터 행의 끝까지 수정 |
내용 삭제 | 기능 |
---|
x, #x | 커서 위치의 글자 삭제 (#에는 삭제할 글자의 수) |
dw, #dw | 커서 위치의 단어 삭제 (#에는 삭제할 단어의 수) |
dd, #dd | 커서 위치의 행 삭제 (#에는 삭제할 행의 수) |
D | 커서 위치부터 행 끝까지 삭제 |
복사 / 자르기 | 기능 |
---|
yy, #yy | 커서가 위치한 행을 복사 (#에는 복사할 행의 수) |
p | 커서가 위치한 행의 아래쪽에 붙임 |
P | 커서가 위치한 행의 위쪽에 붙임 |
dd, #dd | 커서가 위치한 행을 잘라둠 (#에는 자를 행의 수) |
버퍼 사용하기
-
언네임드 버퍼
-
네임드 버퍼
-
각각 다른 이름을 붙인 버퍼에 독립적으로 내용을 저장하고 사용
-
이름을 붙일 때 "(문자)
, "(숫자)
의 형태로 사용 ("a, "1)
-
네임드 버퍼에 커서가 위치한 행을 저장하려면 (버퍼 이름)yy
를 입력 ("ayy)
-
버퍼의 내용을 입력하려면 "(버퍼 이름)p
를 입력 ("ap)
기타 명령 | 기능 |
---|
ctrl l | 현재 화면 다시 출력 |
ctrl g | 현재 커서 위치의 행 번호 마지막 행에 출력 |
shift j | 현재 행과 아랫행을 연결해 한 행으로 만듬 |
. | 바로 직전에 했던 명령 반복 |
2.3 입력 모드