728x90
728x170
vi
- 모드형 편집기인 vi 에디터를 실행시키는 명령
vi 에 대한 설명
더보기
- vi는 다른 편집기들과 다르게 모드(Mode)형 편집기 임.
- vi는 크게 2개의 모드로 나뉨.
- 명령 모드(Command Mode)
- 입력 모드(Input Mode, Insert Mode) 또는 편집 모드(Edit Mode)
- vi는 크게 2개의 모드로 나뉨.
- vi를 처음 실행하면 명령 모드로 진입함.
- 명령 모드 상태에서 입력 명령(i, I, a, A, o, O 등)을 실행하면 입력 모드로 전환됨.
- 입력 모드 : 문자들이 문서에 기록되어지는 편집기 상태
- 입력 모드 에서 [ESC] 키를 누르면 명령 모드로 돌아옴.
- 명령 모드에서 :를 입력하면 화면 아래쪽에 :라는 프롬프트가 나타나게 됨. (ex 명령 모드)
- 명령 모드 상태에서 입력 명령(i, I, a, A, o, O 등)을 실행하면 입력 모드로 전환됨.
- 각 모드의 역할과 특징
- 명령 모드
- 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
그리드형(광고전용)
'System Software > Linux' 카테고리의 다른 글
[리눅스 명령어] mount / umount (0) | 2022.03.08 |
---|---|
[리눅스 명령어] umask (0) | 2022.03.07 |
[리눅스 명령어] chgrp (0) | 2022.03.07 |
[리눅스 명령어] chown (0) | 2022.03.07 |
[리눅스 명령어] man / manpath / whatis / apropos / whereis / info (0) | 2022.03.07 |
[리눅스 명령어] chmod (0) | 2022.03.06 |
[리눅스 명령어] uname (0) | 2022.03.05 |
[리눅스 명령어] date (0) | 2022.03.05 |