본문 바로가기

CentOS/Study

[Study26]vi 효율적인 편집을 위한 팁과 요령 - 입력모드 / 명령모드 / 최하위행모드

반응형

Vi 편집기는 리눅스에서 가장 많이 사용되는 CLI(Command Line Interface) 텍스트 편집기 중 하나입니다.

Vi는 명령어를 입력하는 모드와 입력 모드로 나뉘며, 이들 모드에 따라 텍스트를 편집할 수 있습니다.

명령행 모드, 입력행 모드, 최하위행(라인) 모드가 Vi 편집기에서 지원되며, 이들 모드를 통해 파일의 내용을 효율적으로 편집할 수 있습니다. 명령행 모드는 편집 작업 및 기타 명령어를 입력할 수 있는 모드이며, 입력행 모드는 입력만 할 수 있는 모드입니다. 최하위행(라인) 모드는 저장 및 기타 검색 작업 등을 할 수 있는 모드입니다.

명령행 모드에서는 키보드의 키를 기능키로 사용하며, 입력행 모드에서는 키보드의 키를 텍스트로 입력합니다. 마지막으로, 최하위행 모드에서는 ex 명령어를 사용하여 파일을 저장하거나 검색 작업을 수행할 수 있습니다.

Vi 편집기의 이러한 다양한 모드를 사용하여 사용자는 텍스트 편집 작업을 훨씬 더 효과적으로 수행할 수 있습니다. 명령행 모드에서는 자동완성 기능을 사용하여 빠르게 명령어를 입력할 수 있으며, 입력행 모드에서는 복사 및 붙여넣기 기능을 사용하여 텍스트를 더 쉽게 작성할 수 있습니다. 또한, 최하위행 모드에서는 검색 및 치환 기능을 사용하여 파일 내용을 더 쉽게 찾을 수 있습니다.

이러한 편리한 기능을 갖춘 Vi 편집기는 리눅스 사용자들에게 매우 인기 있는 텍스트 편집기 중 하나입니다.

 

Vi는 명령행 모드와 입력행 모드로 나뉘며, 각 모드에서 다음과 같이 모드를 변경할 수 있습니다.

    명령행 모드에서 입력행 모드로 변경하려면 'i'를 입력하십시오.

    입력행 모드에서 명령행 모드로 변경하려면 'Esc' 키를 누르십시오.

    명령행 모드에서 최하위행(라인) 모드로 변경하려면 ':'를 입력하십시오.

    최하위행(라인) 모드에서 명령행 모드로 변경하려면 'Esc' 키를 누르십시오.

 

이렇게 모드를 변경하여 Vi 편집기를 사용하면, 파일을 더 효율적으로 편집할 수 있습니다.

 

입력 모드(Input Mode)

vi 편집기를 실행하면 기본 모드는 명령행 모드입니다. 입력을 하기 위해서는 명령행 모드에서 입력행 모드로 전환해야 합니다. 입력 모드로 전환하려면 다음과 같은 문자를 사용합니다.

 

Mode 설명
i 현재 커서 위치로부터 입력합니다.
I 현재 커서가 있는 행의 처음부터 입력합니다.
a 현재 커서 위치 이후부터 입력합니다.
A 현재 커서가 있는 행의 마지막부터 입력합니다.
o 현재 커서가 있는 아래행부터 입력합니다.
O 현재 커서가 있는 위행부터 입력합니다.

 

입력 모드에서는 파일을 편집하며, 명령행 모드에서는 파일을 저장하거나 종료하거나, 검색 및 치환 등의 기능을 수행합니다.

추가로, vi에서는 명령행 모드에서 :wq, :q, :q! 등의 명령어를 사용하여 파일을 저장하고 종료할 수 있습니다.

# vi filename
Input : k, j

Input : i

File Contents 
============================
hello
hello linux
Welcome To My Server!!!
hello linux
soldesk linux CentOS
Have a Good Time !!

============================

2 line : linux -> liNux

move -> delete -> insert -> save & quit

(1). move
h, j, k, l
← ↓ ↑ →

(2). delete
x, dd

(3). input
i

(4). save & quit
shift + :

: w!
: wq      /* w: write, q: quit */
: q!
: wq!

(5). verification
[TERM1]
# vi filename 

[TERM2]
# cd /test 
# cp /etc/services /test 
# vi services

: set number   (: set nu) 파일의 LINE번호를 붙여 표시해준다
: set nonumber (: set nonu)

: 30     (30G)    nG특정 LINE으로 이동한다
/ftp -> n -> N

vi 편집기를 실행하면 기본적으로 커멘드 모드로 시작됩니다. 텍스트를 입력하려면 삽입 모드로 전환해야 합니다. "i" 키를 누르면 삽입 모드로 전환됩니다. 다음은 삽입 모드로 전환하는 다른 방법입니다:

 

모드 설명
i 현재 커서 위치에 입력합니다
I 현재 줄의 처음에 입력합니다
a 현재 커서 위치 이후에 입력합니다
A 현재 줄의 끝에 입력합니다
o 다음 줄에 입력합니다
O 이전 줄에 입력합니다

 

삽입 모드로 전환하면 화면에 입력한 텍스트가 나타납니다. 화살표 키를 사용하여 커서를 이동하고, 백스페이스 키를 사용하여 문자를 삭제할 수 있습니다. 작업을 완료하면 "Esc" 키를 눌러 커멘드 모드로 전환할 수 있습니다.

커멘드 모드에서 사용할 수 있는 유용한 명령어는 다음과 같습니다:

 

명령어 설명
:w 파일 저장
:wq 파일 저장 및 종료
:q 저장하지 않고 종료
:q! 변경 사항이 있더라도 저장하지 않고 종료

 

삽입 모드 없이 파일 내에서 이동하려면 다음 명령어를 사용할 수 있습니다:

 

명령어 설명
h 왼쪽으로 이동
j 아래쪽으로 이동
k 위쪽으로 이동
l 오른쪽으로 이동
G 파일의 끝으로 이동
gg 파일의 시작으로 이동
:n n번째 줄로 이동

 

다음 명령어를 사용하여 텍스트를 삭제할 수도 있습니다:

 

명령어 설명
x 현재 문자를 삭제합니다
dd 현재 줄을 삭제합니다

 

명령 모드(Command Mode)

명령행 모드는 VI 에디터에서 처음 시작되는 모드입니다. 이 모드에서는 명령어를 사용하여 파일을 편집하고 저장할 수 있습니다. 명령행 모드에서 사용할 수 있는 명령어에는 이동, 삭제, 되돌리기, 라인 결합, 검색 및 대체 등이 있습니다. 명령행 모드에서 명령어를 실행하려면 Esc 키를 눌러 명령행 모드로 이동한 후 ":" (콜론)을 입력하십시오. 명령을 실행하면 명령행 모드에서 빠져나와 편집 모드로 돌아갑니다.

 

이동(Move)

좌우 이동:

  • h: 현재 위치에서 한 문자 왼쪽으로 이동(←)
  • l: 현재 위치에서 한 문자 오른쪽으로 이동(→)
  • w: 현재 위치에서 한 단어 오른쪽으로 이동
  • b: 현재 위치에서 한 단어 왼쪽으로 이동

상하 이동:

  • j: 현재 위치에서 한 문자 아래로 이동(↓), 다음 라인으로 이동
  • k: 현재 위치에서 한 문자 위로 이동(↑), 이전 라인으로 이동

라인 이동:

  • 0(^): 현재 라인의 처음 문자(라인의 처음)으로 이동
  • $: 현재 라인의 마지막 문자(라인의 마지막)으로 이동
  • H: 현재 페이지의 가장 첫번째 줄로 이동
  • L: 현재 페이지의 가장 마지막 줄로 이동
  • 1G: 문서의 첫 번째 라인으로 이동 (gg)
  • G: 문서의 마지막 라인으로 이동

페이지 이동:

  • <CTRL + F>: 현재 위치에서 다음 페이지로 이동
  • <CTRL + B>: 현재 위치에서 이전 페이지로 이동

[참고]

  • :5 (혹은 :10) : 문서의 5 (혹은 10) 번째 라인으로 이동
  • :5G (혹은 :10G) : 문서의 5 (혹은 10) 번째 라인으로 이동

삭제**(Delete)**

  • 좌우 삭제:
    • x: 현재 커서 한 글자 삭제
    • dw: 현재 커서 앞의 한 단어 삭제
    • d0/d^: 현재 커서부터 라인의 처음까지 삭제
    • d$: 현재 커서부터 라인의 마지막까지 삭제
  • 상하 삭제:
    • dd: 현재 라인 삭제
    • 3dd: 현재 커서 라인을 포함해서 아래로 3개 라인 삭제
    • :1,3d: 1번째 라인부터 3번째 라인까지 삭제
    • dG: 현재 커서 라인부터 문서 마지막까지 삭제
    • d1G: 현재 커서 라인부터 문서 처음까지 삭제
    •  

되돌리기(Undo)

  • u: 바로 이전 상태로 되돌림
  • U: 라인 전체에 대해 이전 상태로 되돌림

 

라인 결합(Join Line)

라인 결합은 현재 라인에 아래 라인의 내용을 붙이는 작업입니다.

J를 입력하여 현재 라인에 아래 라인을 붙일 수 있습니다.

# Example
This is the first line.
This is the second line.

# Step 1
Move the cursor to the first line.
This is the first line.
This is the second line.

# Step 2
Press J to join the first and second line.
This is the first line. This is the second line.

 

치환(Replace)

현재 위치한 글자를 대치할 때는 r를, ESC키를 누르기 전까지 계속해서 글자를 대치할 때는 R을 사용합니다.

# Replace
The quick brown fox jumps over the lazy dog.
       ^     ^    ^    ^    ^    ^    ^
       r     r    r    R    R    R    R

# Result
The quack brown fox jumps over the lazy dog.

 

검색/바꾸기(Search & Replace)

검색하고 바꾸고 싶은 문자열을 :%s/<찾을문자열>/<바꿀문자열>/g와 같은 형식으로 입력합니다.

# Search & Replace
The quick brown fox jumps over the lazy dog.
:%s/fox/cat/g

# Result
The quick brown cat jumps over the lazy dog.

 

최하위행(라인) 모드(Last Line Mode)

복사/붙이기(Copy/Yank & Paste)

복사: yank (yy)

  • 현재 커서가 위치한 라인을 복사할 때는 yy를 입력합니다.
  • 현재 위치한 라인을 포함하여 하위의 3개의 라인을 복사할 때는 3yy를 입력합니다.
  • 예시: 현재 커서가 위치한 라인을 복사하려면, 커서가 해당 라인에 위치한 상태에서 yy를 입력합니다.

붙이기: paste (p)

  • 현재 커서 아래에 붙이려면 p를 입력합니다.
  • 현재 커서 위에 붙이려면 P를 입력합니다.
  • 예시: 복사한 라인을 현재 커서 아래에 붙이려면, 커서를 붙여넣을 위치에 위치한 상태에서 p를 입력합니다.

다른 위치에 붙이기: copy & paste (co)

  • 첫 번째 라인부터 세 번째 라인까지를 복사하여 다섯 번째 라인 아래에 붙이려면, :1,3 co 5를 입력합니다.
  • 예시: 1번째 라인부터 3번째 라인을 복사하여 5번째 라인 아래에 붙이려면, :1,3 co 5를 입력합니다.

다른 위치로 이동하기: move (m)

  • 첫 번째 라인부터 세 번째 라인까지를 이동하여 다섯 번째 라인 아래에 위치시키려면, :1,3 m 5를 입력합니다.
  • 예시: 1번째 라인부터 3번째 라인을 이동하여 5번째 라인 아래로 위치시키려면, :1,3 m 5를 입력합니다.

다음과 같은 텍스트가 있다고 가정합니다.

Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds.

현재 커서가 위치한 라인을 복사합니다. 커서를 해당 라인에 위치한 상태에서 yy를 입력합니다.

Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds.

복사한 라인을 현재 커서 아래에 붙입니다. 커서를 붙여넣을 위치에 위치한 상태에서 p를 입력합니다.

Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds.
Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds.

첫 번째 라인부터 세 번째 라인까지를 복사하여 다섯 번째 라인 아래에 붙입니다. :1,3 co 5를 입력합니다.

Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds.
Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds.
Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds.

첫 번째 라인부터 세 번째 라인까지를 이동하여 다섯 번째 라인 아래로 위치시킵니다. :1,3 m 5를 입력합니다.

Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds.
Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds.
Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. is a family of open-source Unix-like operating systems based on the

 

검색(Search)

VI 에디터의 검색 기능은 "/" 또는 "?" 명령어를 사용하여 실행할 수 있습니다. 검색 기능을 사용할 때는 정방향 검색과 역방향 검색을 선택할 수 있습니다.

검색 기능은 VI 에디터에서 매우 중요한 기능 중 하나입니다. 텍스트 파일 내에서 특정 문자열을 찾는 데 사용됩니다. 검색 기능을 사용하여 개발자 및 시스템 관리자는 텍스트 파일에서 코드 블록, 함수, 변수, 주석 등을 빠르게 찾을 수 있습니다.

검색 기능을 실행하려면, 먼저 검색하려는 문자열을 입력한 다음 검색 방향을 선택합니다. "/" 명령어는 현재 커서 위치에서부터 문자열을 검색하며, "?" 명령어는 문서의 마지막 라인부터 문자열을 검색합니다.

검색 방법 명령어 설명

정방향 검색 /<검색어> 현재 커서 라인부터 찾으려는 검색어를 검색
역방향 검색 ?<검색어> 문서의 마지막 라인부터 찾으려는 검색어를 검색

검색 이동 명령어 설명

다음 검색 n 정방향으로 다음번째 검색
이전 검색 N 역방향으로 다음번째 검색

예를 들어, 다음과 같은 텍스트가 있다고 가정합니다.

Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds.

이 텍스트에서 "/operating"을 검색하고 다음 일치 항목으로 이동하려면 "n"을 입력합니다. 반대로, "/Linux"를 검색하고 이전 일치 항목으로 이동하려면 "N"을 입력합니다.

 

치환작업(Search & Replace)

검색 바꾸기를 위해서는 :%s/<검색문자열>/<치환문자열>/g와 같은 형식으로 입력합니다. 여기서 %는 문서 전체를 의미합니다.

먼저 hello를 HELLO로 바꾸는 예시를 들어보겠습니다. :%s/hello/HELLO/g를 입력하면 문서 전체에서 hello를 HELLO로 바꿉니다.

특정 범위 내에서 바꾸는 경우 ,<범위>를 추가합니다. 예를 들어, 1번째 줄부터 마지막 줄까지 바꾸는 경우 1,$를 추가합니다. 따라서 1,$s/hello/HELLO/g는 1번째 줄부터 마지막 줄까지 hello를 HELLO로 바꿉니다.

특정 범위 내에서 특정 단어를 바꾸는 경우 ,<범위> 다음에 /<검색 조건>을 추가합니다. 예를 들어, 5번째 줄부터 10번째 줄까지 HELLO를 hello로 바꾸는 경우 5,10s/HELLO/hello/g를 입력합니다.

문자열 내에 특수문자가 있는 경우 \\\\를 사용하여 이스케이프합니다. 예를 들어, &를 공백으로 바꾸는 경우 5,10s/\\\\&/ /를 입력합니다.

따라서, 검색 바꾸기의 예시를 다음과 같이 나누어 설명합니다.

예시 1: hello를 HELLO로 바꾸기

  1. :를 눌러 최하위행 모드로 이동합니다.
  2. :%s/hello/HELLO/g를 입력합니다.

예시 2: 1번째 줄부터 마지막 줄까지 hello를 HELLO로 바꾸기

  1. :를 눌러 최하위행 모드로 이동합니다.
  2. 1,$s/hello/HELLO/g를 입력합니다.

예시 3: 5번째 줄부터 10번째 줄까지 HELLO를 hello로 바꾸기

  1. :를 눌러 최하위행 모드로 이동합니다.
  2. 5,10s/HELLO/hello/g를 입력합니다.

예시 4: 5번째 줄부터 10번째 줄까지 &를 공백으로 바꾸기

  1. :를 눌러 최하위행 모드로 이동합니다.
  2. 5,10s/\\\\&/ /를 입력합니다.

VI 에디터에서 “<찾을 문자열>”에는 “정규 표현식”을 사용할 수 있습니다.

 

정규표현식 변경에 대한 예제

VI 에디터의 검색 및 변경 기능을 사용하여 텍스트 파일에서 코드 블록, 함수, 변수, 주석 등을 빠르게 찾을 수 있습니다. VI 에디터에서 정규표현식을 사용하여 검색바꾸기를 수행할 수도 있습니다. 정규 표현식은 검색 및 변경에 있어서 더욱 강력한 기능을 제공합니다.

다음은 VI 에디터에서 정규표현식을 사용한 변경에 대한 예시입니다.

  • 문서 전체에서 hello를 검색해서 HELLO로 변환
  • :%s/hello/HELLO/g
  • 1번째 줄부터 마지막 줄까지 hello를 HELLO로 바꾸기
  • 1,$s/hello/HELLO/g
  • 5번째 줄부터 10번째 줄까지 HELLO를 hello로 바꾸기
  • 5,10s/HELLO/hello/g
  • 5번째 줄부터 10번째 줄까지 #으로 주석 처리하기
  • 5,10s/^/#/
  • 5번째 줄부터 10번째 줄까지 주석 해제하기
  • 5,10s/^#//
  • 5번째 줄부터 10번째 줄까지 들여쓰기하기
  • 5,10s/^/ /
  • 5번째 줄부터 10번째 줄까지 내어쓰기하기
  • 5,10s/^ //

특수문자를 변경하는 방법은 특수문자 앞에 역슬래쉬를 추가하는 것입니다. 예를 들어, /를 $로 변경하려면 :%s/\\\\\\\\//\\\\\\\\$/g를 입력합니다.

 

최하위행 모드

최하위행 모드는 vi 편집기에서 명령어를 입력하는 모드 중 하나입니다. 이 모드에서는 현재 수정중인 파일의 마지막 행에 커서가 위치합니다.

이번에는 저장과 종료에 대해 알아보도록 하겠습니다.

 

저장 & 종료

저장과 종료는 vi 편집기에서 자주 사용되는 기능 중 하나입니다. 다음은 저장과 종료를 위한 명령어들입니다.

저장과 종료 명령어의 예제입니다.

  • :w (write) : 현재 파일에 저장합니다.

현재 편집 중인 파일을 저장할 때 사용합니다.

:w
  • :w filename : 파일을 지정한 이름으로 저장합니다.

현재 편집 중인 파일을 지정한 이름으로 저장할 때 사용합니다.

:w newfile.txt
  • :w! : 현재 파일에 강제로 저장합니다.

저장할 수 없는 파일을 강제로 저장할 때 사용합니다.

:w!
  • :q (quit) : 편집기를 종료합니다.

편집기를 종료할 때 사용합니다. 저장하지 않은 변경사항이 있으면 종료되지 않습니다.

:q
  • :q! : 저장하지 않고 편집기를 종료합니다.

편집기를 종료할 때 사용합니다. 저장하지 않은 변경사항이 있어도 강제로 종료합니다.

:q!
  • :wq : 저장하고 편집기를 종료합니다.

편집 중인 파일을 저장하고 편집기를 종료할 때 사용합니다.

:wq
  • :wq! : 강제로 저장하고 편집기를 종료합니다.

저장할 수 없는 파일을 강제로 저장하고 편집기를 종료할 때 사용합니다.

:wq!
  • :!cmd : 쉘 명령어를 실행합니다.

vi에서 쉘 명령어를 실행할 때 사용합니다.

:!ls

 

파일 읽기

vi 편집기에서는 파일을 읽어들이는 명령어도 제공됩니다. 파일의 내용을 현재 커서 위치에서 읽어들이는 명령어는 다음과 같습니다.

  • :r file : 커서가 위치한 줄 다음에 파일의 내용을 삽입합니다.

예를 들어, 현재 커서가 위치한 줄이 5번째 줄이고 파일 "example.txt"의 내용이 다음과 같다고 합시다.

This is some text.

그러면 다음 명령어를 실행하면

:r example.txt

현재 커서 위치 다음인 6번째 줄에 "This is some text."가 추가됩니다.

다음은 Linux VI 편집기 실행에 대한 예제입니다.

# vi 명령어를 사용하여 file.txt 파일을 엽니다.
$ vi file.txt

# 파일을 수정한 후 저장하고 종료합니다.
:wq

# 파일 내용을 확인합니다.
$ cat file.txt

# 다른 터미널에서 services.txt 파일을 엽니다.
$ vi services.txt

# 파일을 수정하지 않고 종료합니다.
:q

# 다시 file.txt 파일을 엽니다.
$ vi file.txt

# 파일을 수정한 후 강제로 저장하고 종료합니다.
:wq!

# 파일 내용을 확인합니다.
$ cat file.txt
반응형