vi란?
vi는 문서 편집기입니다.
windows 운영체제에서는 기본적인 문서 편집기로 '메모장'을 지원하는데요. linux 운영체제에서 기본적으로 지원하는 문서 편집기가 바로 'vi'입니다.
vi와 vim은 무엇이 다를까요?
vim(vi improved)는 단어 뜻 그대로 기존의 vi(visual editor)에서 기능을 향살 시킨 에디터이며, vi가 텍스트 편집에 필요한 최소한의 기능만을 가지고 있어 사용에 불편한 점이 있기 때문에 그 부분을 보완하기 위해 나온 것이 바로 vim입니다.
그러면 vi가 아니라 vim을 사용해야 하는 것 아닌가요?
리눅스에는 vim editor가 설치되어 있습니다. 때문에 vi를 사용해도 vim이 실행되고, vim을 사용해도 vim이 실행되는 것입니다.
(vim 안에는 vi의 기능이 모두 포함되어 있기 때문에 vi를 따로 익힐 필요는 없습니다.)
vi의 기본 동작법
vi 편집기는 크게 '명령 모드', '편집 모드', '마지막 행 모드' 3가지 모드로 구성되어 있는데요.
리눅스에서 파일을 편집하기 위해서는 이 세 가지 모드를 모두 사용하게 됩니다.
- 명령 모드
명령 모드는 vi를 실행시켰을 때 가장 먼저 수행되는 모드인데요.
[ i, a, o, I, A, O] 등의 키 입력을 통해 편집 모드로 전환할 수 있으며, [ : ] 키를 통해 마지막 행 모드를 실행할 수 있습니다.
편집 모드, 마지막 행 모드 전환 외에도 커서의 이동 및 복사 붙여 넣기, 화면 이동 등을 수행할 수 있습니다.
[ esc ] 키를 통해 다시 명령 모드로 전환할 수 있습니다.
- 편집 모드
입력 모드, 편집 모드, input mode, insert mode 등으로 불리며, 글자를 입력하는 문서를 만드는 모드입니다.
명령 모드에서 입력 전환 키를 통해 편집 모드로 진입하면 화면 하단에 '-- INSERT --'가 표시됩니다.
- 마지막 행 모드
명령 모드에서 [ : ] 키를 입력했을 때 화면 맨 아랫줄에서 : 명령어를 수행하는 모드로 저장, 종료, 탐색, 치환, 환경설정 등의 역할을 수행할 수 있습니다.
자주 사용되는 vi 명령어
- vi 열기 명령어
명령어 | 설명 | 예시 |
vi {파일명} | 파일 열기 및 생성 | vi test.txt |
해당 파일명에 해당하는 파일이 존재한다면 열기가 실행되고, 파일이 존재하지 않는다면 생성이 실행됩니다.
(파일이 생성되는 경우, 편집 후 저장되어야 최종적으로 파일이 남습니다.)
- vi 입력 모드로 전환하기 [명령 모드]
명령어 | 설명 |
i | 현재 커서 앞에 입력 |
a | 현재 커서 뒤에 입력 |
o | 커서가 위치한 행의 다음 행에 입력 |
O | 커서가 위치한 행의 이전 행에 입력 |
I (대문자 i) | 커서가 위치한 행의 맨 처음으로 이동하여 입력 |
A | 커서가 위치한 행의 맨 뒤로 이동하여 입력 |
파일 편집을 위해 파일을 연 뒤 꼭 사용되는 명령어로 개인적으로는 실무에서 vi로 파일을 열어 i 명령어로 편집 모드로 실행한 뒤 파일을 수정한 경우가 많습니다.
- vi 파일 저장 및 종료 명령어 [마지막 행 모드]
명령어 | 설명 |
:q | 나가기 |
:q! | 저장하지 않고 나가기 |
:w | 저장 |
:wq | 저장 후 종료 |
:wq! | 강제 저장 후 vi 종료 |
:w {파일명} | 파일명을 지정하면 새 파일로 저장 |
파일을 편집했다면 이제 해당 파일에서 빠져나가야 하는데요. 그때 사용되는 명령어들입니다.
해당 명령어들은 경우에 따라 골고루 다 사용되는 것 같습니다.
- vi 작업 종료 [명령 모드]
명령어 | 설명 |
ZZ (대문자) | 작업 내용을 저장하고 vi를 종료 |
/*
vi를 비정상 종료하게 되면 swp 파일이 남게 되는데, 경고 창에서 y를 누르고 넘어가거나 ls-a 명령어로 숨김 파일을 확인하여 swp 파일을 확인하고 삭제하면 됩니다.
*/
- 명령 취소 [명령 모드]
명령어 | 설명 |
u | 명령을 취소 |
- 명령 취소 [마지막 행 모드]
명령어 | 설명 |
:e! | 마지막으로 저장한 내용 이후의 것을 모두 취소 |
(윈도우에서의 Ctrl + z와 비슷한 기능으로 vi에서도 명령을 취소하는 다음과 같은 기능이 있습니다.)
- vi 커서 이동하기 [명령 모드]
명령어 | 설명 |
k | 커서를 위로 이동 |
j | 커서를 아래로 이동 |
h | 커서를 왼쪽으로 이동 |
i | 커서를 오른쪽으로 이동 |
^ (Shift + 6) | 커서를 현재 행의 맨 처음으로 이동 (= home 키) |
$ (Shift + 4) | 커서를 현재 행의 맨 마지막으로 이동 (= end 키) |
- vi 커서 이동하기 [마지막 행 모드]
명령어 | 설명 | 예시 |
: {행번호} | 지정한 행 번호로 커서를 이동 | : 123 |
- vi 화면 이동하기 [명령 모드]
명령어 | 설명 |
Ctrl + u | 화면의 절반만큼 위로 이동 |
Ctrl + o | 화면의 절반만큼 아래로 이동 |
Ctrl + b (= Page Up) | 화면을 한 페이지 위로 이동 |
Ctrl + f (= Page Down) | 화면을 한 페이지 아래로 이동 |
Ctrl + y | 화면을 한 행 위로 이동 |
Ctrl + e | 화면을 한 행 아래로 이동 |
- vi 문자 찾기 [명령 모드]
명령어 | 설명 | 예시 |
/{찾고 싶은 문자} | 아래 방향으로 대상 문자열을 찾는다. | /key |
?{찾고 싶은 문자} | 윗 방향으로 대상 문자열을 찾는다. | ?key |
n | 다음의 문자 | |
N | 이전의 문자 |
- vi 내용 치환하기 [마지막 행 모드]
명령어 | 설명 | 예시 |
:s/{대상 문자열}/{바꿀 문자열} | 현재 행에서 대상 문자열을 치환 | :s/aaa/ccc |
:%s/{대상 문자열}/{바꿀 문자열} | 전체 행에서 대상 문자열을 치환 | :%s/aaa/ccc |
- 복사 붙여 넣기 [명령 모드]
명령어 | 설명 |
yy | 현재 커서가 위치한 줄 복사 |
p | 붙여넣기 (현재 커서가 있는 행 위로 삽입) |
P (대문자) | 붙여넣기 (현재 커서가 있는 행 아래로 삽입) |
< 참고 자료 >
'Programming > Linux' 카테고리의 다른 글
리눅스 서버 시간 확인 및 설정 방법 (linux timedatectl 명령어) (0) | 2023.03.30 |
---|---|
linux sftp log 설정 방법 (접속 및 작업 로그) (0) | 2023.02.16 |
좀비 프로세스 원인과 죽이는 방법(Zombie Process) (0) | 2022.09.14 |
데몬(daemon) 프로세스의 정의와 실행 방법 (0) | 2022.07.27 |
Linux 리눅스 파일 권한에 대한 이해와 권한 변경(chmod) (0) | 2021.12.09 |