본문 바로가기
카테고리 없음

리눅스 기초 | 12-2. vi 입문

by 객잔주인 2024. 6. 7.

해당 포스팅은 William E. Shotts, Jr.의 오픈소스 저서 The Linux Command Line(링크)를 번역한 내용입니다


기본 편집

대부분의 편집은 텍스트 삽입, 텍스트 삭제, 텍스트 복사 및 붙여넣기와 같은 기본적인 몇 가지 동작으로 이루어집니다. $\texttt{vi}$도 당연히 $\texttt{vi}$만의 방법으로 이런 동작들을 지원합니다. 또한 $\texttt{vi}$는 제한된 되돌리기도 지원합니다. 커맨드 모드에서 "u" 키를 누르면 마지막 수정사항을 되돌릴 수 있습니다. 편집을 진행하다보면 매우 유용하게 사용할 수 있을 것입니다.

텍스트 추가하기

$\texttt{vi}$에서 입력 모드에 들어가는 방법은 여러가지가 있습니다. $\texttt{i}$를 사용해 입력모드에 들어가는 방법은 이미 배웠었죠.

 

$\texttt{foo.txt}$로 되돌아가 보겠습니다.

이 문장 뒤에 텍스트를 추가하고 싶은 경우에 $\texttt{i}$ 커맨드가 원하는 동작을 수행하지 않는다는 것을 알 수 있을 것입니다. 왜냐하면 $\texttt{i}$ 커맨드로는 커서를 줄의 마지막 문자 너머로 보낼 수 없기 때문이죠. $\texttt{vi}$는 텍스트를 추가하기 위한 커맨드를 제공합니다. "덧붙이다" 라는 뜻의 영단어 "append"의 앞 글자를 따서 $\texttt{a}$ 커맨드라고 합니다. 커서를 줄의 끝에 위치 시킨 뒤 $\texttt{a}$를 입력하면 커서가 문장 너머로 이동하면서 $\texttt{vi}$가 입력 모드로 들어가게 됩니다. 이제 텍스트를 추가할 수 있습니다. (역자: 저자의 설명이 불명확해 오해가 생길 수 있어 설명을 추가합니다: 위와 같이 문장이 쓰여있을 때 기본적으로 커서는 마침표 아래에 위치하는데 커맨드 모드에서는 마침표 뒤로 커서를 이동할 수 없습니다. 따라서 이 상태에서 $\texttt{i}$ 커맨드로 편집을 시작하게 되면 $\texttt{dog}$와 마침표 $\texttt{.}$ 사이에 새로운 텍스트가 추가됩니다. 같은 상황에서 $\texttt{a}$ 커맨드를 사용하면 커서가 마침표 뒤쪽으로 이동하면서 입력 모드가 시작되어 새로 타이핑하면 마침표 뒤에 텍스트가 추가된다는 설명입니다. 그러나 $\texttt{i}$ 커맨드를 사용해도 입력 모드에 진입한 후에 커서를 움직여주기만 하면 원하는 위치에서 타이핑을 시작할 수 있습니다.)

입력을 마쳤으면 $\texttt{Esc}$ 키로 입력 모드에서 나올 수 있습니다.

 

거의 모든 상황에서 줄 끝에 텍스트를 추가하게 되므로 $\texttt{vi}$는 이를 위한 단축키를 가지고 있습니다. $\texttt{A}$ 커맨드를 사용하면 커서를 줄 끝으로 이동시킨 뒤 입력 모드에 들어갈 수 있습니다. 파일에 텍스트 몇 줄을 더 추가해보겠습니다.

 

먼저, 0을 입력(커맨드 모드에서)하여 줄의 시작으로 커서를 옮기세요. 그 다음 $\texttt{A}$를 입력해 다음과 같이 텍스트를 추가합니다:

마찬가지로 $\texttt{Esc}$ 키를 눌러 입력 모드에서 나오세요.

 

보다시피 "A" 커맨드는 커서를 줄의 마지막으로 옮긴 후에 입력 모드를 시작하기 때문에 더 유용합니다.

 

(역자: 정리하자면, $\texttt{i}$ 커맨드는 커서가 위치한 곳에서 편집이 시작되고, $\texttt{a}$ 커맨드는 커서를 한 칸 우측으로 옮긴 후 편집이 시작되고, $\texttt{A}$ 커맨드는 커서를 해당 줄의 마지막으로 이동시킨 후 편집이 시작됩니다.)

새로운 줄 삽입하기

텍스트를 추가하는 또 다른 방식은 새로운 줄을 "open"하는 것입니다. 이는 기존의 두 줄의 텍스트 사이에 새로운 빈 공간을 만들고 입력 모드로 들어갑니다. 이 명령에는 두 가지 형태가 있습니다.

 

Table 12-2: Line Opening Keys

새로운 줄을...
$\texttt{o}$ 현재 줄의 아래에 생성
$\texttt{O}$ 현재 줄의 위에 생성

 

"Line 3"에 커서를 두고 $\texttt{o}$(소문자)를 입력해보세요.

세 번째 줄 아래에 새로운 줄이 생기면서 입력 모드에 들어갔습니다. $\texttt{Esc}$ 키를 눌러 입력모드에서 나오세요. $\texttt{u}$ 키를 눌러 방금 했던 작업을 되돌릴 수 있습니다.

 

이번엔 $\texttt{O}$ 키를 눌러 커서의 윗줄에 새로운 줄을 만들어보세요:

마찬가지로 $\texttt{Esc}$ 키를 눌러 입력 모드에서 나온 후 $\texttt{u}$를 눌러 작업을 되돌리세요.

텍스트 삭제

$\texttt{vi}$는 텍스트를 삭제하는 여러 다른 방식을 제공합니다. 먼저 $\texttt{x}$ 커맨드는 커서가 위치한 곳의 문자 하나를 삭제합니다. $\texttt{x}$ 앞에 숫자를 입력해 몇 개의 문자를 지울지 명시할 수 있습니다. $\texttt{d}$ 커맨드는 더 다용도의 커맨드 입니다. $\texttt{x}$ 처럼 앞에 숫자를 입력해 삭제를 실행할 횟수를 명시할 수도 있습니다. 거기에 더해 $\texttt{d}$는 항상 뒤에 다른 문자를 입력해 삭제할 범위를 명시합니다. 아래 표에서 용법을 확인해보세요:

 

Table 12-3: 텍스트 삭제 커맨드

커맨드 삭제 범위
$\texttt{x}$ 현재 문자
$\texttt{3x}$ 현재 문자와 그 뒤 두 개 문자
$\texttt{dd}$ 현재 줄
$\texttt{5dd}$ 현재 줄과 다음 네 줄
$\texttt{dW}$ 현재 커서 위치부터 다음 단어 앞까지
$\texttt{d\$}$ 현재 커서 위치부터 현재 줄 끝까지
$\texttt{d0}$ 현재 커서 위치부터 현재 줄 맨 앞까지
$\texttt{d^}$ 현재 커서 위치부터 현재 줄의 공백이 아닌 첫 번째 문자까지
$\texttt{dG}$ 현재 줄에서 파일 마지막까지
$\texttt{d20G}$ 현재 줄에서 20번째 줄까지

 

다시 파일로 돌아와서, 커서를 첫 번째 줄에 있는 단어 $\texttt{It}$에 위치시키세요. $\texttt{x}$ 키를 여러 번 눌러 현재 줄의 뒷 문자들을 모두 삭제 해보세요. 그리고 $\texttt{u}$ 키를 여러번 눌러 다시 원상복구 시켜보세요.

Note: 실제 $\texttt{vi}$는 한 단계의 되돌리기만 지원합니다. 즉, $\texttt{u}$를 두 번 누르면 되돌리기 했던 작업이 다시 되돌리기 되어 원상 복구됩니다. $\texttt{vim}$은 여러 단계의 되돌리기를 지원합니다.

다시 삭제를 해보겠습니다. 이번에는 $\texttt{d}$ 커맨드를 써보겠습니다. 커서를 다시 $\texttt{It}$에 위치시킨 후 $\texttt{dW}$ 커맨드를 입력해보세요.

$\texttt{d\$}$를 입력해 현재 커서 위치부터 줄의 마지막 까지 삭제해보세요.

$\texttt{dG}$를 입력해 현재 줄부터 파일 끝까지 삭제해보세요.

$\texttt{u}$를 눌러 다시 원상복구 시켜주세요.

텍스트 잘라내기, 복사하기, 붙여넣기

$\texttt{d}$ 커맨드는 사실 텍스트를 삭제할 뿐만 아니라 "잘라내기"도 합니다. $\texttt{d}$ 커맨드를 사용할 때마다 삭제된 부분이 붙여넣기 버퍼(paste buffer, 클립보드와 동일한 개념)에 복사되어 이후에 $\texttt{p}$ 커맨드를 사용해 커서 뒤에 붙여넣기 하거나, $\texttt{P}$ 커맨드를 사용해 커서 앞에 붙여넣기 할 수 있습니다.

 

$\texttt{y}$ 커맨드는 텍스트를 복사(copy, yank)하는 데에 사용되며, $\texttt{d}$ 커맨드와 유사하게 작동합니다.

 

Table 12-4: 복사 커맨드

커맨드 복사 범위
$\texttt{yy}$ 현재 줄
$\texttt{5yy}$ 현재 줄과 아래 네 줄
$\texttt{yW}$ 현재 커서 위치부터 다음 단어 앞까지
$\texttt{y\$}$ 현재 커서 위치부터 현재 줄 끝까지
$\texttt{y0}$ 현재 커서 위치부터 현재 줄 맨 앞까지
$\texttt{y^}$ 현재 커서 위치부터 현재 줄의 공백이 아닌 첫 번째 문자까지
$\texttt{yG}$ 현재 줄에서 파일 마지막까지
$\texttt{y20G}$ 현재 줄에서 20번째 줄까지

 

복사-붙여넣기를 실습해보겠습니다. 커서를 첫째 줄에 위치시킨 후 $\texttt{yy}$ 커맨드를 사용해 줄 전체를 복사하세요. 다음, 커서를 마지막 줄로 옮기고($\texttt{G}$) $\texttt{p}$를 입력해 다음 줄에 붙여넣기 합니다.

$\texttt{u}$ 커맨드로 되돌린 후, 마지막 줄에 커서를 둔 상태에서 이번에는 대문자 $\texttt{P}$ 커맨드를 사용해 윗줄에 붙여넣기 해보세요.

Table 12-4에 있는 다른 $\texttt{y}$ 커맨드들도 사용하면서 $\texttt{p}$와 $\texttt{P}$ 커맨드의 용법을 익혀보세요. 모두 마친 후에는 다음 실습을 위해 원래 상태로 복구시켜 주세요.