Vim 이란?
vi(visual editor)는 유닉스, 리눅스에서 가장 많이 사용하는 에디터이며, vim(vi improved)은 vi에 추가 확장기능을 부여한 에디터이다.
설치 및 실행
리눅스에는 vim 에디터가 설치되어 있다. 만약 설치되어 있지 않다면, 다음 명령어를 사용한다.
$ apt insall vim
vim을 실행하려면 다음 명령어를 사용한다.
$ vim example.txt
이때 해당 파일을 열거나 파일이 없다면 만들어서 연다.
vi 모드
vi에서는 명령 모드, 입력 모드, 마지막 행 모드(ex 명령 모드) 3가지 모드가 존재하낟.

명령 모드
- vi를 실행하면 접하는 기본이 되는 모드로 커서의 이동, 수정, 삭제, 복사, 붙여넣기, 탐색 등 작업을 수행한다.
- 입력 모드 전환키인 i, a, o, I, A, O 등을 입력하면 입력 모드로 전환
- Esc 키를 누르면 다시 명령 모드로 전환
입력 모드
- 텍스트를 입력하여 문서를 작성할 수 있는 모드
- 입력 모드로 전환 시 화면 아래에 '--INSERT--' 라고 표시된다.
마지막행 모드 (ex 명령 모드)
- 명령 모드에서 ':' 키를 입력했을 때 화면 맨 아랫 줄에서 명령을 수행하는 모드
- 저장, 종료, 탐색, 치환 및 vi 환경 설정 등의 역할 수행
Vim 명령어

vi 열기 명령어
vi {파일명} : 파일 열기, 만일 존재하는 파일이면 수정, 존재하지 않는 파일이면 생성
$ vi example.txt
- vi {행번호} {파일명} : 파일을 열고, 입력한 행으로 커서 이동
$ vi -10 example.txt
- vi /"{검색 문자열}" {파일명} : 검색 문자열의 처음 발생 단어부터 열기 이동
$ vi -/"test" example.txt
- vi -r {파일명} : 손상된 파일 회복
- view {파일명} : 읽기 전용으로 파일 열기
커서 이동
- h (←) : 왼쪽으로 커서 이동
- j (↓) : 아래로 커서 이동
- k (↑) : 위로 커서 이동
- l (→) : 오른쪽으로 커서 이동
- w : 오른쪽 한 단어의 끝 부분으로 커서 이동
- e : 오른쪽 한 단어의 앞 부분으로 커서 이동
- b : 왼쪽 한 단어의 앞 부분으로 커서 이동
- W : 오른쪽 한 단어의 끝 부분으로 커서 이동
- Enter / + : 한 행 아래로 커서 이동
- Back space : 한 문자 왼쪽으로 커서 이동
- Space Bar : 한 문자 오른쪽으로 커서 이동
- ^ / 0 : 행의 맨 왼쪽으로 커서 이동
- $ : 행의 맨 오른쪽으로 커서 이동
- H : 화면의 맨 위로 이동
- M : 화면의 중간으로 이동
- L : 화면의 맨 아래로 이동
화면 이동
- Ctrl + u : 화면의 절반 만큼 위로 이동
- Ctrl + d : 화면의 절반 만큼 아래로 이동
- Ctrl + b / Page Up : 한 화면 위로 이동
- Ctrl + f / Page Down : 한 화면 아래로 이동
- Ctrl + y : 화면을 한 행 위로 이동
- Ctrl + e : 화면을 한 행 아래로 이동
입력 모드로 전환
- i : 현재 커서 앞에서 입력
- a : 현재 커서 뒤에서 입력
- o : 현재 커서 아래 행에 개행하고 입력
- I : 현재 커서 행의 처음에서 입력
- A : 현재 커서 행의 끝에서 입력
- O : 현재 커서 위 행에 개행하고 입력
라인 이동
- gg : 파일의 맨 처음 행으로 가기
- G : 파일의 맨 마지막 행으로 가기
- {#}G : 파일의 #번째 행으로 가기
내용 변경
- cw : 단어 변경
- cc : 행 변경
- C : 커서 오른쪽의 행 변경
- s : 커서가 위치한 문자열 대체
- S : 커서가 위치한 라인의 문자열 대체
- r : 커서 위치 문자를 다른 문자로 대체
내용 삭제
- nx : 커서가 있는 위치부터 n개의 문자를 삭제
- dw : 현재 커서에 있는 한 단어 삭제
- dd : 커서가 있는 라인(행) 삭제
- ndd : 커서가 있는 라인부터 n개의 라인 삭제
- :{a},{b}d a~b번째 행 삭제
되돌리기
- u : 이전 명령 취소 (되돌리기)
- U : 행 변경 사항 취소, 이전의 최종 행 취소
- . : 이전 최종 명령 반복
검색
- /{검색할 문자열} : 오른쪽 아래 방향으로 문자열 검색
- ?{검색할 문자열} : 왼쪽 위 방향으로 문자열 검색
- n : 문자열의 다음으로 계속 검색
- N : 문자열의 이전으로 계속 검색
내용 바꾸기
- :s/{대상문자열}/{바꿀문자열} : 커서가 위치한 행에서 첫번째로 나오는 대상문자열을 바꿀문자열로 치환
- :%s{대상문자열}/{바꿀문자열} : 파일 전체에서 모든 대상문자열을 바꿀문자열로 치환
- :{범위}s{대상문자열}/{바꿀문자열} : 범위 내 모든 각 행에서 첫번쨰로 나오는 대상문자열을 바꿀문자열로 치환
- :{범위}s{대상문자열}/{바꿀문자열}g : 범위 내 모든 행에서 대상문자열을 바꿀문자열로 치환
- :{범위}s{대상문자열}/{바꿀문자열}gc : 범위 내 모든 행에서 대상문자열을 바꿀문자열로 바꾸되 수정할 지 여부를 묻는다
:5, 10s/old/new/g
저장 및 종료
- :w : 변경사항 저장
- :w {파일명} : 변경사항 입력한 파일명으로 저장
- :wq : 변경사항 보관 후 vi 종료.
- :q! : 변경 내용을 저장하지 않고 종료
- :q : 작업한게 없으면 그대로 종료
- :e! : 마지막으로 저장했던 내용 이후의 수정한 것들을 취소하고 다시 편집상태로
Reference
https://inpa.tistory.com/entry/LINUX-%F0%9F%93%9A-Vi-Vim-%EC%97%90%EB%94%94%ED%84%B0-%EB%8B%A4%EB%A3%A8%EA%B8%B0-%EB%AA%85%EB%A0%B9%EC%96%B4-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC
https://winterbloooom.github.io/computer%20science/linux/2022/02/23/vim.html