console-based text editor
read, write permission 필요
파일이 없을 경우 임시적으로 파일을 오픈하고 저장하면 파일을 생성 함
command : vi filename
\-R 옵션 : 읽기 전용
vi + filename : 커서를 파일 마지막줄에 위치시킴
vi +n filename : n번째 줄에 커서를 위치시킴
vi + / pattern filename : 해당 pattern이 포함된 라인 앞에 커서 위치
ex) vi +/python text : text 파일에서 python이 포함된 라인 앞에 커서 위치
| :w filename | 편집된 파일을 해당 filename으로 저장 후 종료 |
|---|---|
| :w! | 읽기 전용으로 된 파일에 쓰기 (해당 디렉토리에 write 권한이 없으면 text file 쓰기 불가. 그러나 w!사용시 쓰기 가능, 쓰려면 root 권한 or 파일 소유권(파일 생성자)이 필요 함.) |
| :q | 파일이 이미 저장된 경우 종료 |
| :wq | 편집된 파일 저장하고 종료 |
| : q! | 변경사항 저장 없이 종료 |
| ZZ | wq와 동일 |
vi 편집기에서 내용 작성시 해당 내용을 .filename.swp 파일에서 임시적으로 저장하고 있음
1. ls -al 명령어로 숨겨진 swp 파일 찾기
2. cp .filename.swp .savename.swp ⇾ swp 파일을 복사하기
3. vi -r 복사파일 ⇾ 복사한 파일을 vi -r 옵션으로 열기
4. Enter 입력하기
⇾ 전에 작성했던 내용들이 복구 됨
insert mode : 텍스트 편집, Press "i"
command mode : 초기 모드, Press "ESC"
line mode : 명령어를 입력받아 복잡한 기능을 수행하기 위한 모드, Press ":"
VI 편집기 ⇾ 마우스 사용 불가, 키보드를 이용해야 함
h : left
l : right
k : up
j : down
J : 두줄로 되어 있는 문장을 한 줄로 된 문장으로 바꾸기 (라인 합치기)
H : high ⇾ 첫번째 라인
M : middle ⇾ 중간 라인
L : low ⇾ 마지막 라인
\- : 이전 라인
+ : 다음 라인
G : 마지막 라인으로
1G : 첫번째 라인으로
12G : 12번째 라인으로
$ : 마지막 라인으로
^ : 시작 라인으로
Ctrl + b : 한 페이지 뒤로
Ctrl + f : 한 페이지 앞으로
:n : n번째 라인으로 이동
:$ : 마지막 라인으로 이동
:$= : 파일의 전체 라인 수를 출력
:.= : 현재 라인 번호를 출력
i : 현재 커서 위치에서 부터 입력
a : 현재 커서 한칸 뒤에서 부터 입력
I : 현재 커서 한칸 앞에서 부터 입력
A : 현재 라인 마지막에서 부터 입력
o : 현재 커서 한칸 아래에서 부터 새 라인으로 입력
O : 현재 커서 한칸 위에서 부터 새 라인으로 입력
자르기 == 삭제 ⇾ 삭제를 하면 삭제한 내용이 임시적으로 메모리에 저장되어 있기 때문에 붙여넣기 하면 삭제한 내용이 붙여넣기 됨
x : 한 글자 삭제
24x : 24글자 삭제, (36x는 36글자 삭제)
dd : 현재 라인 삭제
4dd : 4라인 삭제, (2dd는 2라인 삭제)
D : 커서에서 라인 끝까지 삭제
dw : delete, word ⇾ 현재 단어 삭제
yy : 현재 라인 복사
5yy : 5라인 복사
p : 현재 커서 뒤에 붙여넣기
P : 현재 커서 이전에 붙여넣기
v + 방향키 : 복사 영역 선택 (글자 단위)
V + 방향키 : 복사 영역 선택 (라인 단위)
:1,.d : 첫번째 라인 부터 현재 라인까지 삭제
:.,$d : 현재 라인 부터 마지막 라인까지 삭제
r + 한 글자 입력 : 한 글자 교체
8r + 8글자 입력 : 8글자 교체
R : 덮어쓰기 (ESC 입력시 종료)
C : 커서 에서 부터 라인끝 까지 교체 (ESC 입력시 종료)
S : 전체 라인을 교체 (ESC 입력시 종료)
4S : 4라인 교체 (ESC 입력시 종료)
cw : 단어 교체 (ESC 입력시 종료)
:\[begin,end\]s/pattern1/pattern2/flag
pattern1을 pattern2로 변경
\[begin,end\] ⇾ 변화 적용 범위
% : 파일 전체 Ex) :%s/love/hate/g ⇾ 파일 전체에서 love를 hate로 변경
$ : 마지막 라인 Ex) :$s/love/hate/g ⇾ 마지막 라인에서 love를 hate로 변경
. : 현재 라인 Ex) :.s/love/hate/g ⇾ 현재 라인에서 love를 hate로 변경
begin,end : 시작 라인에서 끝 라인 Ex) :1,10s/peterpan/hook/g ⇾ 1~10 번째 줄에서 peterpan을 hook으로 변경
flag
g : global ⇾ 모든 케이스, g 옵션이 없으면 첫 번째 값에만 변화 적용 Ex) :%s/love/hate/g ⇾ 파일 전체에서 love를 hate로 변경 모두 변경
c : 물어 봄 Ex) :%s/love/hate/gc ⇾ 파일 전체에서 love를 hate로 모두 변경하는데, 변경할 때 변경할지 물어 봄
u : 삽입 모드에서 마지막 변경 사항 실행 취소
Ctrl + r : 실행 취소 된 마지막 변경 사항 다시 실행
. : 마지막 명령어 반복
\*텍스트 검색 (line mode)\*
/ 또는 ? 사용
/love : 위로 이동하면서 love를 찾기
?love : 아래로 이동하면서 love 찾기
n : 검색 반복, 위에 명령어 입력 후 단어 찾을 때, 검색 결과에서 한 칸씩 아래로 내려감
:begin,endw filename : begin line ~ end line의 내용 filename으로 저장 Ex) 3,5w test ⇾ 3~5줄 내용 test 파일명으로 저장
:1,. filename : 첫번째 라인 부터 현재 라인 까지 내용 filename으로 저장
:1,.w! filename : 첫번째 라인 부터 현재 라인 까지 내용 filename으로 저장(해당 파일이 이미 존재해서 덮어 쓸때 사용)
:1,.w >> filename : 첫번째 라인부터 현재 라인까지 텍스트 추가
:3,$w >> filename : 3번째 라인부터 마지막 라인 까지 filename으로 저장
:r filename : filename 파일 읽기
:e filename : 현재 파일 편집 종료
:! command : 쉘 명령어 실행 Ex) :! ls
:r! command : 쉘 명령어 실행하고 결과를 파일에 붙여넣음
Ex) :r! ls -al
:set number / :set nonumber ⇾ 라인 넘버 보여주기 / 숨기기
:set list / set nolist ⇾ 특별한 문자 보여주기 Ex) end of the line ($)를 보여줌 (우분트는 \\n가 $ 임)
:set tabstop= number ⇾ 탭 스페이스 간격 조정 Ex) set tabstop=4 (Tab 입력시 4칸의 공백이 입력 됨)
:%s/word/
Ex)
:%s/Geography// ⇾ Geography 찾아 첫 단어만 삭제
:%s/Geography//g ⇾ Geography 찾아 모든 단어 삭제