콘텐츠로 이동

VI 텍스트 편집기

이 문서에서는 VIsual 편집기로 작업하는 방법을 배웁니다.


목표: 이 문서에서는 미래의 Linux 관리자가 다음을 수행하는 방법을 배웁니다:

✔ VI 편집기의 기본 명령을 사용합니다.
✔ VI 편집기로 텍스트를 수정합니다.

🏁 사용자 명령어, linux

지식: ⭐
복잡성: ⭐ ⭐

소요 시간: 20분


Visual(VI)은 Linux에서 매우 인기 있는 텍스트 편집기로, 그 한정된 사용성에도 불구하고 많이 사용됩니다. 실제로 VI는 텍스트 모드로 완전히 작동하는 편집기입니다. 각 동작은 키보드의 키나 전용 명령으로 수행됩니다.

매우 강력한데다가 기본 응용 프로그램에 대해서는 전반적으로 최소한으로 구성되어 있어 매우 실용적입니다. 따라서 시스템 오류 발생 시에도 접근할 수 있습니다. 보편성(모든 Linux 배포판과 Unix에 있음)은 관리자에게 중요한 도구입니다.

기능은 다음과 같습니다:

  • 텍스트 삽입, 삭제, 수정
  • 단어, 줄 또는 텍스트 블록을 복사
  • 문자를 검색 및 대체

vi 명령어

vi 명령을 실행하면 VI 텍스트 편집기가 열립니다.

vi [-c command] [file]

예시:

$ vi /home/rockstar/file
옵션 정보
-c command 시작할 때 명령을 지정하여 VI 실행

경로에 해당하는 위치에 파일이 존재하는 경우 VI는 해당 파일을 읽고 명령 모드로 진입합니다.

파일이 존재하지 않는 경우 VI는 빈 파일을 열고 빈 페이지가 화면에 표시됩니다. 파일을 저장하면 해당 명령으로 지정된 이름을 사용합니다.

파일 이름을 지정하지 않고 vi 명령을 실행하는 경우 VI는 빈 파일을 열고 빈 페이지가 화면에 표시됩니다. 파일을 저장하려면 파일 이름을 입력해야 합니다.

vim 에디터는 VI의 인터페이스와 기능을 많이 개선했습니다.

vim [-c command] [file]

이러한 개선 사항 중 하나는 사용자가 쉘 스크립트 또는 구성 파일을 편집하는 데 매우 유용한 구문 강조 기능입니다.

세션 동안 VI는 사용자가 수행한 모든 변경 사항을 기록하는 버퍼 파일을 사용합니다.

참고

작업을 저장하기 전까지는 원본 파일이 변경되지 않습니다.

시작 시 VI는 commands(명령) 모드로 설정됩니다.

!!! !!!

텍스트 줄은 <kbd>ENTER</kbd>키를 눌러 종료되지만, 화면이 충분히 넓지 않으면 VI는 기본적으로 _wrap_ 구성인 자동 줄 바꿈을 만듭니다. 이러한 줄 바꿈은 필요하지 않을 수 있습니다. _nowrap_ 구성입니다.

VI를 종료하려면 명령 모드에서 :을 누르고 다음과 같이 입력합니다:

  • 저장하지 않고 종료하려면 q를 입력합니다(quit);
  • 작업을 저장하려면 w를 입력합니다(write);
  • 저장하고 종료하려면 wq (write quite) 또는 x (eXit)를 입력합니다.

명령 모드에서 대문자 상태의 Z 키를 두 번 연속으로 클릭하여 저장하고 종료합니다.

확인 없이 강제 종료하려면 이전 명령에 !을 추가해야 합니다.

주의

정기적인 백업은 없으므로 작업을 정기적으로 저장해야 합니다.

작동 모드

VI에는 다음과 같은 3가지 작동 모드가 있습니다:

  • command 모드
  • insertion 모드
  • ex 모드

VI의 원리는 명령모드와 삽입모드를 번갈아 사용하는 것입니다.

세 번째 모드인 ex은 이전 텍스트 편집기의 footer 명령 모드입니다.

Command 모드

이 모드는 VI가 시작될 때 기본 모드입니다. 다른 모드에서 액세스하려면 단순히 ESC 키를 누르면 됩니다.

이때 모든 키보드 입력이 명령으로 해석되고 해당 작업이 실행됩니다. 이러한 명령어는 기본적으로 텍스트(복사, 붙여넣기, 실행 취소 등) 를 편집하는 명령어입니다.

화면에 명령이 표시되지 않습니다.

Insert 모드

이것은 텍스트 수정 모드입니다. command 모드에서 삽입 모드로 전환하려면 모드 변경 외에 작업을 수행하는 특수 키를 눌러야 합니다.

텍스트는 직접 파일에 입력되는 것이 아니라 메모리의 버퍼 영역에 입력됩니다. 변경 사항은 파일이 저장될 때에만 적용됩니다.

Ex 모드

이것은 파일 수정 모드입니다. 먼저 command 모드로 전환한 후, : 문자로 시작하는 ex 명령을 입력해야 합니다.

명령은 ENTER 키를 눌러 확인됩니다.

커서 이동하기

command 모드에서 커서를 이동하는 방법에는 여러 가지가 있습니다.

텍스트 환경에서는 마우스가 활성화되지 않지만 그래픽 환경에서는 문자별로 이동할 수 있으며, 빠르게 이동하기 위한 단축키도 있습니다.

VI는 커서를 이동한 후에도 command 모드로 유지됩니다.

커서는 원하는 문자 아래에 배치됩니다.

문자로부터

  • 왼쪽으로 하나 또는 n개의 문자를 이동:

, n, l or nl

  • 오른쪽으로 하나 또는 n개의 문자를 이동:

, n, l or nl

  • 위로 하나 또는 n개의 문자를 이동:

, n, k or nk

  • 아래로 하나 또는 n개의 문자를 이동:

, n, j or nj

  • 줄 끝으로 이동:

$ or END

  • 줄의 시작 부분으로 이동:

0 or POS1

단어의 첫 번째 문자부터

단어는 문자나 숫자로 구성됩니다. 문장부호와 아포스트로피가 단어를 구분합니다.

커서가 단어 중간에 있는 경우, w는 다음 단어로 이동하고 b는 단어의 시작으로 이동합니다.

라인이 끝나면 VI는 자동으로 다음 줄로 이동합니다.

  • 오른쪽으로 하나 또는 n단어를 이동:

w or nw

  • 왼쪽으로 하나 또는 n 단어를 이동:

b or nb

줄의 아무 위치에서

  • 텍스트의 마지막 줄로 이동:

G

  • n번째 줄로 이동:

nG

  • 화면의 첫 번째 줄로 이동:

H

  • 화면의 가운데 줄로 이동:

M

  • 화면의 마지막 줄로 이동:

L

텍스트 삽입

command 모드에서는 텍스트를 삽입하는 여러 가지 방법이 있습니다.

VI는 이러한 키 중 하나를 입력한 후 insert 모드로 전환합니다.

참고

VI가 insertion 모드로 전환됩니다. 따라서 command 모드로 돌아가려면 ESC 키를 누르십시오.

문자와 관련하여

  • 문자 앞에 텍스트 삽입:

i (insert)

  • 문자 뒤에 텍스트 삽입:

a (append)

줄과 관련하여

  • 줄의 시작 부분에 텍스트 삽입:

I

  • 줄의 끝에 텍스트 삽입:

A

텍스트와 관련하여

  • 줄 앞에 텍스트 삽입:

O

  • 줄 뒤에 텍스트 삽입:

o

문자, 단어 및 줄

VI는 다음을 관리하여 텍스트 편집을 허용합니다:

  • 문자,
  • 단어,
  • 줄.

각각의 경우 다음을 수행할 수 있습니다:

  • 삭제,
  • 수정,
  • 복사,
  • 잘라내기,
  • 붙여넣기.

이러한 작업은 command 모드에서 수행됩니다.

문자

  • 하나 또는 n개의 문자 삭제:

x or nx

  • 문자를 다른 문자로 교체:

rcharacter

  • 둘 이상의 문자를 다른 문자로 교체.

RcharactersESC

참고

R 명령은 insert 모드의 일종인 replace 모드로 전환됩니다.

단어

  • 하나 또는 n개의 단어 삭제(잘라내기):

dw 또는 ndw

  • 하나 또는 n개의 단어 복사:

yw 또는 nyw

  • 커서 뒤에 단어를 한 번 또는 n번 붙여넣기.

p 또는 np

  • 커서 앞에 단어를 한 번 또는 n번 붙여넣기:

P 또는 nP

  • 한 단어 바꾸기:

cwwordESC

!!! !!!

잘라내기(또는 복사)할 단어의 첫 번째 문자 아래에 커서를 위치시켜야 합니다. 그렇지 않으면 VI는 커서와 끝 사이의 단어 부분만 잘라내기(또는 복사)합니다.
단어를 삭제하는 것은 잘라내는 것입니다. 이후에 붙여넣지 않으면 버퍼가 비워지고 단어가 삭제됩니다.

  • 한 줄 또는 n개의 줄 삭제(잘라내기):

dd 또는 ndd

  • 한 줄 또는 n개의 줄 복사:

yy 또는 nyy

  • 현재 줄 뒤에 한 번 또는 n번 복사하거나 삭제한 내용을 붙여넣습니다.

p 또는 np

  • 복사하거나 삭제한 내용을 현재 줄 앞에 한 번 또는 n번 붙여넣습니다.

P 또는 nP

  • 줄의 시작 부분에서 커서까지 삭제(잘라내기):

d0

  • 커서에서 줄 끝까지 삭제(잘라내기):

d$

  • 줄의 처음부터 커서까지 복사:

y0

  • 커서에서 줄 끝까지 복사:

y$

  • 현재 줄에서 텍스트를 삭제(잘라내기):

dL 또는 dG

  • 현재 줄에서 텍스트를 복사:

yL 또는 yG

작업 취소

  • 마지막 작업 실행 취소:

u

  • 현재 줄에서 작업을 실행 취소:

U

실행 취소를 취소

  • 실행 취소를 취소하기

Ctrl+r

EX 명령

Ex 모드를 사용하면 파일에 대한 작업(저장, 레이아웃, 옵션 등)을 할 수 있습니다. 검색 및 바꾸기 명령이 입력되는 Ex 모드이기도 합니다. 명령은 페이지 하단에 표시되며 ENTER 키로 확인해야 합니다.

Ex 모드로 전환하려면 command 모드에서 :를 입력합니다.

파일 줄 번호

  • 번호 매기기 표시/숨기기:

:set nu 또는 더 긴 :set number

:set nonu 또는 더 긴 :set nonumber

문자열 검색

  • 커서에서 문자열을 검색:

/string

  • 커서 앞에서 문자열을 검색:

?string

  • 일치하는 다음 문자열을 찾기:

n

  • 일치하는 이전 문자열 찾기:

N

VI에서 검색을 용이하게 하는 와일드카드가 있습니다.

  • [] : 가능한 값이 지정된 단일 문자 또는 문자 범위를 검색합니다.

예시:

/[Ww]ord : word 또는 Word 검색

/[1-9]word : 1word, 2wordxword 검색, 여기서 x는 숫자입니다.

  • ^ : 문자로 시작하는 행을 검색합니다.

예시:

/^Word

  • $ : 문자로 끝나는 줄을 검색합니다.

예시:

/Word$

  • . : 줄바꿈 문자를 제외한 모든 단일 문자를 검색합니다.

예시:

/W.rd : Word, Ward … 검색

  • * : 이전 문자가 일치하는 횟수, 0회 또는 임의의 횟수입니다.

예시:

/W*d

참고: 문자열을 일치시킬 때 대소문자(임시)를 무시하려면 :set ic를 입력하십시오.

문자열 바꾸기

텍스트의 첫 번째 줄부터 마지막 줄까지, 검색된 문자열을 지정된 문자열로 대체합니다:

:1,$ s/search/replace

참고: :0,$s/search/replace를 사용하여 파일의 절대 시작 위치를 지정할 수도 있습니다.

n 줄부터 m 줄까지 검색된 문자열을 지정된 문자열로 대체합니다:

:n,m s/search/replace

기본적으로 각 줄에서 처음 발견된 항목만 교체됩니다. 각 항목을 강제로 바꾸려면 명령 끝에 /g를 추가해야 합니다.

:n,m s/search/replace/g

전체 파일을 찾아 검색된 문자열을 지정된 문자열로 바꿉니다.

:% s/search/replace

지정된 행을 삭제합니다.

  • 빈 줄 삭제

:g/^$/d

  • 줄 번호가 n에서 m인 줄 삭제

:n,md

  • 문자열이 있는 줄 삭제

:g/string/d

  • 문자열이 포함되지 않은 줄 삭제

:g!/string/d

  • 으로 시작하는 모든 줄 삭제

:g/^#/d

여기서 gglobal을 의미합니다.

파일 작업

  • 파일 저장:

:w

  • 다른 이름으로 저장:

:w file

  • 다른 파일의 n 줄에서 m 줄로 저장:

:n,m w file

  • 파일의 마지막 레코드를 다시 로드:

e!

  • 커서 뒤에 다른 파일의 내용을 붙여넣기:

:r file

  • 저장하지 않고 파일 편집 종료:

:q

  • 세션 중에 수정되었지만 저장되지 않은 파일 편집 종료:

:q!

  • 파일 종료 및 저장:

:wq 또는 :x

기타 기능

세션에 대해 로드할 옵션을 지정하여 VI를 실행할 수 있습니다. 이렇게 하려면 -c 옵션을 사용해야 합니다.

$ vi -c "set nu" /home/rockstar/file

사용자의 로그인 디렉토리에 있는 .exrc 파일에 Ex 명령을 입력하는 것도 가능합니다. 각 VI 또는 VIM 시작 시 명령을 읽고 적용합니다.

vimtutor 명령

VI 사용법을 배우기 위한 튜토리얼이 있습니다. vimtutor 명령으로 접근할 수 있습니다.

$ vimtutor