[Linux] 3. 문서 편집하기
1. 리눅스의 문서 편집기
리눅스 편집기 종류
- 행 단위 편집기(라인 편집기), 화면 단위 편집기
행 단위 편집기 (Unix 부터 사용)
ed, ex, sed
화면 단위 편집기 (Unix 부터 사용)
vi(vim)
: 리눅스(유닉스)에서 일반적으로 사용할 수 있는 화면 편집기 - vim 은 전부 있다(별도 설치 X)emacs
: 가장 강력한 기능을 제공하지만 사용법이 어렵고 복잡하여 전문적인 애호가 위주 사용(별도 설치 필요)nano
: 리눅스에서 일반적으로 사용 가능하며 초기에 사용하기가vi/emacs
보다 매우 편리(윈도우 노트패드 비슷)gedit
: 리눅스 GUI 기반의 편집기로 편리하며 마우스 사용 가능(누구나 사용 가능) - Ubuntu 에서 사용 가능
모드 형과 비모드형 편집기
모드(mode)형 편집기 (입력모드와 명령모드 구분)
입력모드
: 텍스트를 입력할 수 있는 모드명령모드
: 텍스트 수정, 삭제, 복사와 붙이기 등을 수행하는 편집 명령 모드- vi(vim)은 모드형 편집기
비모드형 편집기 (입력모드와 명령모드 구분이 없음)
- 입력모드와 명령모드가 구분되어 있지 않음
- 편집 명령이
Ctrl
이나Alt
같은 특수 키와 함께 사용 - nano, gedit, 아래한글, 워드, 메모장은 비모드형 편집기
2. vi 사용법
vi의 동작 모드 (명령모드, 입력모드, 마지막행모드)
vi 시작하고 종료하기
vi 시작
- 파일이름 지정할 경우: 해당 파일이 있으면 그 파일이 열리고, 없는 파일이면 빈 파일이 열림
-
파일이름 지정하지 않을 경우: 그냥 빈 파일이 열림(파일명은 저장할 때 지정 가능)
$ vi test.txt
-> test.txt 파일이 열린다. 이 파일이 없으면 빈 파일이 열림$ vi
-> 빈 파일이 열린다
파일 저장 및 종료
(:q, :q!, :w, :w [파일명], :wq, :wq [파일명], ZZ
)
vi 종료
- 명령 모드나 마지막 행 모드에서 저장하고 종료 가능
모드 | 명령 키 | 기능 |
---|---|---|
마지막 행 모드 | :q | vi에서 작업한 것이 없을 때 그냥 종료 |
마지막 행 모드 | :q! | 작업한 내용을 저장하지 않고 종료(강제종료) |
마지막 행 모드 | :w[파일명] | 작업한 내용을 저장만 한다. 파일명을 지정하면 새 파일로 저장 |
마지막 행 모드 | :wq, :wq! | 작업한 내용을 저장하고 vi를 종료 |
명령 모드 | ZZ(shift+zz) | 작업한 내용을 저장하고 vi를 종료 |
입력 모드로 전환하기
(i, a, o, I, A, O)
입력 모드에서 다시 명령모드로 전환: ESC
명령 키 | 기능 |
---|---|
i | 커서 앞에 입력(현재 커서 자리에 입력) |
a | 커서 뒤에 입력(현재 커서 다음 자리에 입력) |
o | 커서가 위치한 행의 다음 행에 입력 |
I(i) | 커서가 위치한 행의 첫 칼럼으로 이동하여 입력 |
A | 커서가 위치한 행의 마지막 칼럼으로 이동하여 입력 |
O | 커서가 위치한 행의 이전 행에 입력 |
i 명령 키를 사용해 입력 모드로 전환 (현재 커서 자리에 입력)
vi
를 실행한 뒤 명령 모드에서i
명령 키를 입력하고 나서 다음 내용 입력- 다음 행으로 이동은
Enter
키를 누르면 됨ubuntu linux study # Enter 키를 누르면 다음 행으로 이동 I like linux # Esc 키를 누르면 명령 모드로 전환 ~ ~
- 입력하다가,
ESC
키를 누르면 명령 모드로 다시 전환 ESC
키를 누르면 x 자 위로 이동하며 명령 모드 실행ubuntu linux study I like linux # 명령 모드로 전환되고 커서가 x로 이동 ~ ~
i
와 a
명령, I
와 A
명령 키의 차이
i
는 커서 앞에,a
는 커서 뒤에 새로운 문자를 입력I
는 커서가 위치한 행의 첫 컬럼에,A
는 커서가 위치한 행의 마지막 컬럼에 문자를 입력
o
와 O
명령 키의 차이
o
는 커서가 위치한 행의 다음 행을 추가하여,O
는 커서가 위치한 행의 이전 행을 추가하여 문자를 입력
커서 이동하기 (커서 이동 명령 키)
(h, j, k, l, 0, $)
명령 키 | 기능 |
---|---|
k | 커서를 한 행 위로 이동 |
i | 커서를 한 행 아래로 이동 |
l | 커서를 한 글자 오른쪽으로 이동 |
h | 커서를 한 글자 왼쪽으로 이동 |
^ 또는 0 | 커서를 현재 행의 처음으로 이동 |
$ | 커서를 현재 행의 마지막으로 이동 |
화면 이동하기
(Ctrl+b, Ctrl_f)
- 파일 크기가 터미널의 화면 크기보다 클 경우 화면을 이동시키기 위한 명령
기존 명령 키 | 기능 | 추가 명령 키 |
---|---|---|
^u (Ctrl+u) | 반 화면 위로 이동 | |
^d (Ctrl+d) | 반 화면 아래로 이동 | |
^b (Ctrl+b) | 한 화면 위로 이동 | page up |
^f (Ctrl+f) | 한 화면 아래로 이동 | page down |
^y (Ctrl+y) | 화면을 한 행만 위로 이동 | |
^e (Ctrl+e) | 화면을 한 행만 아래로 이동 |
특정 행으로 바로 이동하기
- 원하는 행으로 커서를 바로 이동
- 명령모드에서
50G
(50행으로 이동) - 마지막 행 모드에서
:50 Enter
(50행으로 이동),:$
(마지막 행으로 이동)
명령 키 | 기능 |
---|---|
G(Shift+g) | 파일의 마지막 행으로 커서이동 |
:$ | 파일의 마지막 행으로 커서가 이동 (마지막 행 모드) |
행 번호G(Shift+g) | 지정한 행 번호로 커서가 이동 |
:행 번호 | 지정한 행 번호로 커서가 이동 (마지막 행 모드) |
내용 수정하기 (내용 수정 명령 키)
(r, cw, #s)
명령 키 | 기능 |
---|---|
r | 커서가 위치한 글자를 다른 글자로 수정 |
cw,#cw | 커서 위치부터 현재 단어의 끝까지 수정. # 에는 수정할 단어의 수를 지정(3cw- 커서 위치부터 세 단어 수정) |
s,#s | 커서 위치부터 Esc 키를 입력할 때까지 수정. # 에는 수정할 글자의 수를 지정(5s- 커서 위치부터 다섯 글자 수정) |
cc | 커서가 위치한 행의 내용을 모두 수정 |
C | 커서 위치부터 행의 끝까지 수정 |
한 글자 수정하기
(r 명령 키)
- rewrite
- 수정되는 글자 위에 커서를 놓은 후 r 명령 키 입력 후, 바꾸려는 새 글자 입력
- r 명령 키는 계속 명령 모드를 유지 하므로 수정한 후
Esc
키를 누를 필요 없음
ubuntu winux study # -> r 명령 키로 글자를 수정한다(l->w)
I like linu unbuntu linux
~
단어 수정하기
(cw, #s 명령 키)
- 단어를 바꿀 때는
cw
명령 키나#s
명령 키를 사용 vi
에서는 단어를 공백문자나 특수문자로 구별함winux
를 다른 단어로 바꾸려면cw
명령 키나, 글자 수가 다섯개이므로5s
로 수정- 수정 완료 후,
Esc
키를 눌러 명령 모드로 전환 필요 - cw - cancle word 라고 생각, s 는 sutja 숫자 sujung 수정
ubuntu winu$ study # -> cw 명령 키 입력 시 x가 $로 바뀌어 수정할 부분을 나타낸다
I like linu ubuntu linux
~
ubuntu editor study # -> 수정 완료 후 Esc 키를 눌러야 명령 모드로 전환된다
I like linu ubuntu linux
~
r
: 커서가 있는 한 글자 수정
cw
: 커서가 있는 한 단어 수정
#s
: 숫자가 있는 만큼 수정
내용 삭제하기
(#x, #dd)
명령 키 | 기능 |
---|---|
x,#x | 커서가 위치한 글자를 삭제한다. # 에는 삭제할 글자 수를 지정한다 |
dw,#dw | 커서 위치의 단어를 삭제한다. # 에는 삭제할 단어 수를 지정한다 |
dd,#dd | 커서 위치의 행을 삭제한다. # 에는 삭제할 행의 수를 지정한다 |
D(Shift+d) | 커서가 위치부터 행의 끝까지 삭제한다 |
글자 삭제하기
(x, #x)
- x 명령 키로 현재 커서가 놓인
l
한 글자만 삭제
ubuntu editor vi study
I like linu ubuntu linux
~
ubuntu editor vi study
I like inu ubuntu linux # -> x 명령 키로 커서 위치의 1을 삭제한다
~
- 위에서 inu를 모두 지우려면
3x
명령키 사용(3칸 삭제)
ubuntu editor vi study
I like ubuntu linux # -> 3x로 삭제하면 커서가 공백문자에 위치한다
~
ubuntu editor vi study
I like inu ubuntu linux # -> dw로 삭제하면 커서가 다음 단어의 첫 글자로 이동한다
~
행 삭제하기 (잘라내기)
(dd, #dd)
- 커서가 위치한 전체 행을 지우려면
dd
명령 키를 입력 - dd 는 delete delete 뜻으로 행 삭제
ubuntu editor vi study
~
명령 취소하기
(u, U, :e!)
- u는 u턴이라고 생각(되돌리기)
명령 키 | 기능 |
---|---|
u | 명령을 취소한다 |
U | 해당 행에서 한 모든 명령을 취소한다 |
:e! | 마지막으로 저장한 내용 이후의 것을 버리고 새로 작업한다 |
- u 명령 키를 입력하면 앞의 예에서 삭제되었던 행이 복구
ubuntu editor vi study
I like
~
복사하기 또는 잘라서 붙이기
(yy, #yy, dd, #dd, p, P)
명령 키 | 기능 |
---|---|
yy,#yy | 커서가 위치한 행을 복사, # 에는 복사할 행의 수를 지정 - 흡사 Ctrl+C |
p | 커서가 위치한 행의 아래쪽에 붙임 - 흡사 Ctrl+v(p) |
P | 커서가 위치한 행의 위쪽에 붙임 |
dd,#dd | 커서가 위치한 행을 잘라둔다. 삭제와 같은 기능 # 에는 잘라둘 행의 수 - 흡사 Ctrl+x |
복사해서 붙이기 예 (#yy -> p
)
- 현재 커서가 있는 행을 복사하려면
yy
명령 키 입력 (임시 버퍼에 행이 저장됨) - 현재 커서 포함 두 행을 함께 복사하려면
2yy
입력 2yy
로 두 행을 복사한 다음 아랫 행으로 이동하여p
명령 키로 붙이기- yy는 cop(y) 복사(y가 끝까지니깐
행 복사
)라고 생각
ubuntu editor vi study
I like
ubuntu editor vi study
I like
~
잘라내기 붙이기 예 (dd -> p
)
dd
는 엄밀히 말하면 행 잘라내기 (임시 버퍼에 행이 저장)- 3행을 잘라 2행 위에 붙이기
dd
를 입력한 다음 커서를 2행으로 이동하여P
입력ubuntu editor vi study ubuntu editor vi study I like I like ~
마지막 행 모드에서 복사하기, 잘라내기, 붙이기
(:<범위>y, :<범위>d, :pu, :#pu
)
:1,2y
:pu
:4pu
- 마지막 행 모드에서 행을 복사하거나 잘라낼 때는 범위를 지정 범위 지정 명령 키
명령 키 | 기능 |
---|---|
1,$ 또는 % | 1행부터 마지막 행까지 지정 |
1.. | 1행부터 커서가 있는 행까지 지정 |
..$ | 커서가 있는 행 부터 마지막 행까지 지정 |
.-3 | 현재 행과 이전 세 행까지(총 네 행) 지정한다 |
10,20 | 10행부터 20행까지 지정 |
:<범위>y범위> | 범위로 지정한 행을 복사. 예를들면 :2,4y -> 2~4행 반복 |
:<범위>d범위> | 범위로 지정한 행을 자름, 예를들면 :1,4d 는 1~4행을 자름 |
:pu | 커서가 위치한 행의 위쪽에 붙임 |
네임드 버퍼 사용하기
("버퍼이름yy 또는 "버퍼이름dd -> "버퍼이름p)
언네임드 버퍼 (이름을 붙이지 않은 버퍼)
- yy로 복사하거나 dd로 잘라내기를 할 경우, 복사하거나 잘라낸 내용이 저장
- 언네임드 버퍼는 내용을 하나만 저장
네임드 버퍼 (이름을 붙여서 사용할 수 있는 버퍼)
- 각각 다른 이름을 붙인 버퍼에 독립적으로 내용을 저장하고 사용
- 네임드 버퍼의 이름은 한 글자만 지정
"버퍼 이름yy
를 입력하여 커서가 위치한 행을 저장- a 버퍼에 복사한 내용을 저장하려면
"ayy
입력 - 네임드 버퍼의 내용을 붙여 넣기 하려면
"ap
와 같이"버퍼 이름p
를 입력 "(버퍼 이름)(몇행)yy
네임드 버퍼 사용
ubuntu editor vi study
ubuntu editor vi study
I like
I like
~
- 커서를 1행으로 이동하여 2행을 복사해서 a 버퍼에 저장
("a2yy)
- 커서를 3행으로 이동하여 다시 2행을 복사해서 b 버퍼에 저장
("b2yy)
- 커서를 4행으로 이동하여 a 버퍼의 내용을 붙여넣기
("ap)
- 커서를 4행으로 이동하여 b 버퍼의 내용을 붙여넣기
("bp)
검색하기
(/문자열, ?문자열, n, N)
- 문자열의 아래 방향 검색:
/
, 문자열의 위 방향 검색:?
명령 키 | 기능 |
---|---|
/문자열 | 문자열을 아래 방향으로 검색 |
?문자열 | 문자열을 위 방향으로 검색 |
n | 원래 찾던 방향으로 다음 문자열을 검색 |
N | 반대 방향으로 다음 문자열을 검색 |
I like
I like
ubuntu editor vi study
ubuntu editor vi study
I like
I like
~
(생략)
/ike
- 커서가 6행에 있을 때 검색하기 위해
/
을 입력하고 검색할 문자열인like
입력하고Enter
키를 누르면 위치보다 뒤쪽에 위치한like
로 커서가 이동 (/like
) - 계속
like
를 검색하려고n
을 입력하면, 6행이 파일의 마지막 행이므로 BOTTOM, countinuing at TOP이라는 메세지를 출력하고 1행의like
로 커서 이동 (n
)
바꾸기
:s/문자열1/문자열2/gc , :%s/문자열1/문자열2/gc , :<범위>s/문자열1/문자열2/gc
- 기존의 문자열을 다른 문자열로 바꾸려면 먼저
:
을 입력하여 마지막 행 모드로 이동 - 커서 위치의 문자열만 바꿀 수도 있고, 파일 전체나 특정 범위 내에서 해당하는 문자열을 모두 바꿀 수도 있음
바꾸기 명령 키
명령 키 | 기능 |
---|---|
:s/문자열1/문자열2/ | 커서가 위치한 행에서 첫 번째로 나오는 문자열1을 문자열2로 바꾼다(한 행만) |
:%s/문자열1/문자열2/g | 파일 전체에서 모든 문자열1을 문자열2로 바꾼다(전체문서) |
:<범위>s/문자열1/문자열2/범위> | 범위 내 모든 각 행에서 첫 번째로 나오는 문자열1을 문자열2로 바꾼다 |
:<범위>s/문자열1/문자열2/g범위> | 범위 내 모든 행에서 문자열1을 문자열2로 바꾼다 |
:<범위>s/문자열1/문자열2/gc범위> | 범위 내 모든 행에서 문자열1을 문자열2로 바꿀 때 수정할지 여부를 묻는다 |
ex) :%s/문자열1/문자열2/g == :1,$s/문자열1/문자열2/g
<- 1,$ == % (1~마지막행. 즉 전체를 뜻)
i love linux
i love to linux
# 모든 행에서 바꾸고 싶다면, 각 행은(g를 안붙임), 모든 것에서 여부 물을 때는(`gc`)
:%s/linux/LINUX/g
i love LINUX
i love to LINUX
파일 읽어오기, 여러 파일 편집하기
(:r 파일이름, :e 파일이름)
파일 관련 명령 키
명령 키 | 기능 |
---|---|
:r 파일 | 지정한 파일을 읽어들여 현재 커서 위치에 삽입 |
:e 파일 | 지정한 파일로 전환한다(기존 파일을 :w로 저장한 뒤에 실행 |
:n | 원래 vi 시작 시 여러 파일을 지정했을 경우 다음 파일로 작업을 이동 |
두 파일을 열 경우, :n 을 통해 다음 파일로 작업을 이동 |
다른 파일 읽어오기
(:r 파일)
- 먼저 test.txt 파일을 열고 커서를 4행으로 이동
:r test.txt
를 실행하면exec2.txt
파일 내용이test.txt
파일의 4행 다음에 삽입
I LIKE
I LIKE
UBUNTU ubuntu
UBUNTU ubuntu # 이 행에서 실행
I LIKE
==>
I LIKE
I LIKE
UBUNTU ubuntu
UBUNTU ubuntu
Good afternoon # 그 다음 행에서 exec3.txt 파일이 삽입
This is a living room
My name is
I LIKE
파일 편집을 마치고 다른 파일 편집하기
(:e 파일)
- e는 현재 작업 중인 파일 작업을 마치고 다른 파일을 편집하려고 할 때 사용
- test.txt 파일 편집 완료하고 exec2.txt 파일 편집으로 바꾸려면
:e exec2.txt
사용 - 작업 중이던 파일은 먼저 저장(
:w
) 하고:e
명령을 실행 - 그렇지 않으면 오류 발생
여러 파일 편집하기
(:n)
- vi를 시작할 때 파일명을 여러 개 지정하여 시작
$ vi test.txt exec2.txt
- 파일 작업을 마치고 다음 파일로 이동하려면
:n
입력
vi 에서 셸 명령 사용하기
(:! 셸 명령, :sh)
셸 명령 실행 명령 키
명령 키 | 기능 |
---|---|
:! 셸 명령 | vi 작업을 잠시 중단하고 셸 명령을 실행한다 (vi로 돌아오려면 Enter 키를 누른다) |
:sh | vi 를 잠시 빠져나가서 셸 명령을 실행한다 (vi로 돌아오려면 exit 명령을 입력한다) |
- :! 명령 키 사용 예 (
:! ls
) - 하나 셸 작업 :!
셸 명령은 하나의 셸 명령만 실행하고 바로 vi 로 돌아와야 함
(생략)
~
~
:! ls
==>
user1@myubuntu:~/linux_ex/ch3$ vi test.txt # vi 를 빠져나가지 않고 바로 이용
exec.txt exec2.txt exec3.txt
Press Enter or type command to continue # 다시 vi 작업으로 돌아가려면 Enter 키 입력
- vi 에서 셸 명령 사용하기 (
:sh
) - 여러 셸 작업 :!
셸 명령은 하나의 셸 명령만 실행하고 바로 vi 로 돌아와야 함 (해결 -:sh
)- 실행할 셸 명령이 여러 개이면
:sh
를 이용하여 vi를 잠시 빠져나가 여러 개의 셸 작업을 모두 수행하고 다시 돌아옴
(생략)
~
~
:sh
==>
user1@myubuntu:~/linux_ex/ch3$ ls
exec.txt exec2.txt exec3.txt
user1@myubuntu:~/linux_ex/ch3$ exit # 다시 vi로 돌아오기 위해서는 exit 입력
3. vi 환경 설정
vi의 환경 설정 방법 (환경 설정은 사용자에게 유용)
1) vi의 마지막 행 모드에서 명령으로 설정 (vi 종료 시에 설정이 해제)
2) 사용자 홈 디렉터리에 .exrc
파일로 저장
3) 환경 변수 EXTINIT
에 지정 (4장에서 배움)
vi 환경 설정 명령 (set
)
명령 키 | 기능 |
---|---|
set nu | (nu는 number) 파일 내용의 각 행에 행 번호를 표시한다(보이기만 할 뿐 저장되지는 않는다) |
set nonu | 행 번호를 감춘다 |
set list | 눈에 보이지 않는 특수문자를 표시한다(tab:^ㅣ, eol:$ 등) |
set nolist | 특수문자를 감춘다 |
set showmode | 현재 모드를 표시한다 |
set noshowmode | 현재 모드를 감춘다 |
set | set으로 설정한 모든 vi 환경 설정 값을 출력한다 |
set all | 모든 vi 환경 변수와 현재 값을 출력한다 |
vi 내에서 명령으로 설정하기
- 행 번호 표시하기/감추기 - (
:set nu, :set nonu
)
# 파일: exec2.txt
I LIKE
I LIKE
UBUNTU ubuntu
UBUNTU ubuntu
I LIKE
~
:set nu
==>
# set nu 실행 후
1 I LIKE
2 I LIKE
3 UBUNTU ubuntu
4 UBUNTU ubuntu
5 I LIKE
~
:set nu
- 특수문자 표시하기/감추기 - (
:set list, :set nolist
) - 행의 끝이나 탭 같은 특수 문자는 vi에서 보이지 않으며, 이런 특수 문자를 보려면,
:set list
명령 입력 ($는 행의 끝, ^|(+대문자 i)는 탭을 의미)
# 파일: exec2.txt
I LIKE
I LIKE
UBUNTU ubuntu
UBUNTU ubuntu
I LIKE
~
:set list
==>
# set list 실행 후
I LIKE.$
I LIKE.$
UBUNTU ubuntu.$
UBUNTU ubuntu.$
I LIKE.$
~
:set list
- 입력모드 표시하기/감추기 - (
:set showmode, :set noshowmode
)
.exrc 파일에 설정하기
- 사용자 홈 디렉터리에
.exrc
파일을 생성하여 설정을 저장 - 파일에는
set 명령
과옵션
만 지정 - 이 파일이 있을 경우 해당 사용자가 vi를 시작할 때마다 모든 파일에 동일하게 설정이 적용
set nu
set list
set showmode
EXINIT 환경 변수에 설정하기 (4장 (셸 사용하기)
)
- vi 환경 설정은 다음과 같이 셸의 환경 변수인
EXINIT
에도 가능$ EXINIT='set nu list' $ export EXINIT $
요약
- vi 동작모드 (
명령 모드, 입력 모드, 마지막행 모드
) - vi 명령 (
모드 전환, 커서 이동, 화면 이동, 수정/삭제, 복사, 잘라내기, 붙이기, 검색, 바꾸기, 기타 명령
) - vi 환경 설정 (
명령모드에서, .exrc 파일 생성, 환경변수 EXINIT 이용
)
댓글남기기