리눅스 vi 명령어 모음
리눅스 명령어 모음 vi
리눅스에서는 gedit라는 메모장 비슷한 에디터를 제공해주고 있지만 유닉스와 리눅스 시스템에 기본적으로 포함되어 있는 vi는 반드시 다룰 줄 알아야 한다기에 간단한 vi 기본 사용법부터 알아보고 명령어를 정리해보려고 한다.
1. vi 실행
vi를 실행하기 위해서는 터미널을 열고 다음과 같이 vi 명령어를 실행하면 된다.
윈도우나 메모장에 익숙해져 있는 나 같은 사람들이 적응하는데 시간이 좀 걸리겠지만 리눅스를 다루기 위해서는 이 녀석도 반드시 익혀둘 필요가 있다고 한다.
▲ 이처럼 vi의 정확한 명칭은 vim이며.... 실행을 하니 간단한 명령어 몇 개가 보인다. 먼저 이 녀석을 종료하는 명령어부터 살펴볼 텐데 [esc] > [:q]이다. 프로그램이 실행된 상태에서 esc를 누른 후 :q를 입력하고 엔터키를 누르면 종료가 된다. vi를 실행하고 아무 작업도 하지 않은 상태에서는 esc를 누르지 않고 바로 :q를 입력해도 되지만 편집을 하다가 :q를 입력하기 위해서는 반드시 esc를 눌러야 한다.
2. vi로 파일 만들고 내용 입력하기
vi를 실행하면서 새로운 파일을 바로 만들 수 있는데 vi 뒤에 파일 이름을 입력하면 된다.
▲ test.txt라는 파일을 만들고 vi를 실행했다.
▲ 이렇게 test.txt [새 파일]이 만들어지는데 여기에 내용을 입력하기 위해서는 i 또는 a를 누르면 된다.
▲ i를 누르자 [끼워넣기] 상태가 된다. 이제 여기에 내가 원하는 내용을 입력할 수 있는데 간단하게 몇 줄을 입력해본다.
▲ 입력한 내용을 저장하기 위해서는 역시 [ESC]를 먼저 누르고 :wq를 입력하면 된다. w는 Write를 의미하고 q는 Quit를 의미하기 때문에 저장하고 종료하라는 의미가 된다.
만약 새로 작성하거나 변경한 내용을 저장하지 않고 종료를 하려면 :q!를 입력하면 된다.
3. vi 비정상 종료 때 나타나는 문제 해결
다음은 나 같은 초보들이 많이 겪는 문제 중의 하나인데 vi를 사용하다가 :q, :wq, :q! 등 정상적인 종료를 하지 않고 vi 창의 위쪽에 있는 닫기[x] 버튼을 눌러서 종료했을 때 발생하는 문제에 대해서 알아보고 그 해결 방법을 살펴보고자 한다.
앞에서 작성한 파일을 다시 열어서 내용을 적당히 편집하다가 정상 종료가 아닌 닫기[x]를 눌러서 종료를 해보자. (기존의 파일을 열 때도 역시 'vi 파일 이름'을 입력하면 되는데 나의 경우 vi test.txt를 입력해서 열었으며 내용을 다음과 같이 살짝 변경을 해봤다.)
▲ :q, :wq, q!를 통하지 않고 닫아버리면 어떤 문제가 발생할까? 변경된 내용이 저장이 될까? [x]를 눌러서 닫았다가 다시 이 파일을 열어본다.
▲ 이처럼 스왑 파일이 존재하기 때문에 정상적으로 파일이 열리지 않는다는 메시지가 어지럽게 출력이 된다. 이 스왑파일이 존재한다는 건 기존의 작업이 정상적으로 종료되지 않았다는 의미인데 이 파일을 제거해줘야 정상적으로 파일을 편집할 수가 있다.
먼저 실제로 스왑파일이 존재하는지 확인해보자.
▲ vi의 비정상 종료로 인해서 생성된 스와파일은 숨김 파일(이름앞에 . 찍힌 것들은 숨김 파일)이다. 그리고 이 숨김파일을 보기 위해서는 ls -a 명령어를 사용해야 하며 위 그림처럼 실제로 .test.txt.swp가 존재하는 걸 확인할 수 있다.
해당 파일을 다음과 같은 명령어로 제거를 해보자.
▲ 제거는 rm -f .파일이름.swp로 할 수 있으며 명령어 실행 후에는 실제로 해당 파일이 제거된 걸 확인할 수 있다.
▲ 그리고 다시 vi test.txt를 실행하니 정상 편집할 수 있는 상태가 되기는 했는데 앞에서 저장하지 않고 종료했을 때 편집했던 내용은 없어진 상태가 된다. 이처럼 swp 파일이 생성됐을 때는 간단하게 그것의 제거만으로 문제를 해결할 수는 있지만 편집한 내용이 삭제되며 이 과정을 반복하는 것 또한 번거로우니 vi를 종료할 때는 항상 정상 종료 되도록 주의를 기울이자.
이렇게 해서 vi의 기본 사용법을 대충 살펴봤는데 이제 편집 과정에서 사용되는 vi의 대표적인 명령어들을 몇 개 정리해보고 마무리하자.(커서를 기준으로)
4. vi 편집 명령어
i |
커서의 위치부터 입력 |
I(대문자 i) |
커서가 있는 줄의 맨 앞부터 입력 |
a |
커서의 다음 위치부터 입력 |
A |
커서가 있는 줄의 마지막부터 입력 |
o |
다음 줄부터 입력 |
O |
이전 줄부터 입력 |
s |
한글자 띄우고 입력 |
S |
한 줄을 지우고 입력 |
h |
왼쪽으로 한 칸 이동 |
j |
아래쪽으로 이동 |
k |
위로 이동 |
l(소문자L) |
오른쪽으로 이동 |
Ctrl + F |
다음 화면으로 이동(Page Down) |
Ctrl + B |
이전 화면으로 이동 (Page Up) |
^ |
현재 줄의 처음으로 이동 (Home) |
$ |
현재 줄의 마지막으로 이동 (End) |
gg |
맨 처음 줄로 이동 |
G |
제일 끝 줄로 이동 |
숫자G |
입력한 숫자 행으로 이동 |
:숫자 + 엔터 |
해당 숫자의 행으로 이동 |
x |
커서가 위치한 글자 삭제 |
X |
바로 앞 글자 삭제 |
dd |
커서가 있는 줄 삭제 |
숫자dd |
커서에서 숫자만큼의 줄 삭제 |
yy |
현재 행 복사 |
숫자yy |
숫자만큼의 행 복사 |
p(소문자) |
복사한 내용을 다음 줄에 붙여넣기 |
P(대문자) |
복사한 걸 이전 줄에 붙여넣기 |
/문자열 + 엔터 |
커서 이후로 해당 문자열 찾기 |
n |
찾고 있는 문자 중 다음으로 이동 |
쭉 입력해보니 어느 정도는 머릿속에 들어오는데... 익숙해지기 위해서는 자주 사용을 해봐야 할거 같다.