본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스, 유닉스]vi (vim) 편집기 기본 사용법, 명령어, 단축키, 동작법 & 문제

[리눅스 / 유닉스 / 셸 프로그래밍 완전 정복 목차 바로가기 ]

가장 많이 사용되고, 꼭 알아야 하는 ~

vi 편집기 사용하기

vi는 다른 편집기들과는 다르게 모드형 편집기라는 특징이 있습니다. (명령 모드, 입력 모드, ex 명령 모드가 있어요)

 

우선 vi에디터를 시행해볼까요?

Desktop에서 terminal에 들어간 후 vi라고 명령어를 입력하면

이와 같이 뜹니다. 저 화면이 출력해준 것처럼 vi 에디터는 기존 vi 에디터의 기능을 향상시킨 vim 에디터가 정확한 명칭입니다. 하지만 vi라고 입력해도 자동으로 vim 에디터가 실행되므로 앞으로 vi 에디터라고 부를게요~

vi는 리눅스 유닉스 시스템에 포함된 기본 에디터예요 그래서 GUI환경에서도 X윈도를 사용하지 않는 텍스트 모드에서도 다 작동됩니다. 

오늘 포스팅은 이전번에 설치했던 우분투 서버 텍스트 모드 환경에서 실습해볼게요~

 

vi 시작하기

# vi

를 입력하면 vi에디터가 실행됩니다.

 

이렇게 시작하자마다 접하게 되는 모드를 '명령 모드'라고 해요.

이 모드에서는 글자를 입력할 수 없고 vi에디터로 어떤 일을 하게 될지 명령을 기다립니다.

 

vi 종료하기

먼저 vi를 종료해볼까요?

:q를 입력하면 화면의 왼쪽 아래에 글자가 입력되고 커서가 깜박일텐데 이렇게 작동하는 모드를 'ex모드' 또는 '라인 명령 모드'라고 합니다.

:q를 누른 후 엔터를 누르면 vi편집기가 종료됩니다.

:q!는 변경된 내용이 있더라도 저장하지 않고 무조건 종료시키는 거~

:wq는 변경된 내용을 저장하고 종료합니다.

 

파일 만들기 & 편집하기 

이번에는 vi에디터로 새로운 파일을 만들어볼게요 

# vi new.txt

를 입력하면 빈 화면이 열리고 왼쪽 아래에 "new.txt" [New File] 이라는 문구가 있는 명령 모드로 들어옵니다.

 

'vi [파일명]'을 콘솔 창에 입력하면 이 파일명의 파일이 존재하면 그 파일을 열어서 보여주고 

존재하지 않을 경우 해당 파일명과 동일한 이름을 갖는 새 파일을 생성해줍니다.

이 상태에서 i또는 a또는 o를 누르면 저'new.txt' [New File] 부문이

'-- INSERT --'로 바뀌는데 이 상태가 되면 글자를 입력할 수 있습니다. 이 상태를 '입력 모드'라고 해요.

글자를 입력 한 후 esx를 누르면 명령 모드로 돌아올 수 있습니다.

 

모드가 왔다갔다 변경이 되어서 조금 혼란스럽죠?

vi의 기본 동작법을 정리해보자면 

이렇게 정리할 수 있어요~!

 

표로 정리한 vi 모드

모드

 역할 및 특징 

 명령 모드 

 vi를 실행시키면 가장 먼저 접하는 기본이 되는 모드로 커서의 이동, 수정, 삭제, 복사 붙이기, 탐색   등을 한다. 입력 모드 전환키인 i,a,o,I,A,O 등을 입력하면 입력 모드로 전환되고, 

 명령 모드로 다시 전환하려면 [Esc] 키를 누르면 된다.

 입력 모드

 입력 모드 이외에도 편집 모드, input mode, insert mode 등으로 불리며, 

 글자를 입력하는 문서를 만드는 모드이다. 

 명령 모드에서 입력 전환키를 눌러서 전환하면 화면 아래에 '-- INSERT --'라고 표시된다. 

 ex 명령 모드

 명령 모드에서 ':'키를 입력했을 때 화면 맨 아랫줄에서 명령을 수행하는 모드로

 저장, 종료, 탐색, 치환 및 vi 환경 설정 등의 역할을 하는 모드이다.

기본적인 vi 사용법에 대해서 알아보았어요. 그런데 vi 에디터는 정말 많은 기능을 부가적으로 제공한다는 사실!

 

vi 편집기를 200퍼센트 활용하기 위한

명령어(단축키)에 대해서 알아보자

입력 모드 전환 명령어

먼저 입력 모드로 들어가기 위해 i,a,o,I,A,O가 있다고 했는데 각각 무슨 차이일까

 i

 현재 커서의 위치부터 입력 

 I

 현재 커서 줄의 맨 앞에서부터 입력 ( shift + i ) 

 a

 현재 커서의 위치 다음 칸부터 입력  

 A  

 현재 커서 줄의 맨 마지막부터 입력 ( shift + a) 

 o  

 현재 커서의 다음 줄에 입력  

 O 

 현재 커서의 이전 줄에 입력 ( shfit + o ) 

 s 

 현재 커서 위치의 한 글자를 지우고 입력 

 S 

 현재 커서의 한 줄을 지우고 입력 ( shift + s ) 

근데 사실 저는 i와 a만 주로 사용합니다. ㅎㅎ

 

커서 이동 명령어

사실 커서 이동은 키보드의 4개 화살표를 이용해서 이동하면 됩니다

페이지 단위로 이동하고 싶을 때는 pageUp / PageDown 만 알면 커서이동은 뭐.. 다 이동할 수 있죠..ㅎ

 

그런데 이 외에도 커서 이동 명령어가 vi에 많이 존재하는데 아주 오래전에 만들어진 키보드에는 화살표 키나 저런 페이지업/다운 키가 없었기에 만들어졌던 기능들입니다. 그래도 알아두면 기본적인거 아는거보단 빠르게 쓸 수 있겠죠?

(참고로 리눅스유닉스의 어떤OS의 경우는, 페이지가 한 번 보여진 경우에 한에서 페이지 업다운이 가능한 경우가 있습니다. 그러므로 페이지 넘김에 대해서는 Ctrl+f와 Ctrl+b로 사용하는 습관을 들입시다)

  명령

 설명 

 h 

 커서를 왼쪽으로 한 칸 이동 ( ← 이랑 같은 의미 ) 

 j  

 커서를 아래로 한 칸 이동 ( ↓와 같은 의미 ) 

 k 

 커서를 위로 한 칸 이동 ( ↑와 같은 의미 ) 

 l  

 커서를 오른쪽으로 이동 ( →와 같은 의미 ) 

 w

 다음 단어의 처음으로 이동 ( 왠지 word의 약자 같은 느낌? )  

 ^  

 줄의 첫 문자로 이동 

 $ 

 줄의 맨 끝으로 이동 (:$은 줄의 제일 끝으로 이동)

 0

 첫 번째 열로 이동  (:0은 줄의 제일 처음으로 이동)

 G

 제일 끝 행으로 이동 ( shift + G ) 

 gg 

 제일 첫 행으로 이동 ( g + g ) 

 nG 

 n 번째 행으로 이동  

 :숫자 +enter 

 해당 숫자의 행으로 이동 

 H

 화면의 첫 줄로 이동 ( Head ) (shift + h)

 M 

 화면의 중간으로 이동 ( Middle ) (shift + m)

 L 

 화면의 끝 줄로 이동 ( Last ) (shift + l)

 [Ctrl] + b

 이전 화면으로 이동 (Page Up과 같아요) 

 [Ctrl + d]

 반 전도 화면 이동 (스크롤 중간 정도 내린거 같은거.)

 [Ctrl] + F 

 다음 화면으로 이동 (Page Down과 같아요)  

 n%

 입력한 n퍼센트에 해당하는 줄로 이동 

자주 쓰는 아주 기본적인거는 암기하기 쉬우라고 타자판으로 만들어봤어요 ㅎㅎ

저는 ctrl+d 개인적으로 많이 썼는데 저거 하나가 그림에 빠졌네..ㅎ

삭제 복사 붙여넣기 명령어 

 명령

 설명 

 x 

 현재 커서가 위치한 문자를 삭제 ( del와 같은 의미예요) 

dw

 단어 삭제

 dd

 현재 커서의 행 삭제   

 숫자 dd 

 현재 커서부터 숫자만큼의 행 삭제 

 yy 

 현재 커서가 있는 행을 복사  

 숫자 yy 

 현재 커서부터 숫자만큼의 행을 복사  

 p 

 복사한 내용을 현재 행 이후에 붙여 넣기 

 P  

 복사한 내용을 현재 행 이전에 붙여 넣기 ( shift + p ) 

그리고 참고로 리눅스 우분투에서는 잘 작동되지만 유닉스의 어떤 운영체제에서는

우리가 자주쓰는 백스페이스나 delete가 잘 안먹을 때가 있어요. 먹긴 먹는데 잔상같은게 있어서 불편함.. 설명할길이읍네.. 하여튼 그래서 이왕이면 이러한 키보다는 x를 이용해서 지워주는 습관을 들여주는 게 좋아요!

되돌리기 및 검색

 명령

 설명 

 u 

 직전에 내린 명령을 취소 

 /exp + enter 

 'exp' 와 같은 문자열을 현재 커서가 위치한 곳부터 아래 방향으로 검색 

?exp + enter

'exp'와 같은 문자열을 뒤에서부터 찾습니다. 즉 위 방향으로 검색!

 n 

 찾은 문자 중에서 다음 문자로 이동  

N

 n이 아래로 검색을 계속 내려가는 거라면 N은 위로 검색을 계속하는거 (shift + n)

 

명령어가 좀 많죠?

그런데도 이번 포스팅에서 다룬 vi 에디터 사용법은 일부분이에요 더 강력하고 유용한 기능들이 많이 있습니다. 그리고 실제로 vi기능 들은 vi 편집기에 들어가야만 먹는다 이게 아니기 때문에 알아두면 기본적인 리눅스 활용도가 높아집니다 (예를 들면 쉘에서도 검색이 vi처럼 된다던가 등등).

오늘은 기본 사용법과 명령어만 익히고 차차 하도록 해요. 다음에 vi편집기 활용 2탄으로 찾아뵐게요~

명령어는 암기하기보다는 많이 사용해서 익숙해지는 수밖에 없습니다.

틈틈히 써서 내껄로 만들도록 해요~

 

vi편집기에서 정규표현식 응용해 검색하기! (검색은 '/'인거 위에 표에서 배웠어요!)

 

[리눅스 유닉스] 정규표현식 (Regular Expression) 메타문자 정리. vi편집기에서 정규표현식 응용해 검색하기

[리눅스 / 유닉스 목차] 안녕하세요! 지난 포스팅들에서는 정말 기본적인 vi 단축키에 대해서 알아봤는데요. 이번에는 알아두면 정말정말 유용한 vi 에디터 사용법 2편으로 찾아왔습니다. 검색에다가 정규표현식을..

jhnyang.tistory.com

기출 문제

[리눅스마스터 2급 2차 2016년 1회 기출]

다음 중 vi 편집에서 작업한 파일을 저장하지 않고 종료하는 명령어로 알맞은 것은?

1. :w

2. :wq

3. :q!

4. :%s

답: 3번

 

다음 vi 명령어 중 입력 모드 전환하는 명령으로 틀린 것은?

1. I

2. p

3. a

4. o

답: 2번

행복을 불러오뉸~~뉴뉴뉸~

공감&광고&보답댓글~~~