별의 공부 블로그 🧑🏻‍💻
728x90
728x170

vi

  • 모드형 편집기vi 에디터를 실행시키는 명령

 

vi 에 대한 설명

더보기
  • vi는 다른 편집기들과 다르게 모드(Mode)형 편집기 임.
    • vi는 크게 2개의 모드로 나뉨.
      • 명령 모드(Command Mode)
      • 입력 모드(Input Mode, Insert Mode) 또는 편집 모드(Edit Mode)
  • vi를 처음 실행하면 명령 모드로 진입함.
    • 명령 모드 상태에서 입력 명령(i, I, a, A, o, O 등)을 실행하면 입력 모드로 전환됨.
      • 입력 모드 : 문자들이 문서에 기록되어지는 편집기 상태
      • 입력 모드 에서 [ESC] 키를 누르면 명령 모드로 돌아옴.
        • 명령 모드에서 :를 입력하면 화면 아래쪽에 :라는 프롬프트가 나타나게 됨. (ex 명령 모드)
  • 각 모드의 역할과 특징
    • 명령 모드
      • vi를 실행시키면 가장 먼저 접하는 기본이 되는 모드
      • 커서의 이동, 수정, 삭제, 복사, 붙이기, 탐색 등을 함.
      • 입력 모드 전환키(i, I, a, A, o, O 등) 등을 입력하면 입력 모드로 전환됨.
        • 명령 모드로 다시 전환하려면 [ESC] 키를 누르면 됨.
    • 입력 모드
      • 입력 모드 이외에 편집 모드, Input Mode, Insert Mode 등으로 불림.
      • 글자를 입력하는 문서를 만드는 모드
      • 명령 모드에서 입력 전환키를 눌러서 전환하면 화면 아래에 -INSERT-라고 표시됨.
    • ex 명령 모드
      • 명령 모드에서 :키를 입력했을 때, 화면 맨 아랫줄에서 명령을 수행하는 모드
      • 저장, 종료, 탐색, 치환  vi 환경설정 등의 역할을 하는 모드

 

vi 편집기 사용법

더보기

커서 이동하기

  • 최근에 사용하는 키보드는 커서 가 존재함.
    • 간단한 이동은 커서를 사용하면 됨.
    • 빠른 이동을 원하면 명령키를 눌러서 이동 가능함.
    • 특정 명령을 반복해서 실행하는 경우, 해당 명령 앞에 정수값 n을 붙이면 됨.
      • 예) h를 누르면 왼쪽 1칸을 이동하지만 ,6h를 누르면 왼쪽으로 6칸 이동함.
명령 설명 명령 설명
h 커서를 왼쪽으로 이동 { 문단(Paragraph)의 처음으로 이동
j 커서를 아래쪽으로 이동 } 다음 문단의 처음으로 이동
k 커서를 위로 이동 H 화면의 첫 줄로 이동
l 커서를 오른쪽으로 이동 M 화면의 중간으로 이동
w 다음 단어의 처음으로 이동 L 화면의 끝 줄로 이동
- 앞 줄(Line)의 첫 문자로 이동 [Ctrl]+[b] 한 화면 위로 이동
^ 줄의 첫 문자로 이동 [Ctrl]+[f] 한 화면 아래로 이동
$ 줄의 맨 끝으로 이동 [Ctrl]+[u] 반 화면 위로 이동
+ 다음 줄의 첫 문자로 이동 [Ctrl]+[d] 반 화면 아래로 이동
0 첫 번째 열로 이동 e 다음 단어의 맨 뒤로 이동 (오른쪽 방향)
G 제일 끝줄로 이동 b 단어 맨 앞으로 이동 (왼쪽 방향)
nG n번째 행으로 이동 z[Enter] 현재 커서가 위치한 줄을 화면의 첫줄로 만듦.
gg 파일의 처음으로 이동 n% 입력한 n퍼센트에 해당하는 줄로 이동
( 문장의 처음으로 이동 :0 줄의 제일 처음으로 이동
) 다음 문장의 처음으로 이동 :$ 줄의 제일 끝으로 이동

 

입력 모드 전환

  • i : 현재 커서 앞에 삽입하면서 입력 모드로 전환
  • a : 현재 커서 뒤에 삽입하면서 입력 모드로 전환
  • o : 현재 커서가 위치한 곳의 아랫줄에 삽입하면서 입력 모드로 전환
  • I : 현재 커서가 위치한 줄의 맨 앞에 삽입하면서 입력 모드로 전환
  • A : 현재 커서가 위치한 줄의 맨 뒤에 삽입하면서 입력 모드로 전환
  • O : 현재 커서가 위치한 곳의 윗줄에 삽입하면서 입력 모드로 전환
  • s : 현재 커서가 위치한 곳의 문자를 지우면서 입력 모드로 전환
  • S : 현재 커서가 위치한 줄을 지우면서 입력 모드로 전환
  • [Esc] : 명령 모드로 전환

 

복사 및 붙이기

  • 복사 및 붙이기도 정수값 n을 붙이면 여러 줄 복사나 붙이기가 됨.
  • 예)
    • 한줄 복사 : yy
    • 커서가 위치한 줄부터 5줄 복사 : 5yy
  • 명령
    • yy 또는 Y : 현재 커서가 위치한 줄을 버퍼에 복사
    • yw : 현재 커서가 위치한 단어를 버퍼에 복사
    • yh : 커서의 왼쪽 문자를 버퍼에 복사
    • yl : 커서가 위치한 문자를 버퍼에 복사
    • yB : 커서의 왼쪽 문자부터 단어의 처음까지 버퍼에 복사
    • yW : 커서가 위치한 문자부터 단어의 오른쪽 끝까지 버퍼에 복사
    • y0 : 커서의 왼쪽 문자부터 줄 처음까지 버퍼에 복사
    • p : 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 아래에 붙임.
    • P : 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 위에 붙임.

 

삭제하기

  • 삭제도 정수값 n을 붙이면 여러 줄을 지울 수 있음.
  • 예)
    • 1줄 삭제 : dd
    • 커서가 위치한 줄부터 5줄 삭제 : 5dd
  • 명령
    • x 또는 dl : 현재 커서가 위치한 문자를 삭제
    • X 또는 dh : 현재 커서가 위치한 왼쪽 문자를 삭제
    • dd : 현재 커서가 위치한 줄 삭제
    • dw : 현제 커서가 위치한 단어 삭제
    • db : 현재 커서가 위치한 왼쪽 단어 삭제
    • dB : 커서의 왼쪽 문자부터 단어의 처음까지 삭제
    • dW : 커서가 위치한 문자부터 단어의 오른쪽 끝까지 삭제
    • d$ 또는 D : 현재 커서가 위치한 문자부터 줄의 끝까지 삭제
    • d0 : 커서의 왼쪽 문자부터 줄의 처음까지 삭제

 

되돌리기 및 패턴 검색

  • u : 직전에 내린 명령 취소(Undo)
  • /exp : exp과 같은 문자열을 현재 커서가 위치한 곳부터 아래 방향으로 검색
  • ?exp : exp과 같은 문자열을 현재 커서가 위치한 곳부터 위 방향으로 검색
  • n : /, ?을 이용한 검색에서 같은 방향으로 다음 문자열 검색
  • N : /, ?을 이용한 검색에서 반대 방향으로 다음 문자열 검색

 

ex 명령 모드

  • ex : 초기 유닉스에서부터 쓰인 Lline Editor
  • vi는 자체 명령어 외에 ex 편집기 명령어를 지원함.
  • 명령 모드에서 :을 누르면 화면 아래쪽에 :라는 프롬프트가 나타나면서 ex 명령 모드로 들어감.
  • 주요 명령어
    • :w : 작업 중인 내용 저장
    • :w 파일명 : 지정한 파일명으로 저장
    • :w!
      • 무조건 저장함.
      • 보통 일기 전용 파일 편집 시에 사용함.
    • :q
      • 종료함.
      • 수정된 사항이 있으면 종료되지 않음.
    • :wq
      • 변경된 내용을 저장하고 종료함.
      • 같은 명령으로 :x 또는 ZZ가 있음.
    • :wq 파일명 : 지정한 파일명으로 저장하고 종료함.
    • :wq! : 무조건 저장하고 종료함.
    • :q! : 변경된 내용이 있는 경우라도 저장하지 않고 무조건 종료함.
    • :e 파일명 : 지정한 파일명으로 새롭게 편집함.
    • :r 파일명 : 현재 커서의 위치 다음에 지정한 파일명을 읽어서 삽입함.
    • :정수값
      • 지정한 정수값의 행으로 이동함.
      • 예) :10 10번째 줄로 이동함.
    • :12 r 파일명 : 12번째 줄 이후에 지정한 파일을 읽어서 삽입함.
    • :10,20d : 10번째 줄부터 20번째 줄까지 지움.
    • :r !date : 현재 커서가 위치한 다음 줄에 date 명령의 결과를 삽입함.
    • :1.5w jalin.txt : 1번째 줄부터 5번째 줄까지의 내용을 jalin.txt에 저장함.
    • :6,10w >> list.txt : 6번째 줄부터 10번째 줄까지의 내용을 list.txt 파일에 추가함.
    • :n list1.txt
      • 현재 편집중인 파일을 종료하고, list1.txt 파일을 불러옴.
      • 만약 수정할 경우, :w를 이용하여 저장한 뒤에 다른 파일을 불러올 수 있음.
    • :n! list1.txt : 현재 편집중인 파일을 저장하고, list1.txt 파일을 불러옴.
    • :n# : 바로 직전에 편집했던 파일을 불러옴.
    • :help
      • 도움말을 확인함.
      • | tags | 안에 문서를 확인할 수 있음.
        • 해당 영역으로 이동한 후, [CTRL]+[]] 키를 누르면 됨.
      • 이전으로 돌아가려면 :n#을 입력하면 됨.
      • 종료하려면 :q를 입력하면 됨.

 

ex 명령 모드와 특수 문자

  • ex 명령 모드 에서 몇몇 특수 문자가 특별한 의미를 가지고 있음.
    • 삭제, 저장, 치환 등의 명령을 수행할 때 유용하게 사용됨.
  • 특수 문자
    • .
      • 현재 줄을 의미함.
      • 보통 .을 입력하지 않으면 자동으로 현재줄이라고 인식함.
    • n+m
      • 지정한 n줄에서 +m한 줄까지를 의미함.
    • $ : 마지막 줄을 의미함.
    • ,
      • 몇 번째 줄부터 몇 번째 줄까지를 의미함.
      • 예) 2,10 : 2번째 줄부터 10번째 줄까지를 의미함.
    • %
      • 첫 번째 줄부터 끝줄까지를 나타냄.
      • 1,$와 같고, 전체 줄을 의미함.
    • &
      • 치환할 때 사용하는 특수 문자
      • 원래 있던 문자열을 포함하여 치환할 때 사용함.
    • \ : ex 명령 모드에서 사용하는 특수 문자의 기능을 없앨 때 사용함.
    • 기타 : \` \`, < > 등은 일반 문자로 인정함.

 

사용 예

:3,$d         // 3번째 줄부터 마지막 줄까지 삭제
:.,$d         // 현재 줄부터 마지막 줄까지 삭제
:1,.d         // 첫 번째 줄부터 현재 커서가 위치한 줄까지 삭제
:%d           // 첫 번째 줄부터 마지막 줄까지 전부 삭제
:2,2+2d       // 2번째 줄부터 +2 한 줄, 즉 4번째 줄까지 삭제

 

문자열 치환

  • ex 명령 모드 에서 지정한 문자열을 새로운 문자열로 치환할 수 있음.
  • 정규 표현식인 ^, $, <, > 등과 같이 사용하면 더욱 세밀하게 치환할 수 있음.
  • 기호
    • :s/문자열/새문자열 : 커서가 위치하고 있는 줄의 첫 번째 해당 문자열을 새문자열로 치환함.
    • :s/문자열/새문자열/g : 커서가 위치하고 있는 줄의 문자열 모두를 새문자열로 치환함.
    • :s/문자열/새문자열/gi : 커서가 위치하고 있는 줄의 문자열 모두를 새문자열로 치환할 때 대소문자를 구분하지 않음.
    • :s/문자열/새문자열/gc : 커서가 위치하고 있는 줄의 문자열 모두를 새문자열로 치환할 때 하나씩 질의함.

 

치환할 때 유용한 정규 표현식

  • ex 명령 모드 에서는 < 또는 >를 일반 문자로 취급함.
    • 치환할 때는 해당 문자 앞에 \를 붙여야 적용됨.
  • 기호
    • ^ : 줄의 시작을 의미함.
    • $ : 줄의 끝을 의미함.
    • < : 단어의 시작을 의미함.
    • > : 단어의 끝을 의미함.

 

사용 예

:s/windows/linux/ 
// 현재 커서가 위치한 줄의 windows 라는 문자열을 linux 로 치환함.
// 여러 개의 동일한 문자열이 존재하는 경우, 첫 번째 문자열 하나만 치환함.
:1,$ s/windows/linux/g  
// 파일 전체의 windows 라는 문자열을 전부 linux 로 치환함.
// ':% s/windows/linux/g' 와 같음.
:.,.+5s/windows/linux/g
// 커서가 위치한 줄부터 +5 한 줄까지 windows 라는 문자열을 전부 linux 로 치환함.
:% s/^linux/Linux
// 파일 전체에서 줄의 시작이 linux 인 문자열을 Linux 로 치환함.
:% s/linux$/Linux
// 파일 전체에서 줄의 끝이 linux 인 문자열을 Linux 로 치환함.
:%s/<hate>/love/g
// 파일 전체의 <hate> 를 love 로 바꿈.
// ex 모드 치환에서는 < 나 > 기호에 특별한 의미가 없음.
:% s/\<windows\>/linux/g
// 파일 전체에서 windows 라는 단어만 linux 로 치환함.
:%s/linux/& and windows/g
// 파일 전체의 linux 를 linux and windows 로 바꿈.
:%s/\/terran\//\/sports\//g
// 파일 전체의 /terran/ 이라는 문자열을 /sports/로 바꿈.
:%s/love/& \& hate/g
// 파일 전체의 love 를 love & hate 로 바꿈.
:%s/love/hate/gi
// 파일 전체의 love 를 hate 로 변환하는데, 대소문자를 구분하지 않음.
:%s/love/hate/gc
// 파일 전체의 love 를 hate 로 변환하기 전에 하나씩 질의하도록 함.

 

vi의 특수 기능

(1) 약어(Abbreviation) 설정 기능

  • 자주 입력하는 단어를 약어로 설정하여, 약어를 입력하면 설정한 단어로 대체 되도록 하는 기능

 

설정법

:ab [약어] [문자열]

 

사용 예

:ab             // 현재 설정되어 있는 약어 목록 출력
:ab hn hannam   
// hn 이라는 약어를 hannam 이라고 등록함.
// 문서 작성 시, hn 이라고 입력하면 자동으로 hannam 이라는 문자열로 대체됨.
:una hn     // 설정된 약어 hn 을 취소함.

 

(2) 매크로(Macro) 기능

  • 특정한 키에 특정한 기능을 하도록 설정하는 것

 

설정법

:map [키] [기능]

 

사용 예

:map            // 설정되어 있는 매크로 출력
:map q :wq!     // 현재 설정되어 있는 약어 목록 확인
:unmap q        // 설정되어 있는 'q' 설정을 취소

 

vi 환경 설정

  • vi는 편집기 사용에 다양한 편의 기능을 제공하고 있음.
  • ex 명령 모드 에서 set을 사용하여 환경 변수를 설정할 수 있음.

 

사용법

  • 환경 변수 확인 : :set [all]
  • 환경 변수 설정 : :set [환경변수]=[값]
  • 환경 변수 설정 해제 : :set no환경변수

 

주요 환경 변수

  • ignorecase
    • 문자열을 검색할 때, 대소문자에 관계없이 검색함.
    • 약자인 ic라고 표기해도 됨.
  • number
    • 행의 앞에 행 번호를 붙여줌.
    • 약자인 nu라고 표기해도 됨.
  • autoindent
    • 행 변경 시 커서의 위치를 바로 윗줄의 수준(컬럼)과 같이 해줌.
    • 프로그램 작성 시에 용이함.
    • 약자인 ai라고 표기해도 됨.
  • showmatch
    • } 또는 )를 입력하였을 경우, 짝이 되는 { 또는 (를 찾아 커서가 1초 동안 머무르다 돌아옴.
    • 이 기능은 C 등의 프로그램을 작성할 때 편리함.
    • 약자인 sm이라고 표기해도 됨.
  • showmode
    • 화면 아래쪽에 현재 모드를 표시함.
    •  편집 모드 인 경우, INSERT 등의 값으로 표시해줌.
    • 기본값으로 설정되어 있음.
  • tapstop
    • 탭의 크기를 표시함.
    • =n를 붙이면 탭의 크기를 n값에 따라 부여할 수 있음.
    • 약자인 ts로 표기해도 됨.
  • list : 줄바꿈 문자($), TAB 문자(^I) 등을 표시해줌.

 

사용 예

:set        // 주요 환경 변수를 보여줌.
:set all    // 설정되어 있는 모든 환경 변수 값을 보여줌.
:set nu     
// 행의 앞에 행 번호를 표시함.
// ':set number' 와 같음.
:set nonu     // 행의 앞에 붙은 행 번호 표시를 없앰.
:set ai       // [Enter] 키를 입력하여 다음 행으로 이동했을 때, 윗 줄과 같은 열에 커서를 위치시킴.
:set noai  
// 'ai' 설정을 해제함.
// ':set noautoindent' 와 같음.
:set ignorecase
// 명령 모드에서 문자열 검색 시, 대소문자를 구별하지 않음.
// 예) '/linux'라고 입력하면 linux, Linux, LINUX 등의 모든 문자열을 찾아줌.
:set noignorecase
// 검색 시에 대소문자를 구분하도록 함.
// ':set noic' 라고 해도 됨.
:set tabstop        // 현재 설정된 탭의 크기(기본값은 8)를 보여줌.
:set tabstop=10     // 탭의 크기를 10으로 바꿈.
:set noshowmode
// 리눅스에서는 기본적으로 모드를 표시해줌.
// - 입력 모드인 경우, 화면 하단에 '-INSERT-' 등을 표시해줌.
// 위와 같이 명령을 내리면 모드 전환을 해도 표시되지 않음.
:set list         // 개행 문자($), TAB 문자(^I) 등을 표시해줌.
:set nolist       // 개행 문자 및 TAB 문자 등의 표시를 없앰.

 

관련 파일 : .exrc

  • 각 사용자들이 vi 편집기의 환경 설정을 등록하여 실행 시에 계속적으로 지정한 설정을 이용 하도록 해주는 파일
  • set 명령과 관련 환경 변수를 이용하여 사용자의 홈 디렉터리  .exrc(또는 .vimrc) 안에 적어 놓으면, vi가 실행될 때 기본으로 설정되어 시작하게 됨.
$ pwd
/home/starrykss
$ vi .exrc
$ cat .exrc
set nu
set ai
ab hn hannam
map q

 

사용법

vi [파일명]

 

주요 옵션

옵션 설명
-c - vi를 시작하면서 ex 명령 모드에서 실행되는 명령을 지정하여 실행
- 이 옵션 뒤에 숫자값을 입력하면 + 옵션과 동일한 기능을 함.
-r - 손상된 파일을 복구할 때 씀.
- 파일을 편집하던 중, 갑작스런 사고 등으로 인해 시스템이 다운되었을 경우 보통 이 명령으로 복구할 수 있음.
-R - 파일을 읽기 전용으로 열 때 사용함.
- view 명령과 유사
+[num] - 파일을 열면서 커서를 지정한 num 번째 줄로 이동시킴.
- 지정한 값 없이 +만 입력하면, 커서를 마지막 줄로 이동시킴.

 

사용 예

예 1
  • 빈 문서로 시작함.
$ vi

 

예 2
  • 주어진 파일(index.html) 이름으로 편집 시작
  • 만약, 파일이 존재하지 않으면 새로 만들게 됨.
$ vi index.html

 

예 3
  • index.html 파일을 열면서 커서를 15번째 줄로 보냄.
    • vi -c 15 index.html 과 같은 명령
$ vi +15 index.html

 

예 4
  • index.html 파일을 열면서 행 번호를 붙여줌.
$ vi -c "set nu" index.html

 

예 5
  • index.html 파일을 읽기 전용으로 엶.
  • 지정할 때 ':sq!' 형식으로 ! 표를 붙이면, 읽기 전용이라도 저장됨. (강제 저장)
$ view index.html

 

예 6
  • index.html 파일을 열면서 커서의 위치를 마지막 라인에 둚.
$ vi + index.html

 

예 7
  • /etc/passwd 파일을 열면서 starrykss 라는 문자열이 있는 위치에 커서를 둚.
$ vi +/starrykss /etc/passwd

 

예 8
  • vi 작업 중, 비정상적으로 종료하여 생성된 스왑(Swap) 파일의 목록 출력
    • 작업 중이던 파일명이 a.txt 면, 같은 디렉터리 내에 .a.txt.swp 이라는 이름의 스왑 파일이 생성됨.
$ vi -r

 

예 9
  • a.txt 가 비정상적인 종료가 발생한 경우, 스왑 파일(.a.txt.swp)의 내용을 불러옴.
    • 작업 후에는 스왑 파일인 '.a.txt.swp' 파일을 삭제하도록 함.
$ vi -r a.txt

 

 

 

 

 

 

 

 

 

 

 

 

728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖