11 분 소요

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로 이동
    ~
    ~
    

ia 명령, IA 명령 키의 차이

  • i는 커서 앞에, a는 커서 뒤에 새로운 문자를 입력
  • I는 커서가 위치한 행의 첫 컬럼에, A는 커서가 위치한 행의 마지막 컬럼에 문자를 입력

oO 명령 키의 차이

  • 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 이용 )

태그: ,

카테고리:

업데이트:

댓글남기기