리눅스프로그래밍

vi - 사용법 (복사, 붙이기, 버퍼,검색, 바꾸기, 기타 유용키)

헬로월드! 2020. 4. 24. 15:47

1. 복사하기 또는 잘라서 붙이기 

복사하기나 잘라내기를 하면 내용이 임시 버퍼에 저장된다. 따라서 복사하기나 잘라내기를 한 뒤에는 다른 명령을 사용하지 말고 즉시 원하는 위치도 이동하여 붙이기를 하는 것이 좋다 .다른 명령을 사용하다가 임시 버퍼에 저장된 내용을 잃어버릴 수도 있기 때문이다. 

명령키 기능
yy , #yy 커서가 위치한 행을 복사한다. # 에는 복사할 행의 수를 지정
p 커서가 위치한 행의 아래쪽에 붙인다.
P 커서가 위치한 행의 위쪽에 붙인다.
dd, #dd 커서가 위치한 행을 잘라둔다. 삭제와 같은 기능 , # 에는 잘라둘 행의 수를 지정한다. 

 

- 네임드 버퍼 사용하기

yy 명령키로 복사하거나, dd 명령 키로 잘라낼 경우, 복사하거나 잘라낸 내용이 버퍼에 저장된다.

이렇게 이름을 붙이지 않은 버퍼 = ' 언네임드 버퍼' , 여기에는 내용을 하나만 저장할 수 있다.

ex. 2yy 명령으로 두 행을 복사하여 저장했는데 다시 3yy 명령을 입력하면 앞서 저장한 두 행이 지워지고 새로 복사한 세 행이 저장된다. 

반면, 이름을 붙여 사용할 수 있는 버퍼 = '네임드 버퍼 ' , 이것을 사용하면 각각 다른 이름을 붙인 버퍼에 독립적으로 내용을 저장하고 사용할 수 있다. 네임드 버퍼에 이름을 붙일 때는" + 문자 또는" +숫자 형태로 사용한다.

 

>> 네임드 버퍼 : " a,"b,"c,,,,

>> 숫자 버퍼: "1, "2, "3,,,,

 

네임드 버퍼에 커서가 위치한 행을 저장하려면 버퍼이름 + yy 를 입력하면 된다.

>> "a 버퍼에 복사한 내용을 저장하려면 "ayy 를 입력

>> 네임드 버퍼의 내용을 붙이려면 "ap 와 같이 버퍼이름+p를 입력

 

 

-마지막 행 모드에서 복사하기, 잘라내기, 붙이기

1) 범위 지정하기

명령키 기능
1, $ 또는 % 1행부터 마지막 행까지 지정한다.
1.. 1행부터 커서가 있는 행까지 지정한다.
..$ 커서가 있는 행부터 마지막 행까지 지정한다.
.,.+2 현재 행과 두 번째 아랫행 (총 세행)을 지정한다.
10,20 10 행부터 20행 까지 지정한다.

2) 복사하기, 잘라내기, 붙이기 

명령키 기능
:#y #로 지정한 행을 복사한다. ex. 3y 는 세 행을 복사
:<범위>y 범위로 지정한 행을 복사한다. ex. 3,5y 3~5행 복사
:#d #로 지정한 행을 잘라낸다. 
:<범위>d 범위로 지정한 행을 잘라낸다.
:pu 현재 행 다음에 버퍼의 내용을 붙인다.
:#pu #로 지정한 행 다음에 버퍼의 내용을 붙인다. 

 

2. 검색하기와 바꾸기 

: vi 에서 특정 문자열을 검색하거나 검색한 문자열을 다른 문자열로 바꾸는 명령은 마지막 행 모드에서 제공한다.

 

1) 검색하기

문자열을 검색하려면 일단 마지막 행 모드로 ! 

검색하기 위해 마지막 행 모드에서는 : 이 아니라 / 나 ? 를 입력한다.

/ 이나 ? 는 다음에 찾고자 하는 문자열을 입력하고 enter 키를 누르면 검색이 진행되고, 해당 문자열을 찾으면 그 문자열의 시작 위치로 커서가 이동한다.

 

명령키 기능
/ 문자열 문자열을 아래 방향으로 검색한다.
?문자열 문자열을 위 방향으로 검색한다.
n 원래 찾던 방향으로 다음 문자열을 검색
N 반대 방향으로 다음 문자열을 검색 

2) 바꾸기

기존 문자열을 다른 문자열로 바꾸려면 먼저 : 을 입력하여 마지막 행 모드로 이동

커서 위치의 문자열만 바꿀 수도 있고, 파일 전체나 특정 범위 내에서 해당하는 문자열을 모두 바꿀 수도 있음 

 

명령키 기능
:s/문자열1/문자열2/ 커서가 위치한 행에서 첫번째로 나오는 문자열1 을 문자열 2로 바꾼다.
:%s/문자열1/문자열2/g 파일 전체에서 모든 문자열1을 문자열2로 바꾼다.
:<범위>s/문자열1/문자열2/ 범위 내 모든 각 행에서 첫 번째로 나오는 문자열1을 문자열2로 바꾼다
:<범위>s/문자열1/문자열2/g 범위 내 모든 행에서 문자열1을 문자열2로 바꾼다
:<범위>s/문자열1/문자열2/gc 범위 내 모든 행에서 문자열1을 문자열2로 바꿀 때 수정할지 여부를 물어본다. 

 

3. 기타 유용 명령키 

- 파일 읽어오기, 여러 파일 편집하기 : 마지막 행 모드에서 제공 

명령키 기능
:r 파일 지정한 파일을 읽어들여 현재 커서 위치에 삽입한다. 
:e 파일 지정한 파일로 전환한다.(기존 파일을 :w로 저장한 뒤에 실행해야 한다)
:n  vi 시작시 여러파일을 지정했을 경우 다음 파일로 작업을 이동한다. 

 

- vi 에서 셸 명령 사용하기

명령키 기능
:!셸명령

vi 작업을 잠시 중단하고 셸 명령을 실행한다.

vi 로 돌아오려면 enter 키를 누른다.

:sh

vi 를 잠시 빠져나가서 셸 명령을 실행한다.

(vi 로 돌아오려면 exit 명령을 입력한다)

vi 를 빠져나가거나 하는 번거로움 없이 바로 이용할 수 있다는 장점

다시 vi 작업으로 돌아가려면 enter 키 입력 

 

- 기타 명령키

명령키 기기능
ctrl+l 현재 화면을 다시 출력한다.
ctrl+g 현재 커서 위치의 행 번호를 마지막에 출력한다.
J 현재 행과 아랫행을 연결하여 한 행을 만든다.
. 바로 직전에 했던 명령을 반복한다.