본문 바로가기

IT/Linux

Linux vi편집기 명령어

vi 편집기 명령어 정리

vi 편집기는 워낙 명령어가 많고 응용이 다양하게 되기 때문에

전부다 적자면 책 한권분량이라서 자주 쓸만한 것들만 모아놓음

직접 해보고 참고사항을 적어놓았지만 직접 해보지 않으면 이해가 되지 않을 명령어들도 많다.

vi 시작하기 - 앞에 # 표시가 붙는걸 보면 알겠지만 이 명령어들은 터미널 명령어다

항상 이라고 장담은 못하지만 vi 관련 명령어는 내가 아는한

vi (띄우고) 부호+명령어(띄우고) 파일네임 이런식이다.

# vi

vi 편집기 시작

# vi <Name>

<Name>이름을 가진 파일을 연다.

없는 파일이면 새로 생성한다

# vi +10 <name>

<name>파일의 3번째 행부터 파일열기

*띄워쓰기에 유의해야 한다. 만약 + 3이라고 하면 3이라는 이름의 파일이 생성된다.

*여기서 3번째 행부터 파일을 연다는것은 3번행 이전은 출력을

안하는것이 아니라 커서의 위치가 3번행 이라는 소리다.

# vi +/"ab" <name>

<name>파일의 문자열 "ab"가 나오는곳부터 시작

# vi -r <name>

<name> 라는 이름의 손상된 파일을 복구

# view <name>

읽기 전용으로 열기

커서 이동 - vi편집기 내에 백스페이스, 방향키가 터미널과 다르게 동작하는 세팅이 있고 똑같이 동작하는 세팅이 있다. 그 세팅은 vi의 profile을 수정함으로써 바꿀수 있다.

기본적으로 페도라와 우분투에서 모두 esc를 누른 상태에서는 방향키가 동작한다.

그 이외의 상황은 밑에서 설명하겠다.

한가지 기억할것은 방향키 모드일때의 enter와 입력모드일때 enter가 다르다는거다.

그 점 명심하지 않으면 골치 좀 아플꺼다.

그럼 enter말고 space는 방향키모드나 입력모드나 똑같나요 하는 사람은 없을것이다.

입력모드 모두 동일이다.

그리고 커서를 이동하다가 입력으로 전환할때는 esc를 안누르고 바로 a만 누르면 된다

즉 esc 누르고 kkk를 눌러서 위로 세칸을 이동했으면 그 상태에서 a만 누르면

바로 입력모드로 전환된다.

h

왼쪽으로 이동

j

아래로 이동

k

위로 이동

l

오른쪽으로 이동

w

한단어 오른쪽으로이동

b

한단어 왼쪽으로 이동

Enter(Return)

한행아래로 이동

* 한행아래로 이동이지 기존에 사용하던것처럼 새로 한행을

만드는 기능은 커서 이동 상태에서는 없다.

Backspace

한칸 왼쪽으로 이동

* 이 역시 기존처럼 삭제의 개념이 아니라 이동의 개념이다.

Spacebar

한칸 오른쪽으로 이동

* 이하 동문이다. 입력모드에서 오른쪽 자리를 확보해두지

않았다면 이동이 불가능하다.

H

gg

화면의 맨위로 이동

* gg랑 H랑 같은 역할이다. 입맛대로 골라쓰면 되겠다

* 특별한 설명없이 명령어가 두줄이면 두 개다 같은 기능이다

M

화면의 중간으로 이동

L

G

화면의 맨 아래로 이동

* 여기서 뭔가 이상한점이 있을것이다.

소문자 h,l은 좌우이동인데 대문자 H, L은 왜 상하인가?

high, low 겠지만 직관적이지 않다고 본다.

뭐 어쩌겠나 그냥 써야지 정 꼬으면 위에서 말한대로

profile을 바꿔주면 되겠다.

ctrl + f

pagedown

한페이지 아래로 이동

* 여기 컨트롤 시리즈 f,d,b,u는 대소문자 구분이 없다.

위에서 말안했지만 대소문자 구분 없는 명령어는 몇 개 안되니

그냥 딱히 대문자 명령어가 없으면 소문자라고 생각하는게

마음 편할것이다.

ctrl + d

반페이지 아래로 이동

*굳이 반페이지가 있는 이유는 한페이지 이동은 아래위로

자신이 가고자 하는 방향쪽에 한페이지 만큼의 공간이 없으면

이동이 안되지만 반페이지 이동은 그런거 없다.

제일 위줄 까지 갈수있다.

ctrl + b

pageup

한페이지 위로 이동

ctrl + u

반페이지 위로 이동

Home

현재줄의 제일 앞칸으로 이동

End

현재줄의 제일 뒤로 이동

숫자G

: 숫자 Enter

숫자의 행으로 이동

입력모드 - vi가 골때리는 이유중 하나는 위의 커서이동모드 일때와 입력모드 일때

같은 키더라도 입력되는값이 다른경우가 많다.

이점에 유의해야한다.

a

커서 오른쪽에 문자삽입

* 가장 많이 쓰는것

A

커서 오른쪽, 행의끝에 문자삽입

i

커서 왼쪽에 문자삽입

I

커서왼쪽, 행의 처음에 문자삽입

o

커서 아래에 행 삽입

O

커서 위에 행 삽입

pageup

pagedown

왼쪽 문자 하나를 대소문자로 바꿔준다.

* 대문자일 경우 대문자로 바꾸고 소문자일 경우 대문자로 바꾼다 두키 모두 동일하다. 다만 유의할점은 변경후 방향키 이동

모드로 다시 복귀한다.

텍스트 변경

cw

단어 변경

* 한글자를 지우고 입력모드로 전환

cc

줄 변경

* 한줄을 지우고 입력모드로 전환

C

커서 오른쪽 줄 변경

s

커서가 위치한 문자 대체

r

커서 위치 문자를 다른 문자로 대체

* 위의 s와 별 차이는 없지만 s는 s를 눌리는순간 한글자를

지워버리고 입력모드로 전환되지만 r키는 커서 이동모드로

유지된다. r을 누르고 lll을 눌러 오른쪽 세칸가서 f로 변경하고

다시 r을 누르고 kk를 눌러 밑으로 두칸가서 또 변경가능하다.

다만 변경하기 전에 r을 눌러주지 않으면 명령어로 인식한다.

r Enter(Return)

행 분리

* r을 누르고 바로 Enter를 누른다.

J

현재 행과 아래 행 결합

xp

커서 위치 문자와 오른쪽 문자교환

u

이전 명령 취소

U

행단위 변경사항 취소

:u

이전의 최종행 취소

텍스트 삭제

x

문자삭제

dw

단어삭제

* 그 단어의 시작부분에서 수행된다.

dd

행 삭제

D

커서 오른쪽 행 삭제

:5,10 d

5-10째 행 삭제

:34,50 d

34 줄 부터 50 줄 까지 삭제

:.,$ d

현재줄부터 끝까지 지우기

:$d

마지막행 삭제

:/<name>/ d

<name> 이 들어있는 줄 지우기

* 여기서 <name>이 여러개 있을 경우 위에서 아래부터 검색하는데 /대신 ?을 사용하면 아래부터 검색한다.

그리고 -3d를 사용하면 <name>이 있는 위의 세 번째 줄을 삭제하는 등의 옵션도 가능하다.

행번호 설정

:set nu

행번호 표시

:set nonu

행번호 숨기기

텍스트의 복사 및 이동

yy

Y

커서가 위치한 행 복사

P

복사된 행을 현재 행 아래에 삽입

p

복사된 행을 현재 행 위에 삽입

:1,2 co 3

1-2행을 3행 다음으로 복사

:4,5 m 6

4-5행을 6행 다음으로 이동

탐색 및 대체

/<name>/

<name>을 위에서부터 아래로 탐색

?<name>?

<name>을 아래에서부터 위로 탐색

s/A/B/

현재 커서가 있는 행의 A를 B로 변환

:%s/A/B/

문서내의 모든 A를 모두 B로 변환

Ctrl + L

화면내의 불필요한 내용 제거

:r <filename>

현재 커서 위치에 <filename>의 내용을 삽입한다.

:20 r filename

20번 다음행에 <filename>의 내용을 삽입한다.

:g/<name>/ p

파일전체에서 <name> 이 있는줄 보여주기

* 여기서 g를 붙이면 한꺼번에 보여주고 붙이지 않으면

/옵션인만큼 위에서부터 찾아서 내려온다.

:g/<name>/ nu

파일전체에서 <name> 이 있는줄을 번호와 함께 보여주기

:10,12 g/a/

10~12번 줄 사이에서 a 가 들어있는줄 보여주기

파일의 저장 및 종료

:w

변경사항 저장

:q

종료하기

:w!

강제로 저장하기 (read-only 로 열었을경우)

:q!

변경사항을 저장하지 않고 vi종료

:wq

:x

변경사항 저장후 vi종료

:w <name>

<name>이름으로 새로 파일생성