2023년 9월 20일 수요일

리눅스 vi 명령어 정리

리눅스 vi 명령어 정리

vi 편집기 모드의 종류

linux에서 사용하는 vi 편집기는 명령모드, 입력모드, 마지막 행 모드로 총 3가지 모드로 구성되어있습니다. 흔히 사람들이 말하는 vi 명령어는 이 세가지 모드를 자유자재로 변경 하면서 코드나 글을 작성하는 것을 말합니다.


명령 모드(command mode)

처음 vi 명령어로 vi를 시작하게 되면 들어가게 됩니다. 여기서는 방향키를 이용하여 커서를 이동할 수 있으며, "dd" 나 "yy" 로 한 줄 삭제 및 한 줄 붙여넣기, 또는 "x" 명령어로 글자 하나를 삭제할 수 있습니다.

입력 모드(insert mode)

명령모드에서 "i" 나 "a" 명령을 통해서 입력 모드로 넘어 갈 수있습니다. 입력모드로 가게되면, 자유롭게 코드나 글을 작성을 하시면 됩니다. 명령 모드로 다시 돌아오려면 "ESC"를 누르면 됩니다.

마지막 행 모드(Last line mode)

마지막행 모드는 명령모드에서 ":" (콜론) 을 입력하면 화면 맨 밑단에 :______ 하며 입력을 할수 있는 공간이 나옵니다. 여기서 현재까지 내가 작성한 이 내용을 저장하고 vi를 종료(wq)할지, 그냥 종료(q, q!)할지 등을 입력할 수 있습니다.




vi 명령어 정리


명령 모드(command mode)에서의 명령어들

esc 눌렀을때 또는 vi 바로 들어가자마자 상태 (엔터를 치지 않아도 명령이 입력가능)

vi 명령어 동작
i 현재 커서 위치에 삽입 (입력모드로 넘어감)
a 현재 커서 바로 다음위치에 삽입 (입력모드로 넘어감)
o 현재 줄 다음 위치에 삽입 (입력모드로 넘어감)
x 커서가 위치한 곳의 글자 1개 삭제. (5x : 문자 5개 삭제)
dw 커서가 위치한 곳에서 부터 단어 삭제 (커서가 위치한 곳 부터 띄어쓰기 까지)
dd 커서가 위치한 곳의 한 줄 삭제 (삭제이지만, p로 복구가능)
u 방금 한 명령 취소 (ctrl + z 라고 생각하면 됩니다)
yy 현재 줄을 버퍼로 복사 (한 줄을 ctrl + c 한다고 생각하면 됩니다.), 3줄 복사 : 3yy
p 현재 커서가 있는 줄 바로 아래에 버퍼 내용 붙여넣기 (이전에 복사한 줄을 현재 커서 아래부터 ctrl + v 한다고 생각하면 됩니다.),
3dd를 이용해서 세줄을 지운 것도 p 한번으로 붙여넣기 가능합니다.
잘라내기 dd -> 붙여넣기 p
(N)dd N 행 삭제 (삭제가 되는 것 처럼 보이지만 실제로는 버퍼에 들어가 있습니다. 버퍼에 들어가 있기 때문에 p를 이용해서 붙여넣기 가능)
잘라내기 라고 생각하면 됩니다. (ctrl + x)
vi에서 여러줄을 삭제하고 싶다면 (N)dd 를 사용하면 됩니다. (N에는 숫자가 들어갑니다)
k 위로! (커서가 한 줄 위로 올라감.)
j 아래로! (커서가 한 줄 아래로 내려감)
l 오른쪽으로! (커서가 한칸 우측으로감)
h 왼쪽으로! (커서가 한칸 좌측으로감)
0 커서가 있는 줄의 맨 앞으로 감 (home 키라고 생각하면 됩니다), 숫자 0(영)
$ 커서가 있는 줄의 맨 뒤로 감 (end 키라고 생각하면 됩니다)
( 현재 문장의 처음
) 현재 문장의 끝
{ 현재 문단의 처음
} 현재 문단의 끝
숫자- 숫자 만큼 윗 줄로 이동
숫자+ 숫자 만큼 아래 줄로 이동
G 파일의 끝으로 이동, 대문자로 사용해야합니다. (Shift + g)
r 한 문자 변경
CC 커서가 있는 그 줄의 내용 변경



마지막 행 모드(last line mode)에서의 명령어들

esc 누르고, 콜론( : )을 누르면 나오는 상태 (아래 명령어 하고 엔터를 쳐야지 명령이 들어갑니다.)

vi 명령어 동작
w 현재 파일명으로 파일 저장. (저장만 함 꺼지지는 않음)
w [파일명] 입력한 파일명으로 파일 저장. (저장만 함 꺼지지는 않음)
q vi 종료 (저장되지 않음)
q! vi 강제 종료 ( ! 가 붙으면 강제로 수행)
wq 저장 후 종료
wq! 강제 저장 후 종료 ( ! 가 붙으면 강제로 수행)
f [파일명] 방파일이름을 [파일명]으로 변경, 예시 : f test.txt
숫자 해당 라인으로 커서 이동
$ 파일의 맨 끝 줄로 이동
e! 마지막 저장 이후 모든 편집 취소
/문자열 현재 커서 위치에서 부터파일 앞쪽으로 문자열 탐색
?문자열 현재 커서 위치에서 부터 파일 뒤쪽으로 문자열 탐색
set nu vi 라인 번호 출력
set nonu vi 라인 번호 출력 취소