곰돌이 놀이터
[Linux] VI/VIM 단축키, 명령어 정리 본문

리눅스의 대표적인 에디터로 vi편집기 (또는 vim편집기)가 있으며, 명령어에 대해 정리를 하려고 한다. vim 에디터는 vi iMproved 의 약자로 기능상 약간의 차이가 있을뿐 다르지 않으며 리눅스에서는 vi를 입력하든 vim을 입력하든 둘 다 vim에디터를 실행시켜준다.
처음에는 단축키를 익혀야 하기 때문에 진입장벽이 높은 편이지만, 익숙해지기만 한다면 마우스로 하나하나 클릭하는것이 아닌 단축키만으로 모든 작업이 가능하기 때문에 더욱 더 빠르게 작업이 가능하다는 장점을 가진다.
또 텍스트 문서를 보거나 수정할 뿐만 아니라 리눅스에서 직접 코딩이 필요한 경우도 있을 수 있기 때문에 모든 단축키를 외우지는 못하더라도 어떤 단축키가 있는지 정도는 익혀야 할 것 같아서 정리를 해두려고 한다.
단축키/명령어
실행
| 명령어 | 동작 | 
| vi file | file 열기 | 
| vi file1 file2 | file1과 file2를 순서대로 열기 | 
| view file / vi -R file | file을 읽기모드로 열기 | 
| vi + file | file을 열고 커서를 본문의 마지막 줄에 위치 시킴 | 
| vi +n file | file을 열어 n번째 줄에 위치 시킴 | 
| vi -r file | 손상된 파일 회복 | 
저장 및 종료
| 명령어 | 동작 | 
| :w | 저장하기 | 
| :wq | 저장 후 종료 | 
| :q | 저장하지 않고 종료 | 
| :q! | 변경된 내용을 저장하지 않고 강제로 종료 | 
입력모드 전환
| 명령어 | 동작 | 
| i | 커서의 위치에서 입력모드로 전환 | 
| I | 커서가 위치한 줄의 맨 앞에서 입력모드로 전환 | 
| a | 커서가 위치한 다음 칸에서 입력모드로 전환 | 
| A | 커서가 위치한 줄의 맨 마지막에서 입력모드로 전환 | 
| o | 커서가 위치한 줄의 아래에 빈 줄 삽입 | 
| O | 커서가 위치한 줄의 위에 빈 줄 삽입 | 
| R | 수정모드로 전환 | 
커서이동
| 명령어 | 동작 | 
| w | 다음 단어의 끝 부분으로 커서 이동 | 
| e | 다음 단어 앞 부분으로 커서 이동 | 
| b | 이전 단어로 이동 | 
| ^, 0 | 줄의 처음으로 이동 | 
| $ | 줄의 마지막으로 이동 | 
| H | 화면 맨 위로 이동 | 
| M | 화면 중간으로 이동 | 
| L | 화면 맨 아래로 이동 | 
| G | 글의 맨 밑으로 이동 | 
| nG | n번째 줄로 이동 | 
| n% | n퍼센트에 해당하는 위치로 이동 | 
| [shift] + ↑ | 한 페이지 앞으로 이동 | 
| [shift] + ↓ | 한 페이지 뒤로 이동 | 
| [Ctrl] + i | 한 화면 위로 이동 | 
| [Ctrl] + b | 한 화면 아래로 이동 | 
| [Ctrl] + d | 반 화면 위로 이동 | 
| [Ctrl] + u | 반 화면 아래로 이동 | 
| [Ctrl] + e | 한 줄 위로 이동 | 
| [Ctrl] + y | 한 줄 아래로 이동 | 
복사 및 붙여넣기
| 명령어 | 동작 | 
| yy | 현재 커서가 위치한 줄을 버퍼로 복사 | 
| p | 버퍼에 복사되어있는 내용을 커서 뒤에 삽입 | 
| P | 버퍼에 복사되어있는 내용을 커서 앞에 삽입( shift + p ) | 
| ny | 현재 커서가 위치한 줄에서부터 아래로 n줄 복사 | 
| :n1, n2y | n1~n2번째줄을 버퍼로 복사 | 
| :npu | n행에 버퍼에 복사되어있는 내용을 삽입 | 
| d | 현재 커서가 위치해있는 단어 복사 | 
| nyy | 현재 커서에서 부터 n만큼의 행 복사 | 
삭제
| 명령어 | 동작 | 
| x | 현재 커서가 위치한 문자 삭제 | 
| dw | 단어 삭제 | 
| dd | 현재 커서가 위치한 줄 삭제 | 
| ndd | 현재 커서에서 부터 n만큼의 줄 삭제 | 
| d + ↑ | 현재 커서가 위치한 줄의 위로 2줄 삭제 | 
| d + ↓ | 현재 커서가 위치한 줄의 아래로 2줄 삭제 | 
| D | 한줄 내에서 커서의 위치 뒤로 모두 삭제 | 
| u | 바로 전에 수행한 명령 취소 | 
문자열 찾기
| 명령어 | 동작 | 
| /name | name 문자열 찾기 | 
| n | 다음 name으로 이동( 아래로 검색 ) | 
| N | 이전 name으로 이동( 역방향, 위로 검색 ) | 
문자열 대체
| 명령어 | 동작 | 
| :s/str/rep | 현재 줄의 str을 rep로 대체 | 
| :l,.s/str/rep/ | 1부터 현재 줄의 str을 rep로 대체 | 
| :%s/str/rep/g | 파일 전체 str을 rep로 전부 대체 | 
| :.$/aaa/bbb | 커서의 위치로부터 파일의 끝까지 있는 모든 aaa를 bbb로 대체 | 
기타
| 명령어 | 동작 | 
| :set nu | 줄 번호 보여주기 | 
| :set nonu | 줄 번호 보여주기 취소 | 
| . | 바로 전에 실행한 명령어 재 실행 | 
| [ctrl] + l | 불필요한 화면 정리후 다시 표시 | 
			  Comments