VI 명령어 사용법 소개

vi 편집기는 Unix 및 Unix 계열 시스템에서 텍스트 편집을 위해 널리 사용되는 강력한 도구입니다.
이제 VI 명령어의 기본 사용법 및 명령어에 대해 알아보겠습니다.

1. vi 열기 및 종료

  • 파일을 편집하려면 터미널에서 vi 명령어를 사용하여 파일을 열 수 있습니다. 예를 들어, vi filename과 같이 입력합니다.
  • 편집기를 종료하려면 :q를 입력하고 엔터 키를 누릅니다. 변경 사항이 저장되지 않았을 경우 :q!를 사용하여 강제로 종료할 수 있습니다.
  • 변경 사항을 저장하고 종료하려면 :wq를 입력합니다.

2. vi 모드

VI 명령 모드와 편집 모드 가 있으며 함께 사용하여 효율적으로 텍스트를 편집할 수 있습니다. 명령 모드에서 명령을 입력하고, 편집 모드에서 실제 텍스트를 편집하는 방식으로 작업합니다. 이러한 모드 간의 전환을 통해 VI를 유연하고 강력한 편집 도구로 만들어 줍니다.
또한 명령 라인 모드는 파일 저장 및 종료등을 실행할 수 있습니다.

명령 모드(Command mode)

  • VI 편집기를 시작하면 기본적으로 명령 모드로 시작합니다.
  • 명령 모드에서는 텍스트를 입력하는 것이 아니라 명령을 입력합니다.
  • 여러 가지 명령을 사용하여 텍스트를 편집하고, 파일을 저장하고, VI를 종료할 수 있습니다.
  • 주요 명령어는 다음과 같습니다:
    i: 현재 커서 위치에서 입력 모드로 전환합니다.
    a: 현재 커서 다음 위치에서 입력 모드로 전환합니다.
    o: 현재 줄 다음에 새로운 줄을 만들고 입력 모드로 전환합니다.
    x: 현재 커서 위치의 문자를 삭제합니다.
    dd: 현재 줄을 삭제합니다.
    yy: 현재 줄을 복사합니다.
    p: 복사한 내용을 현재 위치에 붙여넣습니다.
    :w: 파일을 저장합니다.
    :q: VI를 종료합니다.
    :q!: 변경사항을 저장하지 않고 VI를 강제 종료합니다.

입력 모드(Insert mode)

  • 입력 모드에 진입하려면 명령 모드에서 i, a, o 명령 중 하나를 사용합니다.
  • 편집 모드에서는 실제 텍스트를 입력하고 편집할 수 있습니다.
  • ESC 키를 누르면 편집 모드에서 명령 모드로 전환됩니다.

명령 라인 모드(Command-line mode)

  • :를 입력하여 전환하며, 파일 저장 및 종료 등의 명령을 실행합니다.

3. VI / VIM 명령어 모음

저장 및 종료

명령어 설명
:w  저장
:w file.txt   file.txt  파일로 저장
:w » file.txt  file.tx 파일에 덧붙여서 저장
:q  vi  종료
:q!  vi  강제 종료
ZZ  저장 후 종료
:wq!  강제 저장 후 종료
:e file.txt  file.txt 파일을 불러옴
:e  현재 파일을 불러옴
:e#  바로 이전에 열었던 파일을 불러 옴

입력모드 전환

명령어 설명
a 커서  위치  다음칸부터  입력 
A 커서 행의 맨 마지막부터 입력
i   커서의  위치에  입력               
I 커서 행의 맨 앞에서 부터 입력
o   커서의  다음행에  입력           
O 커서의 이전 행에 입력
s   커서  위치의  한글자를  지우고 입력   
cc 커서위치의 한 행을 지우고 입력

이동

명령어 설명
왼쪽으로  이동 
오른쪽으로  이동
j                       아래행으로  이동                
위  행으로  이동
w  또는  W                다음  단어의  첫  글자로  이동       
b  또는  B  이전  단어의  첫  글자로  이동
e  또는  E                단어의 마지막 글자로 이동           
<CR>  다음행 첫 첫 글자로 이동
^                       그행의  첫  글자로  이동          
그  행의  마지막  글자로  이동
+                       다음 행의 첫 글자로 이동           
–  위 행의 첫 글자로 이동
(                       이전 문장의 첫 글자로 이동          
다음 문장의 첫 글자로 이동
{                       이전 문단으로 이동               
다음 문단으로 이동
H                       커서를 화면 맨 위로 이동            
z<CR>  현재 행을 화면의 맨우로 이동
M                       커서를  화면  중안으로  이동        
z.  현재  행을  화면의  중앙으로  이동
L                       커서를 화면 최하단으로 이동         
z-  현재 행의 화면의 최하단으로 이동
[n]H                    커서를 위에서  n 행으로 이동        
[n]L  커서를 아래에서  n 행으로 이동
ctrl+u                  반 화면 위로 스크롤              
ctrl+d  반 화면 아래로 스크롤
ctrl+b                  한  화면  위로  스크롤           
ctrl+f  한  화면  아래  스크롤
gg  또는  1G              문서의  맨  처음으로  이동         
문서의  맨  마지막  행으로  이동
[n]G  또는  :[n] n 행으로  이동

삭제

명령어 설명
x  또는  dl  커서  위치의  글자  삭제
X  또는  dh  커서 바로 앞의 글자 삭제
dw  현재 위치부터 스페이스 까지 삭제
diw  현재  위치에  있는  단어  삭제
dd   커서가  있는  행을  삭제
[n]dd  현재 커서 부터 아래  n 번째 줄까지 삭제
dj  현재 커서와 아래 줄 삭제
[n]dj  현재 커서 부터 아래  n+1 번째 줄까지 삭제
dk  현재 커서와 윗로  n+1 번째 줄까지 삭제
[n]dk  현재 커서와 윗 줄 삭제
D  또는  d$  현재 커서가 있는 위치부터 행 끝까지 삭제
d0  또는  d^  현재 커서가 있는 위치부터 행 시작 까지 삭제

복사 & 붙여넣기

명령어 설명
yy  또는  Y  커서가 있는 한 행  복사
현재 커서에 붙여 넣기, 행 복사 일 경우 아래 줄에 붙여넣음.
현재 커서위치의 앞행에 붙여 넣기, 행 복사일 경우에는 윗 줄에 붙여 넣음
[n]yy  또는  [n]Y 커서가 위치한 이후로 n 행 복사
[n]p  n번 만큼 붙여넣기 반복

블록 지정

명령어 설명
v 블록 지정
V 줄단위 블록 지정
ctrl+v( 윈도우에서는 ctrl+q) 비쥬얼 블록 지정
   
블록 지정 중
y 블록 복사 하기
r 치환
d 지정 블록 지우기
U 대문자로 바꾸기
u 소문자로 바꾸기
~ 대소문자 전환
J 행 합침
: 선택 영역에 대하여 ex 명령
< 행 앞에 탭 제거
> 행 앞에 탭 삽입

문자열 탐색 및 치환

명령어 설명
/[ 문자열 ] 문자열 탐색
:s/old/new 현재 행의 처음 old 를 new 로 교체
:s/old/new/g 현재 행의 모든 old 를 new 로 교체
:10,20s/old/new/g 10 행부터 20 행까지 모든 old 를 new 로 교체
[ 블록지정중 ]:s/old/new/g   지정 블록 내에서 모든 old 를 new 로 교체
:-3,+4s/old/new/g 현재 커서 위치에서 위로 3 행 아래로 4 행까지의 old 를 new 로 교체
:%s/old/new/g 문서 전 체 에서 old 를 new 로 교체
:%s/old/new/gc 문서 전 체 에서 old 를 new 로 확인 하 며 교체
:g/pattern/s/old/new/g pattern 이 있는 모든 행의 old 를 new 로 교체

vim 정규 표현식

명령어 설명
^ 행의 첫 문자 ([] 안에서는 not 의 의미 )
$ 행의 끝
. 아무 문자나 한 문자 의미
\| or 의 의미
[ ] [] 사이의 문자 중 하나
\{min,max\} min 이상 max 이하 반복됨
* 앞의 내용이 0 번 이상 반복됨
\+ 앞의 내용이 1 번 이상 반복됨
\< 단어의 시작
\> 단어의 끝
\n 새 행 문자
\t 탭 문자

vim 확장 정규 표현 문자열

명령어 설명
\i 변수 지정에 사용되는 문자들 [0-9A-Za-z]
\I \i 와 같지만 숫자는 제외
\k keyword 로 사용하는 문자 [_.-0-9A0Za-z]
\f 파일 이름으로 사용하는 문자
\p 프린트 가능한 문자
\P \p 와 같지만 숫자는 제외
\s 공백과 탭
\S 공백 아닌 문자
\d 숫자 [0-9]
\D 숫자가 아닌 문자 [^0-9]
\x 16 진수 숫자 [0-9A-Fa-f]
\X 16 진수 숫자가 아닌 문자 [^0-9A-Fa-f]
\o 8 진수 숫자 [0-7]
\O 8 진수 숫자가 아닌 문자 [^0-7]
\w 영문 단어의 시작에 사용되는 문자 [0-9A-Za-z-]
\W 영문 단어에서 사용되지 않는 문자 [^0-9A-Za-z-]
\h 영문 단어의 시작에 사용되는 문자 [A-Za-z-]
\H 영문 단어의 시작에 사용 되지 않는 문자 [^A-Za-z-]
\a 모든 알파벳 [A-Za-z]
\A 알파벳이 아닌 문자 [^A-Za-z]
\l 소문자 [a-z]
\L 소문자가 아닌 문자 [a-z]
\u 대문자 [A-Z]
\U 대문자가 아닌 문자 [^A-Z]
\e Esc
\t Tab
\r 캐리지 리턴
\b 백스페이스
\n 새행

POSIX 문자 클래스

명령어 설명
[:alnum:] 알파벳과 숫자 [A-Za-z0-9]
[:alpha:] 알파벳 [A-Za-z]
[:cntrl:] 제어 문자
[:blank:] 탭과 공백 문자
[:digit:] 숫자 [0-9]
[:graph:] 제어문자와 공백 무자를 제외한 문자
[:lower:] 소문자 [a-z]
[:upper:] 대문자 [A-Z]
[:print:] 제어문자를 제외한 문자 , 즉 프린터 할 수 있는 문자
[:punct:] [:graph:] 문자 중 [:alnum:] 을 제외한 문자 . ex)!,@,#,$,%,^….
[:space:] 화이트스페이스 ex) 공백 , 탭 , 케리지 리턴 , 새행 , 수직탭 , 폼필드
[:xdigit:] 16 진수

파일 버퍼

명령어 설명
:files 또는 :ls 또는 :buffers 버퍼 목록 나열
:b[n] n 번 버퍼로 이동
:bd[n] 또는 :bw[n] n 번 버퍼를 삭제 (n 이 없으면 현재의 버퍼를 삭제 )
:bp[n] 이전 버퍼 로 이동 ,n 을 붙이면 n 번만큼 이전 버퍼 로 이동
:bn[n] 이후 버퍼 로 이동 ,n 을 붙이면 n 번만큼 이후 버퍼 로 이동
:sb[n] 창을 수평분할 하여 n 번 버퍼를 로드
:bf 첫 번째 버퍼로 이동
:bl 마지막 버퍼로 이동

Tab

명령어 설명
:tabnew 새로운 탭을 열기
:tabnew b.txt b.txt 가 존재하면 열고, 없으면 새로 만들어서 연다
:tabf b.txt b.txt 가 존재하면 열고, 없으면 에러 발생
:tabn[n] 다음 탭을 열기, n 을 붙이면 n 번 만큼 이동
:tabp[n] 이전 탭을 열기, n 을 붙이면 n 번 만큼 이동
:tabs 탭 목록 보기
:tabclose 탭을 닫기
:tabfirst 첫번째 탭을 열기
:tablast 마지만 탭을 열기
:tabdo %s/old/new/g 모든 탭에 적용을 원할 때 ( 예 모든탭에서 old 를 new 로 변경 )

마킹 및 마킹위치로 이동

명령어 설명
m[a-z0-9] 파일내에서 마킹 , 현재 버퍼내에서만 이동 함 예 )ma
m[A-Z] 전체영역에서 마킹 , 다른 파일로도 이동 함 .
`[A-Za-z0-9] 마킹된 위치로 돌아감 예 )`a
’ [A-Za-z0-9] 마킹된 행의 처으으로 이동함 . 예 ) ‘a
직전에 커서가 위치하던 행의 처음
직전의 커서 위치로 이동
’” 이전에 vim 으로 현재 파일을 닫았을 때 커서가 있던 행의 처음으로 이동
`”  이전에 vim 으로 현재 파일을 닫았을 때 커서가 있던 위치로 이동

참고 사이트

ViEmu

Leave a Comment