가장 강력한 편집기 중 하나 - vi
vi는 모든 UNIX 시스템에서 제공되는 화면 편집기로 파일을 편집할 수 있는 창 장치를 제공합니다. 물론 유닉스 시스템을 조금 아는 사람이라면 vi가 엄청나게 사용하기 어렵다고 생각할 수도 있겠지만, vi는 가장 기본적인 편집기이기 때문에 독자들이 잘 배워서 원활하게 사용할 수 있기를 바란다. 다른 여러 텍스트 프로세서가 UNIX의 표준 장비가 아니기 때문에 방해받지 않고 쉽게 사용할 수 있습니다. 아마도 다른 사람의 Linux 시스템에는 joe 또는 pico가 설치되어 있지 않을 수도 있습니다. vi를 모르면 vi를 수행하지 못할 수도 있습니다.
vi의 기본 개념
기본적으로 vi는 명령 모드, 삽입 모드, 마지막 줄 모드의 세 가지 작동 상태로 나눌 수 있습니다. 각 모드의 기능 구분은 다음과 같습니다.
1. 명령 모드: 화면 커서의 이동, 문자 또는 커서 삭제를 제어하고, 섹션을 이동 및 복사하고 삽입 모드로 들어가거나 마지막 줄 모드로 이동합니다.
2. 삽입 모드: 텍스트 데이터 입력은 삽입 모드에서만 가능합니다. Esc 키를 누르면 Comand 모드로 돌아갑니다.
3. 마지막 줄 모드: 파일을 저장하거나 편집기에서 나가거나 문자열 검색, 줄 번호 나열 등 편집 환경을 설정할 수도 있습니다.
그러나 vi는 두 가지 모드로 단순화할 수 있습니다. 즉, 마지막 줄 모드도 명령 모드에 포함되고, vi는 명령 모드와 삽입 모드로 구분됩니다.
vi의 기본 동작
? vi를 입력하세요
시스템 프롬프트에서 vi와 파일 이름을 입력한 후 vi 전체 화면 편집 화면으로 들어갈 수 있습니다:
$ vi testfile
이 하나 있습니다. 특히 주의해야 할 점은 vi를 입력한 후 "명령 모드"에 있고 텍스트를 입력하려면 삽입 모드로 전환해야 한다는 것입니다. vi를 처음 사용하는 사용자들은 커서를 먼저 움직이기 위해 상하좌우 키를 사용하고 싶어할 것이다. 그러다 보니 컴퓨터에서 계속 삐삐 소리가 나기 때문에, vi에 들어간 후에는 돈을 들이지 말라. 먼저 움직이지 말고, 말하기 전에 삽입으로 전환하세요.
?삽입 모드로 전환하여 파일 편집
명령 모드에서 'i', 'a' 또는 'o'를 눌러 삽입 모드로 들어갑니다. 이 시점에서 텍스트 입력을 시작할 수 있습니다.
i: 삽입, 현재 커서 위치부터 입력된 텍스트를 삽입합니다.
a: 추가, 현재 커서가 위치한 다음 문자부터 텍스트 입력을 시작합니다.
o: 새 줄을 삽입하고 줄의 시작 부분부터 텍스트를 입력합니다.
? 삽입→명령 모드로 전환하고 Esc 키를 누르세요.
현재 삽입 모드이므로 계속 입력만 가능합니다. 오타가 있는 것을 발견하고 커서 키를 사용하여 뒤로 이동하여 단어를 삭제하려면 ESC 키를 눌러 명령 모드로 다시 전환한 다음 텍스트를 삭제해야 합니다.
vi를 종료하고 파일을 저장합니다.
명령 모드에서 콜론 ":"을 눌러 마지막 줄 모드로 입력할 수 있습니다. 예:
:w filename("w filename"을 입력하여 저장) 기사를 지정된 파일 이름 파일 이름으로 지정)
:wq("wq"를 입력합니다. 입력 시 파일 이름 testfile을 지정했기 때문에 testfile이 작성되고 vi에서 나옵니다)
:q! 강제 종료하고 편집된 파일을 버리려면)
명령 모드 기능 키 목록
명령 모드 명령을 도입한 후 "일반적으로 사용되는"이라는 단어가 붙은 기능 키가 명령 뒤에 추가되어 보다 일반적으로 사용되는 것을 나타냅니다. vi 명령을 사용했습니다. 독자들은 반드시 배우고 기억해야 합니다.
(1) I, a, o는 삽입 모드로 전환됩니다. [매우 자주 사용되는]
(2) 커서 이동
vi는 키보드의 커서 키를 직접 사용하여 상하좌우로 이동할 수 있지만 일반 vi는 영문 소문자
h를 사용하며, j, k, l, 각각 왼쪽, 아래, 위, 오른쪽으로 한 칸 이동하도록 커서를 제어합니다.
Ctrl+B를 누르면 화면이 한 페이지 뒤로 이동합니다. [자주 사용하는 항목]
Ctrl+F를 누르면 화면이 한 페이지 앞으로 이동합니다. [공통]
Ctrl+U 누르기: 화면을 반 페이지 뒤로 이동합니다.
Ctrl+D를 누르면 화면이 반 페이지 앞으로 이동합니다.
0(숫자 0) 누르기: 기사의 시작 부분을 이동합니다. [공통]
G 누르기: 글 끝으로 이동합니다. [일반적으로 사용됨]
w 누르기: 커서가 다음 단어의 시작 부분으로 이동합니다. [일반적으로 사용됨]
e를 누르면 커서가 다음 단어의 끝으로 이동합니다.
b 누르기: 커서가 이전 단어의 시작 부분으로 돌아갑니다.
$ 누르기: 커서가 위치한 줄의 끝으로 이동합니다. [공통]
^ 누르기: 해당 줄에서 공백이 아닌 첫 번째 문자로 이동합니다.
0번 누르기: 줄의 시작 부분으로 이동합니다. [자주 사용하는 항목]
# 누르기: 줄의 #번째 위치로 이동합니다. 예: 51, 121. [자주 사용하는 방법]
(3) 텍스트 삭제
x : 누를 때마다 커서 위치 뒤의 한 글자씩 삭제합니다. [매우 일반적으로 사용됨]
#x: 예를 들어 6x는 커서 위치에서 다음 6자를 삭제한다는 의미입니다. [자주 사용하는 방법]
X: 큰 글자의 X를 누를 때마다 커서 위치 앞의 문자를 삭제합니다.
#X: 예를 들어 20X는 커서 위치에서 처음 20자를 삭제한다는 의미입니다.
dd: 커서가 있는 줄을 삭제합니다. [매우 자주 사용됨]
#dd: 예를 들어 6dd는 커서가 위치한 줄에서 6줄 아래의 텍스트를 삭제한다는 의미입니다. [자주 사용하는 방법]
(4) 복사
yw : 커서 위치부터 단어 끝까지의 문자를 버퍼에 복사합니다.
(#x와 #X의 기능이 반대가 되기를 원함)
p : 버퍼의 문자를 커서 위치에 붙여넣는다(명령어 'yw'와 'p는 반드시 함께 사용해야 함).
yy: 커서가 있는 줄을 복사합니다. [매우 일반적]
p: 붙여넣고 싶은 곳에 한 줄을 복사하세요. (명령어 'yy'와 'p'는 반드시 함께 사용해야 합니다)
#yy: 예: 6yy는 커서가 있는 줄에서 6줄 아래로 텍스트를 복사한다는 의미입니다. [자주 사용하는 방법]
p: 붙여넣고 싶은 곳에 여러 줄을 복사합니다. (명령어 '#yy'와 'p'는 반드시 함께 사용해야 함)
“ayy: 복사한 라인을 버퍼 a에 넣습니다. vi는 자주 사용하는 데이터를 버퍼에 저장할 수 있는 버퍼 기능을 제공합니다
"ap: 버퍼 a에 있는 데이터를 붙여넣습니다.
" b3yy: 버퍼 b에 세 줄의 데이터를 저장합니다.
"b3p: 버퍼 b에 데이터 붙여넣기
(5) 바꾸기
r: 커서 위치의 문자 바꾸기: [자주 사용함]
R: Esc를 누를 때까지 문자를 바꿉니다.
(6) 이전 명령을 실행 취소(undo)
u: 명령을 잘못 조작한 경우 즉시 u를 눌러 이전 명령으로 돌아갈 수 있습니다. [매우 일반적]
.: 마지막 명령을 반복할 수 있습니다. .
(7) 변경
cw: 커서가 있는 단어를 $ 단어의 끝으로 변경합니다. 예를 들어 c3w는 3단어 변경을 의미합니다.
Ctrl+G: 줄 번호를 나열합니다. 소개
독자 여러분, 마지막 줄 모드를 사용하기 전에 Esc 키를 눌러 명령 모드에 있는지 확인한 다음 콜론 ":" 또는 "/를 누르십시오. " 또는 "? "세 키 중 하나는 마지막 줄 모드로 들어갑니다.
1. 줄 번호 나열
set nu: "set nu"를 입력하면 기사의 각 줄 앞에 줄 번호가 나열됩니다.
2 .기사의 특정 줄로 이동
#: 파운드 기호는 숫자를 나타냅니다. 마지막 줄 모드 프롬프트 기호 ":" 앞에 숫자를 입력하고 Enter를 눌러 해당 줄로 이동합니다. ]는 기사의 15번째 줄로 이동합니다. 처음으로 검색한 키워드가 아닌 경우에는 n을 계속 눌러 원하는 키워드를 찾으세요. 예, 원하는 키워드를 찾을 때까지 n을 눌러 앞으로 검색할 수 있습니다. 4. 문자열
1, $s/string/replae/g를 교체합니다. 마지막 줄에 "1, $s/"를 입력합니다. mode.string/replace/g"는 전체 텍스트의 문자열을 대체 문자열로 대체합니다. 여기서 1,$s는 검색 범위가 기사의 처음부터 끝까지임을 의미하고 g는 모든 대체를 의미합니다.
%s /string/replace/c: 또한 전체 텍스트 문자열을 대체 문자열로 대체합니다. 위 명령과의 차이점은 %s와 1, $s가 동일한 함수이며 c는 교체하기 전에 교체해야 함을 의미합니다.
1,20s/string/replace/g: 1~20행 사이의 문자열을 관계 문자열로 교체합니다.
w: 프롬프트 기호. " in last line mode. :" 파일을 저장하기 위해 w를 누르기 전에. [매우 일반적]
#, # w 파일명: 기사의 특정 단락을 추출하여 다른 파일로 저장하려면 다음을 사용하면 됩니다. # 이 명령은 줄 번호를 나타냅니다(예: 30,50 w nice). 편집 중인 기사의 30~50번째 줄을 nice 파일로 저장합니다.
6. 나가기
q: 나가려면 q를 누르세요. 때로는 vi를 떠날 수 없다면 "! : 강제로 vi 종료(예: "q!")
qw: 종료 시 파일을 저장할 수 있도록 일반적으로 종료 시 w와 함께 사용하는 것이 좋습니다. [자주 사용하는 것]
VI 명령 모음:
vi를 입력하는 명령
vi 파일 이름: 새 파일을 열거나 만들고, 첫 번째 파일의 시작 부분에 커서를 놓습니다. line
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 : 커서를 한 단어 오른쪽으로 이동 j 단어의 끝으로
): 커서를 문장의 끝으로 이동
(: 커서가 문장의 시작으로 이동
}: 커서가 문단의 시작 부분으로 이동
{: 커서가 문단의 끝 부분으로 이동
nG: 커서가 문단의 시작 부분으로 이동 n번째 줄
n+: 커서가 n번째 줄 아래로 이동
n-: 커서가 n번째 줄 위로 이동
n$: 커서가 n번째 줄의 끝으로 이동
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: 줄의 시작 부분까지 삭제
d$ : 줄 끝까지 삭제
ndd: 현재 줄을 삭제하고 그 뒤의 n-1 줄
x 또는 X: 한 문자 삭제, x는 한 문자 삭제 커서 뒤, X는 커서 앞의
Ctrl+u: 입력 모드에서 입력한 텍스트 삭제
검색 및 바꾸기 명령:
/pattern: 커서 시작부터 파일 끝까지 검색 패턴
?pattern: 커서 시작부터 파일 시작까지 검색 패턴
n: 반복 같은 방향의 마지막 검색 명령
N: 반대 방향의 마지막 검색 명령 반복 검색 명령
: s/p1/p2/g: 현재 줄의 모든 p1을 다음으로 바꿉니다. p2
: n1,n2s/p1/p2/g: 라인 n1을 n2로 바꾸기 파일의 모든 p1을 p2로 바꾸기
: g/p1/s//p2/g: 바꾸기 p2가 있는 파일의 모든 p1
옵션 설정
all: 모든 옵션 설정 나열
term: 터미널 유형 설정
ignorance: 검색 시 대소문자 무시
list: 탭 정지(Ctrl+I) 및 줄 끝 플래그($) 표시
number: 줄 번호 표시
보고서: 줄 중심 명령으로 수정된 번호 표시
간단함: 짧은 경고 메시지 표시
warn: 다른 파일로 전환할 때 현재 파일이 저장되지 않으면 쓰기 메시지가 표시되지 않습니다.
nomagic: 검색 모드 문자에서 앞에 ""가 없는 특수 단어 사용 허용
nowrapscan: vi가 파일의 양쪽 끝에서 검색하는 것을 금지하고 반대쪽 끝에서 시작
mesg: vi가 write
마지막 줄 명령
: n1, n2 co n3을 사용하여 다른 사용자가 자신의 터미널에 작성한 정보를 표시하도록 허용합니다. n1행에서 n2행, n3행 사이의 내용을 복사합니다
: n1, n2 m n3: n1행에서 n2행 사이의 내용을 n3번째 행으로 이동
: n1, n2 d: 삭제 n1~n2 줄 사이의 내용
:w: 현재 파일 저장
: e filename: 편집을 위해 파일 파일 이름 열기
: x: 현재 파일 저장 및 exit
: q: vi 종료
: q!: 파일을 저장하지 않고 vi를 종료
:!command: 쉘 명령 명령 실행
: n1,n2 w!command: n1~n2 라인의 내용을 파일에 복사하여 command의 입력으로 실행합니다.
에 n1, n2가 지정되지 않은 경우 파일 전체를 의미합니다. 내용은 명령
의 입력으로 사용됩니다. r!command: 명령 명령의 출력 결과를 현재 행에 넣습니다.