캠핑과 개발

vi 사용하기

개발/Linux2009. 9. 10. 14:39
1. vi 사용하기

커서 이동

명령 모드에서 h, j, k, l 키를 누르면 커서는 각각 왼쪽, 아래, 위, 오른쪽으로 한 칸 이동한다. 근래 vi 버전에서는 화살표 키를 사용해도 된다. h, j, k, l 키는 꽤나 편리한데, 일단 익숙해지면 키보드 가운데 줄에서 손을 떼지 않고도 커서를 움직일 수 있어서다. 현재 열어 놓은 파일에서 (화살표 키와) h, j, k, l을 사용해 커서를 이동해본다. h 키를 계속 두드려 행 맨 처음까지 이동해본다. 행 맨 처음에서 h 키를 계속 두드려도 커서가 이전 행으로 올라가지 않는다는 사실에 주목한다. 마찬가지로, 행 끝에서 l 키를 계속 두드려도 커서는 다음 행으로 넘어가지 않는다.

vi는 행 처음이나 마지막으로 커서를 단번에 이동하는 단축키도 제공한다. 0을 누르면 커서는 행 첫 번째 문자로 이동하고, $을 누르면 커서는 행 마지막 문자로 이동한다. 직접 실행해본다. vi에는 편리한 이동 명령이 아주 많아 (more나 less 명령처럼) 파일 보기 프로그램(pager)으로도 훌륭하다. 파일 보기 프로그램으로 vi를 활용하면 이동 명령을 기억하기도 쉬워진다.

이전 페이지나 다음 페이지로 이동하려면 ^F(컨트롤-F)와 ^B(컨트롤-B) 키를 사용한다. (vim과 같은) 근래 vi 버전에서는 Pg Up 키와 Pg Dn 키를 사용해도 된다.

낱말 단위로 커서 이동

vi에서는 낱말(word) 단위로도 커서를 이동할 수 있다. 다음 낱말 첫 번째 문자로 커서를 이동하려면 w 키를 누른다. 다음 낱말 마지막 문자로 커서를 이동하려면 e 키를 누른다. 이전 낱말 첫 번째 문자로 커서를 이동하려면 b 키를 누른다. 직접 실행해본다.

낱말 이동 명령을 연습하다 보면 vi가 "foo-bar-oni" 같은 표현을 다섯 낱말로 인식한다는 사실이 드러난다. 기본적으로 vi가 공백이나 구두점으로 낱말을 구분하기 때문이다. 즉 vi는 foo-bar-oni라는 표현을 "foo", "-", "bar", "-", "oni"라는 다섯 낱말로 인식한다.

그렇지만 foo-bar-oni를 한 낱말로 인식하고 싶을 때도 있다. 다행스럽게도 vi는 "큰 낱말(big word)"이라는 개념도 인식한다. 즉 vi에서 foo-bar-oni는 낱말(word) 수가 다섯 개지만 큰 낱말(big word) 수는 한 개다.

다음 큰 낱말과 이전 큰 낱말로 커서를 이동하려면 낱말 이동 명령을 대문자로 바꾼 키를 사용한다. 즉 W 키는 다음 큰 낱말 첫 번째 글자로 커서를 이동한다. E 키는 다음 큰 낱말 마지막 문자로 커서를 이동하고, B 키는 이전 큰 낱말 첫 번째 글자로 커서를 이동한다. 연습해본다. 차이를 이해할 때까지 낱말 이동 명령과 큰 낱말 이동 명령을 실행하고 비교해본다.

더 큰 단위로 커서 이동

컨닝 페이퍼를 만들기 전에 명령 몇 개만 더 살펴보자. ( 키와 ) 키는 이전 문장과 다음 문장 처음으로 커서를 이동한다. { 키와 } 키는 현재 문단과 다음 문단 시작으로 커서를 이동한다. 연습해본다.

종료

지금까지 기본적인 커서 이동 명령을 살펴보았는데, 알아야 할 명령이 몇 개 더 있다. :q 명령은 vi를 종료한다. 이 명령이 먹히지 않으면 실수로 파일을 수정했다는 뜻이다. 수정한 내용을 버리고 vi를 종료하려면 :q! 명령을 입력한다. 그러면 명령 프롬프트로 돌아간다.

vi에서 콜론(:)으로 시작하는 명령은 모두 ex 모드 명령이다. 이는 vi가 “ex”라는 비시각적인(non-visual) 편집기를 내장하기 때문이다. ex는 sed와 비슷하게 행 단위로 텍스트를 편집하는 프로그램이다. 또한, 방금 보았듯이 vi를 종료할 때도 ex 명령을 사용한다. 명령 모드에서 Q 키를 누르면 vi는 ex 모드로 전환하고 : 프롬프트가 뜬다. 이 때 엔터 키를 누르면 전체 화면이 위로 이동한다. ex 모드에서 vi 모드로 돌아가려면 그냥 vi만 입력한 후 엔터 키를 누른다.


2. 편집과 저장

커서 이동

계속해서 vi 명령을 살펴보자. 명령 모드에서 <행 번호>G를 입력하면 커서는 해당 행으로 이동한다. 파일 첫 번째 행으로 이동하려면 1G를 입력한다. 여기서 G는 대문자라는 사실에 주의한다.

특정한 텍스트 패턴을 찾아서 커서를 이동하려면 /regexp를 입력하고 엔터 키를 누른다. 여기서 regexp 대신 찾으려는 정규 표현식을 입력한다. 이 때 커서는 다음에 나타나는 텍스트 패턴으로 이동한다. 정규 표현식을 모른다고 당황할 필요는 없다. /foo라고 입력하면 다음에 나타나는 foo로 커서가 이동한다. 단, ^, ., $, \ 문자는 정규 표현식에서 사용하는 특수 문자이므로 주의한다. ^, ., $, W 문자가 들어가는 패턴을 찾으려면 문자 앞에 \ 문자를 붙인다. 예를 들어, /foo\.gif는 다음으로 나타나는 "foo.gif"를 찾는다.

검색을 계속 진행하려면, 즉 현재 커서 이후에 나타나는 패턴을 찾으려면, n 키를 누른다. 검색을 역으로 진행하려면, 즉 현재 커서 이전에 나타나는 패턴을 찾으려면, N 키를 누른다. vi 편집기에서 직접 연습해본다.

저장, 다른 이름으로 저장

앞서 :q 명령을 소개하면서 ex 명령을 설명했다. 변경한 내용을 저장하려면 :w를 입력한다. 변경한 내용을 다른 파일에 저장하려면 :w filename.txt를 저장한다. 파일을 저장한 후 vi를 종료하려면 :x 또는 :wq를 입력한다.

(elvis 같은 고급 vi 편집기에서도 마찬가지지만) vim에서는 동시에 버퍼 여러 개를 열어둘 수 있다. 새 창에서 파일을 열려면 :sp filename.txt를 입력한다. 그러면 현재 창이 나뉘면서 새 창에 filename.txt가 열린다. 창 사이를 전환하려면 ^w^w(컨트롤-w 두 번)을 입력한다. :q, :q!, :w, :x 명령은 현재 활성화된 창에만 적용된다.

간단한 편집

이제 간단한 편집 명령을 익힐 차례다. “간단한” 명령이라고 칭한 이유는 명령을 실행한 후에도 명령 모드를 유지하기 때문이다. 일부 복잡한 편집 명령은 자동으로 삽입 모드로 전환한다. 삽입 모드에서는 키보드로 입력하는 문자가 그대로 삽입된다. 복잡한 편집 명령은 나중에 다룬다.

지금은 커서를 옮겨가면서 x 키를 계속 눌러본다. 커서가 놓인 위치에서 현재 글자가 삭제된다는 사실을 발견하리라. 이제 문단 중간으로 커서를 옮긴 다음 (대문자) J 키를 누른다. 직접 눌러보면 알겠지만, J 키를 누르면 다음 행이 현재 행 끝으로 연결된다. 이제 문자 위에 커서를 놓고 r 키를 누른 후 새 문자 하나를 입력한다. 그러면 원래 문자가 새 문자로 교체된다. 마지막으로, 커서를 행 아무 데나 놓은 후 dd를 입력한다. 그러면 현재 커서가 놓인 행이 삭제된다.

반복과 삭제

. 키를 누르면 vi는 직전에 실행한 편집 명령을 다시 실행한다. dd....를 입력하면 행 네 개가 지워진다. J....는 행 네 개를 결합한다. vi가 제공하는 또 다른 편리한 단축키라 하겠다.

텍스트를 지우려면 d 명령과 이동 명령을 조합한다. 예를 들어, dw 명령은 현재 커서 위치에서 다음 낱말 시작까지 삭제한다. d) 명령은 현재 커서 위치에서 다음 문장 끝까지 삭제하고, d} 명령은 현재 커서 위치에서 문단 끝까지 지운다. 익숙해질 때까지 d 명령과 다른 편집 명령을 조합해서 연습해본다.

실행 취소!

삭제 명령을 익혔으니 실행 취소 명령도 알아두는 편이 좋겠다. 원래 vi 버전에서는 u 키를 누르면 가장 최근에 가한 변경만 복원한다. 그러나 (vim 같은) 근래 vi 버전에서는 u 키를 계속 누르면 파일에 가한 변경을 계속 거슬러 올라가면서 복원해준다. d 명령과 u 명령을 조합해 연습해본다.


3. 삽입모드

삽입 모드 이해

지금까지는 vi에서 커서를 이동하는 방법, 파일 입출력을 수행하는 방법, 기본적인 편집 작업을 수행하는 방법을 다루었다. 그런데 아직도 파일에 텍스트를 맘대로 입력하는 방법은 다루지 않았다. 의도적으로 뒤로 미루었는데, 처음에는 vi 삽입 모드가 다소 복잡해 보이기 때문이다. 그러나 삽입 모드에 익숙해지고 나면 삽입 모드의 복잡성(과 유연성)은 오히려 장점으로 작용한다.

vi 삽입 모드에서는, 다른 시각적 편집기와 마찬가지로, 화면에 텍스트를 맘대로 입력할 수 있다. 파일을 수정한 후 명령 모드로 돌아오려면 Esc 키를 누른다. 명령 모드에서 삽입 모드로 전환하려면 i 키나 a 키를 누른다. i 키를 누르면 입력하는 텍스트는 현재 커서 위치 앞에 삽입된다. a 키를 누르면 입력하는 텍스트는 현재 커서 위치 다음에 삽입된다. 텍스트를 입력한 후 명령 모드로 돌아오려면 Esc 키를 눌러야 한다는 사실에 주의한다.

삽입 모드의 장점

a 키와 i 키 명령을 직접 실행해본다. a 키나 i 키를 누르고 텍스트를 입력한 후 Esc 키를 눌러 명령 모드로 돌아온다. 다음으로는 a 키나 i 키를 누르고 텍스트를 입력한 후 Enter 키를 눌러본다. 이번에는 삽입 모드에서 화살표 키나 delete 키를 눌러 결과를 살핀다. 화살표 키나 delete 키를 사용하면 삽입 모드와 명령 모드를 오가지 않고도 상당한 편집 작업을 수행할 수 있다.

삽입 옵션

삽입 모드로 전환하는 편리한 방법 몇 가지를 더 소개한다. (대문자) A 키를 누르면 현재 커서 위치에 상관 없이 현재 행 끝에 텍스트를 첨부하기 시작한다. 마찬가지로, (대문자) I 키를 누르면 현재 행 시작부터 텍스트를 첨부하기 시작한다. (소문자) o 키를 누르면 현재 행 다음에 새 행을 만든다. (대문자) O 키는 현재 행 직전에 새 행을 만든다. 현재 행 전체를 새 행과 교체하려면 cc를 입력한다. 현재 위치에서 행 끝까지 내용을 교체하려면 c$를 입력한다. 현재 위치에서 행 시작까지 내용을 교체하려면 c0를 입력한다.

위 명령은 모두 특정한 작업을 수행한 후 삽입 모드로 전환한다. 즉 텍스트를 입력한 후에는 Esc를 눌러야 명령 모드로 돌아온다.

텍스트 변경

방금 cc, c0, c$ 등 c 명령을 언급했다. cc는 dd처럼 c 명령의 특수한 형태다. c0와 c$ 명령은 c 명령과 커서 이동 명령을 조합한 예다. 여기서 c 명령은 d 명령과 비슷하게 동작한다. 단, c 명령은 텍스트를 지우고 입력하도록 삽입 모드로 전환한다는 점이 다르다. cW, ce, c(. 등 c 명령과 커서 이동 명령을 다양하게 조합하여 연습해본다.

명령 조합

vi에서 명령을 조합하기 시작하면 vi는 더욱 강력해진다. d{나 cw 등이 좋은 예다. 커서 이동 명령에 숫자를 조합해도 된다. 예를 들어, 3w 명령을 입력하면 커서는 오른쪽 낱말 세 개를 건너뛴다. 12b, 4j 등도 좋은 예다.

(숫자)(커서 이동 명령) 조합에 더하여 d나 c를 숫자나 커서 이동 명령과 조합해도 된다. 즉 d3w는 오른쪽에 있는 낱말 세 개를 삭제한다. d2j는 현재 행과 다음 행 두 개를 삭제한다. c, d 명령 조합을 실습하면서 vi 편집이 얼마나 강력하고 간결한지 느껴본다. 이러한 명령 조합을 완전히 익히면 번개같은 속력으로 파일을 편집하게 되리라.


4. 생산성 기능

지금까지...

지금까지 커서를 이동하는 방법, 파일을 저장하고 vi를 종료하는 방법, 텍스트를 간단히 편집하고 삭제하는 방법, 삽입 모드로 전환하는 방법을 살펴보았다. 지금까지 살펴본 명령과 컨닝 페이퍼를 동원하면 vi로 하지 못할 작업이 거의 없으리라.

그러나 vi에는 이 외에도 강력한 명령이 매우 많다. 이 단원에서는 텍스트를 잘라내고, 복사하고, 붙여넣고, 검색하고, 교체하는 방법과 자동 들여쓰기 기능을 사용하는 방법을 소개한다. 이러한 명령을 활용하면 vi 사용이 훨씬 재미있어지고 생산성도 높아진다.

시각적 모드

텍스트를 잘라내 붙이려면 시각적 모드가 가장 편하다. 시각적 모드는 (vim이나 elvis 같은) 최근 vi 버전이 제공하는 특수 모드다. 시각적 모드는 "텍스트 선택(highlight text)" 모드로 생각해도 좋다. 일단 텍스트를 선택한 후에는 삭제하거나 복사하여 붙여넣을 수 있다.

시각적 모드로 전환하려면 v 키를 입력한다. 그러면 그림 3과 같이 편집기 왼쪽 하단에 VISUAL이라는 낱말이 표시된다. 시각적 모드에서 이동 명령이나 화살표 키로 커서를 이동하면 해당 텍스트가 선택된다. 만약 윈도우 관리자가 응용 프로그램에 대한 마우스 사용을 허가한다면 마우스 왼쪽 버튼을 클릭한 채 끌어서 텍스트를 선택해도 좋다.

vi 시각적 모드

vi 시각적 모드


일단 텍스트를 선택하고 나면 잘라내거나 복사할 수 있다. 텍스트를 복사하려면 y 키를 누른다. (여기서 y는 “yank”를 의미한다.) 텍스트를 잘라내려면 d 키를 누른다. 그러면 명령 모드로 돌아온다. 이제 복사한 텍스트나 잘라낸 텍스트를 삽입할 위치로 커서를 이동한 후 p 키나 P 키를 누른다. p 키를 누르면 텍스트가 커서 앞에 삽입된다. P 키를 누르면 텍스트가 커서 뒤에 삽입된다. 짜잔!! 이렇게 복사/잘라내기와 붙여넣기가 끝났다. 다음으로 넘어가기 전에 잘라내기/붙여넣기를 여러 차례 연습해본다.

텍스트 교체

텍스트 패턴을 교체하려면 ex 모드를 사용한다. 현재 행에서 첫 번째로 나타나는 패턴을 교체하려면 :s/regexp/replacement/를 입력하고 엔터 키를 누른다. 여기서 regexp는 찾으려는 패턴이고 replacement는 교체할 문자열이다. 현재 행에서 일치하는 패턴을 모두 교체하려면 :s/regexp/replacement/g를 입력하고 엔터 키를 누른다. 파일 내에서 일치하는 패턴을 모두 교체하려면 :%s/regexp/replacement/g를 입력하고 엔터 키를 누른다(대개 행보다는 파일에서 텍스트를 교체하려는 경우가 많다). 파일 내에서 일치하는 패턴을 모두 교체하면서도 교체하려는 패턴마다 확인을 받으려면 :%s/regexp/replacement/gc를 입력한 후 엔터 키를 누른다(여기서 c는 "confirm"을 뜻한다).

들여쓰기

vi는 자동 들여쓰기를 지원한다. 프로그램 원시 코드를 편집할 때 편리한 기능이다. (vim과 같은) 최근 vi 버전 대부분은 (.c 파일과 같은) 소스 파일을 편집할 때 자동 들여쓰기 모드를 자동으로 활성화한다. 자동 들여쓰기 모드가 활성화된 상태에서 ^d(컨트롤-d)를 입력하면 현재 들여쓰기가 한 단계 왼쪽으로 밀린다. ^t(컨트롤-t)를 입력하면 현재 들여쓰기가 한 단계 오른쪽으로 밀린다. 자동 들여쓰기 모드를 수동으로 활성화하려면 :se autoindent라는 ex 명령을 사용한다. 또한 들여쓰기 탭 크기를 변경하려면 :set tabstop 명령을 사용한다. :set tabstop=4가 가장 많이 쓰이는 설정이다.




컨닝페이퍼

컨닝페이퍼


출처 : http://www.ibm.com/developerworks/kr/library/tutorial/l-vi/index.html




 



'개발 > Linux' 카테고리의 다른 글

linux - netstat  (0) 2011.02.14
linux에 mysql 설치하기  (0) 2010.01.05
[linux] 시스템(하드웨어) 사양 보기  (0) 2009.02.18
[linux] Tomcat 설치  (0) 2009.02.15
[linux] JAVA 설치  (0) 2009.02.15