04 Text Editors

Sisyphus·2022년 7월 16일

Ubuntu

목록 보기
5/9

VI and VIM

console-based text editor  
read, write permission 필요  
파일이 없을 경우 임시적으로 파일을 오픈하고 저장하면 파일을 생성 함  
command : vi filename  
\-R 옵션 : 읽기 전용  


open ways

vi + filename : 커서를 파일 마지막줄에 위치시킴  
vi +n filename : n번째 줄에 커서를 위치시킴  
vi + / pattern filename : 해당 pattern이 포함된 라인 앞에 커서 위치  
ex) vi +/python text : text 파일에서 python이 포함된 라인 앞에 커서 위치  


VI에서 나가기

:w filename편집된 파일을 해당 filename으로 저장 후 종료
:w!읽기 전용으로 된 파일에 쓰기 (해당 디렉토리에 write 권한이 없으면 text file 쓰기 불가. 그러나 w!사용시 쓰기 가능, 쓰려면 root 권한 or 파일 소유권(파일 생성자)이 필요 함.)
:q파일이 이미 저장된 경우 종료
:wq편집된 파일 저장하고 종료
: q!변경사항 저장 없이 종료
ZZwq와 동일


텍스트 파일 복구

vi 편집기에서 내용 작성시 해당 내용을 .filename.swp 파일에서 임시적으로 저장하고 있음  

1. ls -al 명령어로 숨겨진 swp 파일 찾기  
2. cp .filename.swp .savename.swp ⇾ swp 파일을 복사하기  
3. vi -r 복사파일 ⇾ 복사한 파일을 vi -r 옵션으로 열기  
4. Enter 입력하기  

⇾ 전에 작성했던 내용들이 복구 됨  


VI 3가지 모드

insert mode : 텍스트 편집, Press "i"  
command mode : 초기 모드, Press "ESC"  
line mode : 명령어를 입력받아 복잡한 기능을 수행하기 위한 모드, Press ":"  


커서 이동 (command mode)

VI 편집기 ⇾ 마우스 사용 불가, 키보드를 이용해야 함

h : left  
l : right  
k : up  
j : down  
J : 두줄로 되어 있는 문장을 한 줄로 된 문장으로 바꾸기 (라인 합치기)   
H : high ⇾ 첫번째 라인  
M : middle ⇾ 중간 라인  
L : low ⇾ 마지막 라인  
\- : 이전 라인  
+ : 다음 라인  
G : 마지막 라인으로  
1G : 첫번째 라인으로  
12G : 12번째 라인으로  
$ : 마지막 라인으로  
^ : 시작 라인으로  
Ctrl + b : 한 페이지 뒤로  
Ctrl + f : 한 페이지 앞으로  


이동 (line mode)

:n : n번째 라인으로 이동  
:$ : 마지막 라인으로 이동  
:$= : 파일의 전체 라인 수를 출력  
:.= : 현재 라인 번호를 출력  


텍스트 삽입 (insert mode)

i : 현재 커서 위치에서 부터 입력  
a : 현재 커서 한칸 뒤에서 부터 입력  
I : 현재 커서 한칸 앞에서 부터 입력  
A : 현재 라인 마지막에서 부터 입력  
o : 현재 커서 한칸 아래에서 부터 새 라인으로 입력  
O : 현재 커서 한칸 위에서 부터 새 라인으로 입력  


자르기, 복사, 붙이기 (command mode)

자르기 == 삭제 ⇾ 삭제를 하면 삭제한 내용이 임시적으로 메모리에 저장되어 있기 때문에 붙여넣기 하면 삭제한 내용이 붙여넣기 됨

x : 한 글자 삭제  
24x : 24글자 삭제, (36x는 36글자 삭제)  
dd : 현재 라인 삭제  
4dd : 4라인 삭제, (2dd는 2라인 삭제)  
D : 커서에서 라인 끝까지 삭제  
dw : delete, word ⇾ 현재 단어 삭제  
yy : 현재 라인 복사  
5yy : 5라인 복사  
p : 현재 커서 뒤에 붙여넣기  
P : 현재 커서 이전에 붙여넣기  
v + 방향키 : 복사 영역 선택 (글자 단위)  
V + 방향키 : 복사 영역 선택 (라인 단위)  


텍스트 삭제 (command mode)

:1,.d : 첫번째 라인 부터 현재 라인까지 삭제  
:.,$d : 현재 라인 부터 마지막 라인까지 삭제  


텍스트 교체 (command mode)

r + 한 글자 입력 : 한 글자 교체  
8r + 8글자 입력 : 8글자 교체  
R : 덮어쓰기 (ESC 입력시 종료)  
C : 커서 에서 부터 라인끝 까지 교체 (ESC 입력시 종료)  
S : 전체 라인을 교체 (ESC 입력시 종료)  
4S : 4라인 교체 (ESC 입력시 종료)  
cw : 단어 교체 (ESC 입력시 종료)  


텍스트 교체 (line mode)

:\[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로 모두 변경하는데, 변경할 때 변경할지 물어 봄  


변경 사항 취소 (command mode)

u : 삽입 모드에서 마지막 변경 사항 실행 취소  
Ctrl + r : 실행 취소 된 마지막 변경 사항 다시 실행  
. : 마지막 명령어 반복  


\*텍스트 검색 (line mode)\*  
/ 또는 ? 사용  
/love : 위로 이동하면서 love를 찾기  
?love : 아래로 이동하면서 love 찾기  
n : 검색 반복, 위에 명령어 입력 후 단어 찾을 때, 검색 결과에서 한 칸씩 아래로 내려감


저장 옵션 (line mode)

:begin,endw filename : begin line ~ end line의 내용 filename으로 저장 Ex) 3,5w test3~5줄 내용 test 파일명으로 저장  
:1,. filename : 첫번째 라인 부터 현재 라인 까지 내용 filename으로 저장  
:1,.w! filename : 첫번째 라인 부터 현재 라인 까지 내용 filename으로 저장(해당 파일이 이미 존재해서  덮어 쓸때 사용)  
:1,.w >> filename : 첫번째 라인부터 현재 라인까지 텍스트 추가  
:3,$w >> filename : 3번째 라인부터 마지막 라인 까지 filename으로 저장  


기타 명령어 (line mode)

:r filename : filename 파일 읽기  
:e filename : 현재 파일 편집 종료  
:! command : 쉘 명령어 실행 Ex) :! ls  
:r! command : 쉘 명령어 실행하고 결과를 파일에 붙여넣음
Ex) :r! ls -al  


VI 구성(line mode)

: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 찾아 모든 단어 삭제

0개의 댓글