vi는 모든 UNIX 시스템에서 제공하는 화면 편집기로 파일을 편집할 수 있는 창 장치를 제공합니다. 물론 유닉스 시스템을 조금 아시는 분들은
vi가 엄청 어렵다고 느끼실 수도 있겠지만, vi는 가장 기본적인 편집기이기 때문에 독자들이 잘 배워서 유닉스 세계에서 사용할 수 있기를 바랍니다. 다른 여러 텍스트 프로세서는 UNIX의 표준 장비가 아니기 때문에 미래에는 원활하고 번거롭지 않을 것입니다. 아마도 다른 사람의 Linux 시스템에는 joe 또는 pico가 설치되어 있지 않을 수도 있습니다. vi를 모르면 vi를 수행하지 못할 수도 있습니다.
vi의 기본 개념
기본적으로 vi는 명령 모드(Command 모드), 삽입 모드(Insert 모드), 최종 명령 모드(Last line 모드)의 세 가지 작동 상태로 나눌 수 있습니다. ),
각 모드의 기능은 다음과 같습니다.
1. 명령 모드: 화면 커서의 이동 제어, 문자 또는 커서 삭제, 구간 이동 및 복사 후 삽입 모드 진입 또는 마지막 줄 모드로.
2. 삽입 모드 : 삽입 모드에서만 텍스트 데이터를 입력할 수 있으며, Esc를 누르면 Comand 모드로 돌아갑니다.
3. 마지막 줄 모드: 파일을 저장하거나 편집기에서 나가거나 문자열 검색, 줄 번호 나열 등 편집 환경을 설정할 수도 있습니다.
하지만 vi는 두 가지 모드로 단순화할 수 있습니다. 즉, Command 모드에는 Last Line 모드도 포함되고, vi는 Command 모드와 Insert 모드로 구분됩니다.
vi를 입력하는 명령
vi filename: 새 파일을 열거나 만들고 첫 번째 줄의 시작 부분에 커서를 놓습니다.
vi +n filename: 파일을 열고 커서를 놓습니다. n번째 줄 시작 부분
vi + filename: 파일을 열고 마지막 줄 시작 부분에 커서를 놓습니다.
vi +/pattern filename: 파일을 열고 패턴과 일치하는 첫 번째 문자열에 커서를 놓습니다.
vi -r filename: 지난 번 vi로 편집할 때 시스템이 충돌했습니다. 파일 이름 복원
vi filename....filename: 여러 파일을 열고 순서대로 편집합니다.
커서 이동 명령
h: 커서를 왼쪽으로 한 글자 이동
l: 커서를 오른쪽으로 한 글자 이동
space: 커서를 오른쪽으로 한 글자 이동
백스페이스: 커서를 왼쪽으로 한 글자 이동
k 또는 Ctrl+p: 커서를 한 줄 위로 이동
j 또는 Ctrl+n: 커서를 한 줄 아래로 이동
Enter: 커서를 한 줄 아래로 이동
w 또는 W: 커서를 한 줄 이동 커서를 단어 시작 부분에서 한 단어 오른쪽으로 이동합니다.
b 또는 B: 커서를 단어 시작 부분에서 왼쪽으로 한 단어 이동합니다.
e 또는 E: 커서를 단어 시작 부분에서 한 단어 오른쪽으로 이동합니다. word
): 커서를 문장의 끝으로 이동
(: 커서를 문장의 시작으로 이동
}: 커서를 문장의 시작으로 이동
{: 단어의 시작으로 이동 커서를 단락 끝으로 이동
nG: 커서를 n 번째 줄의 시작 부분으로 이동
n+: 커서를 n 줄 아래로 이동
n-: 커서를 n 줄 위로 이동
n$ : 커서를 n번째 줄로 이동 End
H: 커서가 화면의 맨 윗줄로 이동
M: 커서가 화면의 가운데 줄로 이동
L: 커서가 화면의 마지막 줄로 이동 화면 행
0: (숫자 0에 유의) 커서가 현재 줄로 이동합니다. 제목
$: 커서를 현재 줄의 끝으로 이동합니다.
화면 스크롤 명령
Ctrl+u: 파일의 시작 부분으로 반 화면 스크롤
Ctrl+d: 파일의 끝으로 반 화면 스크롤
Ctrl+f: 파일의 끝으로 한 화면 스크롤
Ctrl+b; 한 화면을 파일 시작 부분으로 스크롤
nz: n번째 줄을 화면 상단으로 스크롤합니다. n이 지정되지 않은 경우 현재 줄을 화면 상단으로 스크롤합니다. 텍스트 명령 삽입
i: 커서 앞
I: 현재 줄의 시작 부분
a: 커서 뒤
A: 현재 줄의 끝
o: 현재 줄 앞 현재 줄 아래에 새 줄 열기
O: 현재 줄 위에 새 줄 열기
r: 현재 문자 바꾸기
R: ESC 키를 누를 때까지 현재 문자와 후속 문자 바꾸기
s: 현재 커서 위치부터 시작하여 지정된 문자 수를 입력된 텍스트로 대체
S: 지정된 행 수를 삭제하고 입력된 텍스트로 대체
ncw 또는 nCW: 지정된 문자 수정 문자 수
nCC: 지정된 행 수 수정
삭제 명령
ndw 또는 ndW: 커서에서 시작하여 그 다음의 n-1 문자 삭제
do: 시작 부분까지 삭제 the line
d$: tail 줄까지 삭제
ndd: 현재 줄을 삭제하고 그 뒤의 n-1줄
x 또는 X: 한 문자 삭제, x는 커서 뒤의 문자 삭제, Entered text
찾기 및 바꾸기 명령
/pattern: 커서 시작부터 파일 끝까지 패턴 검색
?pattern: 커서 시작부터 시작까지 패턴 검색 파일의
n: In 같은 방향으로 마지막 검색 명령 반복
N: 반대 방향으로 마지막 검색 명령 반복
: s/p1/p2/g: 현재의 모든 p1 교체 line with p2
: n1,n2s/ p1/p2/g: n1~n2 행의 모든 p1을 p2로 교체
: g/p1/s//p2/g: 파일의 모든 p1을 다음으로 교체 p2
옵션 설정
all: 모든 옵션 설정 나열
term: 터미널 유형 설정
ignorance: 검색 시 대소문자 무시
list: 탭 정지 표시(Ctrl+I) 및 줄 끝 플래그( $)
number: 줄 번호 표시
report: 줄 지향 명령으로 수정된 번호 표시
terse: 간단한 경고 메시지 표시
경고: 다른 파일로 전환 시 현재 파일이 저장되지 않으면 쓰기 금지 메시지가 표시됩니다.
nomagic: 검색 모드 앞에 "" 없이 특수 문자 사용을 허용합니다.
nowrapscan: vi에서 vi를 비활성화합니다. 파일 검색 양쪽 끝에서 다른 쪽 끝에서 시작
mesg: write
마지막 줄 명령
을 사용하여 vi가 다른 사용자가 자신의 터미널에 작성한 정보를 표시하도록 허용: n1, n2 co n3 : n1 n2행 사이의 내용을 n3번째 행으로 복사
: n1,n2 m n3: n1~n2행 사이의 내용을 n3번째 행으로 이동
: n1,n2 d: n1행 사이의 내용을 삭제 to n2
: w: 현재 파일 저장
: e filename: 편집을 위해 파일 파일 이름 열기
: x: 현재 파일을 저장하고 종료
: q: vi 종료
: q !: 파일을 저장하지 않고 vi를 종료합니다
:!command: 쉘 명령 명령 실행
: n1,n2 w!command: 파일의 n1~n2 행 내용을 명령의 입력으로 사용 그리고 n1과 n2가 지정되지 않으면 파일 내용 전체가 명령
의 입력으로 사용된다는 의미입니다. r!command: 명령 명령의 출력 결과를 현재 줄에 넣습니다
레지스터 작업
"?nyy: 현재 라인과 다음 n 라인의 내용을 레지스터에 저장합니까?, 여기서 ?는 문자이고 n은 숫자입니다.
"?nyw: 현재 라인과 다음 라인을 저장합니다. n 단어를 레지스터에 추가하시겠습니까? , 여기서 ?는 문자, n은 숫자
"?nyl: 현재 줄과 다음 n자를 레지스터에 저장합니까?, 여기서 ?는 문자, n은 숫자
"?p :제거 등록하다? 그리고 커서 위치에 놓습니다. 여기? 문자나 숫자일 수 있습니다.
ndd: 현재 줄과 그 아래 n줄의 텍스트를 삭제하고, 삭제된 내용을 삭제 레지스터 1번에 넣습니다.
VI 사용
------------------------- --- -------------------
1. 텍스트 삽입
┌──┬────────────┐
│명령│설명│
├──┼─────── ──────┤
│i │현재 문자 앞에 텍스트 삽입│
├──┼───────────┤
│I │현재 문자 앞에 텍스트 삽입 줄의 시작│
├─ ─┼────────────┤
│a │현재 문자 뒤에 텍스트 추가│
├──┼───── ───────┤
A ────────────┤
│O │현재 줄 앞에 빈 줄 삽입 │
├──┼─── ─────────┤
│R │다시 쓰기 모드에서 텍스트 입력│
└──┴───────────┘
2.
┌─────┬──── ───────┐
│명령│설명│
├─────┼────────── ─┤
│j 또는 아래쪽 화살표│아래로 한 줄 이동│
├─────┼──────────┤
│k 또는 위쪽 화살표│한 줄 위로 이동 │
├──────┼─── ────────┤
│h 또는 왼쪽 화살표│왼쪽으로 한 문자 이동│
├─────┼── ─────────┤
│l 또는 오른쪽 화살표 │한 문자 오른쪽으로 이동│
├─────┼───────────┤
│w │한 단어 오른쪽으로 이동│
├──── ─┼───────────┤
│W │한 단어를 공백으로 구분하여 오른쪽으로 이동│
├─────┼─────────── ┤
│b │한 단어 왼쪽으로 이동│
├─────┼─────── ────┤
│B │한 단어를 공백으로 구분하여 왼쪽으로 이동│
├─────┼───────────┤
│0 │이동 줄의 시작으로│
│Ctrl-F │페이지 앞으로│
├─ ────┼──────────┤
│Ctrl-B │페이지 뒤로│
├─────┼────────── ─┤
│nG │n번째 줄로│
├─────┼──────── ──┤
│G │마지막 줄로│
└─ ────┴──────────┘
대체 텍스트
┌─── ──┬──────┐
│명령│설명│
├─────┼──────┤
│$ │줄 끝으로│
├─────┼───── ─┤
│( │문장 맨 앞으로│
├─────┼─────┤
│) │문장 맨 앞으로│
├── ────┼── ────┤
│{ │문단 시작으로│
├─────┼──────┤
│} │문단으로 문단 끝│
└── ───┴──────┘
4. 텍스트 삭제
┌───┬───────── ─┐
│명령│설명│
├───┼───────────┤
│r │문자 바꾸기│
├───┼── ────────────┤
│c │Esc 키를 누를 때까지 텍스트 수정│
├───┼──────────┤
│cw │다음 단어 수정│
├── ─┼───────────┤
│cnw │다음 n 단어 수정│
└───┴─ ───────────┘
5. 텍스트 편집
┌──┬────────────────┐
│ Mingsi│설명│
├── ┼─────────────────────┤
│yy │텍스트 한 줄을 기본 버퍼로 이동│
├──┼── ────────────────────┤
│yn │다음 단어를 기본 버퍼로 이동│
├─ ─┼──── ──────────────────┤
│ynw │다음 n 단어를 기본 버퍼로 이동│
├──┼── ── ──────────────────┤
│p │기본 버퍼에 텍스트 줄이 포함되어 있으면 현재 버퍼 뒤에 빈 줄을 삽입하세요 │
│ │ line 기본 버퍼에 있는 사운드 내용을 이 줄에 붙여넣습니다. 기본 버퍼에 여러 단어가 포함되어 있으면 해당 단어를 커서 오른쪽에 붙여넣습니다. │
├──┼─────────────────────┤
│P │기본 버퍼에 텍스트 줄이 포함되어 있으면 현재 │
│ │줄 앞에 빈 줄을 삽입하고 기본 버퍼의 내용 │
│ │을 이 줄에 붙여넣습니다. 기본 버퍼에 │
│ │여러 단어가 포함되어 있으면 이 단어를 왼쪽에 붙여넣습니다. 커서
│
└──┴──────────────────────┘
6 , 저장하고 종료
┌───────────┬─────────────┐
│명령│설명│
├─── ─────── ─┼───────────────┤
│zz │저장하고 나가기│
├─────────── ┼────── ─────────┤
│:w 파일명 │파일 쓰기│
├───────────┼───── ──────── ──┤
│:W │파일 쓰기│
├──────────┼──────────── ───┤
│: x │저장하고(현재 파일이 수정된 경우) 종료│
├──────────┼──────────── ───┤
│:q! │파일을 저장하지 않고 바로 나가기│
├──────────┼───────────── ┤
│:q │ Exit vi │
VI 공통 팁
VI 명령은 Unix/Linux 세계에서 파일을 편집하는 데 가장 일반적으로 사용되는 명령이라고 할 수 있지만 명령 때문에 세트가 많이 있고, 많은 사람들이 이 방법에 익숙하지 않습니다. 사실, 기본적인 명령만 익히면 유연하게 사용할 수 있으며 그 장점을 발견하고 점차적으로 이 방법을 사용하게 될 것입니다. 이 문서에서는 가장 일반적으로 사용되는 명령과 VI의 고급 응용 기술을 소개하는 것을 목표로 합니다.
1. 기본 명령어 소개
--- 1. 커서 명령
k, j, h, l - 위, 아래, 왼쪽 및 오른쪽 커서 이동 명령입니다. Linux에서는 키보드 오른쪽에 있는 4개의 커서 키를 사용할 수 있지만 이 4개의 명령을 기억하는 것은 여전히 매우 유용합니다. 이 4개의 키는 키보드에서 오른손의 기본 위치입니다.
nG——점프 명령. n은 줄 수입니다. 이 명령은 커서를 지정된 줄로 즉시 이동합니다.
Ctrl+G - 커서 위치의 행과 열 수를 보고합니다.
w, b - 커서가 한 단어를 앞으로 또는 뒤로 건너뛰도록 합니다.
---- 2. 명령 편집
i, a, r - 커서 앞, 뒤, 위치에 문자 명령을 삽입합니다(i=삽입, a=추가, r=교체).
cw, dw - 커서 위치의 단어를 변경(교체)/삭제하는 명령입니다(c=변경, d=삭제).
x, d$, dd - 한 문자를 삭제하고, 커서부터 줄 끝까지의 모든 문자를 삭제하고, 줄 전체를 삭제하는 명령입니다.
---- 3. 검색 명령
----/string,?string——커서 위치를 기준으로 앞뒤로 해당 문자열을 검색하는 명령입니다.
---- 4. 복사 명령
---- yy, p - 한 줄을 클립보드에 복사하거나 클립보드의 내용을 제거하는 명령입니다.
2. 자주 묻는 질문 및 지원요령
--- 1. 새 파일에서 /etc/passwd의 내용을 읽고 사용자 이름 부분을 추출합니다.
---- vi 파일
---- :r /etc/passwd 열린 파일 파일
---- :%s/:에서 커서 위치의 /etc/passwd를 읽습니다. //g /etc/passwd에서 사용자 이름 뒤의 콜론부터 줄 끝까지의 모든 부분을 삭제합니다.
---- 지정된 줄 번호 이후의 파일 내용을 읽을 수도 있습니다. 예를 들어 ":3r /etc/passwd" 명령을 사용하면 /etc/passwd의 세 번째 줄부터 모든 내용을 읽을 수 있습니다. 새 파일.
---- 다음 방법을 사용하여 파일에서 #으로 시작하는 모든 빈 줄과 주석 줄을 삭제할 수도 있습니다.
---- #cat squid.conf.default | grep -v ^$ | grep -v ^#
---- 2. 편집을 위해 파일을 연 후, 로그인한 사용자에게 파일에 대한 쓰기 권한이 없어 변경 사항을 임시 파일에 저장해야 한다는 사실을 알게 되었습니다.
---- vi 파일
---- :w /tmp/1 모든 변경 사항을 저장합니다. 변경 사항 중 일부를 임시 파일에 저장할 수도 있습니다(예: 20~59행). 사이의 내용은 /tmp/1 파일에 저장됩니다. 다음 명령을 입력할 수 있습니다.
---- vi 파일
---- :20,59w /tmp/1
---- 3. VI를 사용하여 파일을 편집하지만 내용의 상당 부분을 삭제해야 합니다.
---- 먼저 편집 명령 "vi file"을 사용하여 파일을 연 다음 삭제해야 할 줄로 커서를 이동하고 Ctrl+G를 눌러 줄 번호를 표시한 다음 Ctrl+G를 눌러 줄 번호를 표시합니다. 파일 끝 부분에 줄 번호를 표시합니다.
---- :23,1045d 두 번 얻은 줄 번호가 23과 1045라고 가정하고, 이 기간 동안 모든 내용을 삭제하려면 ma 및 mb 명령을 사용하여 시작 줄과 끝 줄을 표시할 수도 있습니다. 삭제한 후 ":a,bd" 명령을 사용하여 삭제하세요.
---- 4. 전체 파일의 각 줄 또는 일부 줄의 시작이나 끝 부분에 일부 문자열을 추가합니다.
---- vi 파일
---- :3,$s/^/some string / 파일의 첫 줄부터 마지막 줄까지 "some string"을 삽입합니다.
---- :%s/$/some string/g 전체 파일의 각 줄 끝에 "some string"을 추가하세요.
---- :%s/string1/string2/g 전체 파일에서 "string1"을 "string2"로 바꿉니다.
---- :3,7s/string1/string2/ 파일의 3~7번째 줄에 있는 "string1"만 "string2"로 바꿉니다.
---- 참고: s는 대체, %는 모든 행, g는 전역을 나타냅니다.
---- 5. 2개의 파일을 동시에 편집하고 한 파일의 텍스트를 복사하여 다른 파일에 붙여넣습니다.
---- vi file1 file2
---- yy 파일 1의 커서 위치에 줄을 복사합니다
---- :n 파일 2로 전환 (n=next)
-- -- p 복사한 줄을 파일 2의 커서 위치에 붙여넣기
---- :n 파일 1로 다시 전환
---- 6. 파일의 경로를 바꾸십시오.
---- ":%s#/usr/bin#/bin#g" 명령을 사용하여 파일의 모든 경로 /usr/bin을 /bin으로 바꿉니다. ":%s//usr/bin//bin/g" 명령을 사용할 수도 있습니다. 여기서 ""는 이스케이프 문자로, 다음 "/" 문자는 구분 기호가 아니라 실제 의미가 있는 문자임을 나타냅니다.