Vim 사용법

입질쾌감 물때표

일 단 vi를 버젼별로 약간의 다른 점이 있는데 보통사용하시는 버젼(6.0이전버젼)으로 설명을 하겠습니다. 최근 나온 6.0 버젼 들은 디렉터리 보기 기능등이 있지만 그전버젼엔 없는걸로 압니다. 테마가 있어서 이쁘게 꾸밀수도 있다지만.. vi 의 바뀐 점들은
http://vim.sourceforge.net/whyvim.php여기에 자세히 나왔구요^^
하여튼 구버젼으로 설명해야 모두에게 다 호환될 듯 싶어서 ^^;
제가 그냥 작업하는 모습을 상상하시면서 보시면서 참고하세요~
그냥 그대로 환경을 만들어서 똑같이 따라해보시면서 익히셔두 되구요~
더 좋은 방법이 많이 있을 수 있으니 그 방법 아시면 그 방법을 참고하시구요^^

1부와 2부로 나눠서 설명 하겠습니다.
1부는 파일이 5개 있다고 가정해서 작업을 하는 모습을 주로 설명할꺼구요~
2부는 강력한 기능들 몇가지를 모아두는 정도로 설명하겠습니다.

<1부 pbi12 작업하는 모습>

일단은 파일이 1 2 3 4 5 – 5개가 있다고 가정하겠습니다.
vi 1 로 1 파일을 열었습니다.
그리고 이제 1파일에 있는 내용을 2파일에 붙여넣을때에
1이 열린상태에서 v 를 눌러서 비쥬얼 모드를 만듭니다.
그리고 블럭을 씌운후에 y 를 눌러서 복사를 합니다.
:e 2 로 2파일을 엽니다. 이제 붙여넣고 싶은 부분에서
붙여넣기 p 를 누릅니다.

이젠 3 파일과 4 파일을 비교해보겠습니다.
vi 3 으로 3파일을 열었습니다.
이제 그 열린 창에서 Ctrl+w+n 으로 창을 하나 분할 합니다.
그리고나서 :e 4 로 4파일을 엽니다.
이작업이 귀찮으면 그냥 :new 4 하면 창을 분할 하면서 파일이 열립니다.

※ :new 없는 파일명 이면 새로운 문서의 편집이 됩니다.

두 창간의 이동을 위해서 Ctrl+w+w 를 눌르면서 윗창과 아래창을 번갈아가면서 이동해서 비교해 봅니다.
이렇게 비교할때에는 여러가지 복잡하기 때문에 내가 보던 곳이 헷갈릴때가 있습니다.
그럴때에는 mark 기능을 사용하기 위해서 내가 기억해둘 곳에다가 m,a (m을 누르고 a를 누르라는 말입니다.)
그러면 a키에 그 위치가 저장되는 것입니다.
그러니 m,b 를 누르면 b에 저장되는 것이지요.

여 러곳을 마크해놓고 작업을 하다가 생각날때에 그 마크 해두었던 위치로 가는데 갈때에는 왼쪽 맨 모서리 esc밑의 키인 `,a 를 누릅니다.(`를 누른후 지정한 마크키 a를 누르란 말입니다.) 그러면 그 위치로 커서가 가게 됩니다. 뭐 이런식으로 인간의 기억력의 한계를 극복합니다.^^;

보통 마크 해놓은 곳부터 지금 보는 곳 까지를 블럭 씌울때에 사용하는데 그럴때는 마크 a를 해놓고, 블럭을 씌우고 싶은 곳 마지막에서 v 를 누러놓고, `,a 를 눌러서 블럭을 쭉 씌웁니다.
잘라내서 붙여넣고 싶을때가 있는데 그럴때는 블럭 씌워졌을때에 d 를 누르면 삭제가 되면서 버퍼에 저장이 되어 있습니다.
원하는 곳에서 p를 누르면 붙여넣기가 되죠^^

붙여넣기와 복사 두가지를 골고루 사용해야 되니깐요~

※여기서 주의할 점은 한 창, 그러니깐 한 문서에 마크는 따로 설정된다는 것 입니다.

작업하다보면 파일을 저장할때에 4 파일을 작업하다가 그 파일을 1파일로 저장하고 싶을때가 있습니다.
그럴땐 :w! 1 로 강제저장을 해줍니다.

그리고 그 보던 파일을 복사 해버리고 싶으면
:w 새파일명
을 해주면 그 보던 문서와 동일한 내용의 파일이 생깁니다.

창을 열어서 사용할 때의 팁들을 정리해보자면, 창은 계속해서 새로 열어서 작업을 할 수 있습니다.
그리고 그 창들은 하나의 문서를 열었을때 처럼 작업을 할 수 있습니다.
여러 창들을 열다보면 글씨가 깨져 보일 수도 있습니다.
이럴때는 Ctrl+l 을 눌러서 화면을 리플래쉬 합니다.
그리고 창이 여러개일때엔 창의 이동을 아래위로 해야 할때가 있습니다.
그땐 그냥 이동을 할때처럼 쓰는 것처럼 j는 아래로 k는 윗쪽방향인데,
창의 이동에서도 같습니다. Crtl+w,j 를 하면 아래창으로 이동하고 Ctrl+w,k 를 하면 윗창으로 이동합니다.
그게 불편하신 분은 이동시 방향키도 가능하니깐 ctrl + w , 위쪽;아래쪽 이런식으로 사용하셔두 됩니다.

또한 창을 잡다하게 많이 열었다면 그냥 하나의 창만 보고 싶을때엔 Ctrl+w,o 를 눌러주면 창이 하나로 통합 되어집니다~

크게 하려면 ctrl + w , + 키
작게 하려면 ctrl + w , + 키

현재창을 닫기을 때에는 ctrl + w, c
현재 창을 최대화 하려면 ctrl + w + _
열려있는 창들의 크기를 모두 같게 하려면 ctrl + w + =

※ 파일명 입력시 tab 키로 파일명 완성하기가 먹힙니다.

그리고 저 같은 경우에 서버간의 이동을 하다보면 홈페이지의 주소를 전체적으로 싹 바꿔주어야 할 경우가 자주 생깁니다.
그럴때에 123.123.123.123 아이피를 321.321.321.321 로 바꿀때엔…
:%s/123.123.123.123/321.321.321.321/g
이런식으로 해주면 변환해줍니다. :%s/찾을말/바꿀말/g <= 그 문서전체적으로 교체해줍니다. 뭐 다른 예로 첫머리 부분에 주석처리를 하고 싶을 때에는 :%s/(.*)/#1/g 이런식으로 활용을 하면 편합니다~ 생소하셔할 분들이 있을 텐데; 이렇게 옵션을 줄때에 기호를 쓰면 으로 구분을 해주어야 합니다. ( 이렇게 하면 (를 인식하는 거죠~ 그냥 간단히 단어를 찾고 싶을때엔 그냥 / 나 ? 를 눌른다음에 찾고싶은 단어를 적어서 엔터를 치면 그 단어가 블럭이 쳐져서 나타납니다. 만약 대소문자 구분없이 단어를 찾고 싶을 때는 :set ic 나 :set ignorecase 해 주면 대소문자를 가리지 않습니다. /는 검색방향이 아랫쪽이고 ?는 검색방향이 윗쪽입니다. 여러단어가 걸렸을때에 다음 단어로 가고 싶을 때에는 n 과 N 이 있는데 n은 아랫쪽 방향으로 다음 단어로 가는 것이고 N 은 윗쪽 방향으로 다음단어로 가는 것입니다. 자주 쓰는 팁이죠^^; ※ 찾기 기능을 써서 블럭이 씌워져 있을 시에 그 블럭을 지우고 싶다면 :set nohlsearch 이라고 해주시면 블럭이 사라집니다. 이러한 기능들은 편집때 주로 쓰고, 이제 문서를 생성해서 작성할때에는 이러한 팁들을 사용합니다. 함수나 변수명을 타이핑하다가 ^p 나 ^n 을 눌러 보세요. 자동으로 완성됩니다. 예를 들어서, pknowhow 와 linuxnew 의 운영자는 pbi12 입니다. 이때에 pk만 치고 ^p를 누르게 되면 자동으로 그 문서안에서 같은 단어를 검색해서 자동완성 해줍니다. li 만치고 ^n 을 누르더라도 자동완성 됩니다. 다른 점이라면 위아래 검색순서가 다릅니다^^ 여러개의 단어가 겹칠땐 ^p 나 ^n 을 여러번 눌러 동일한 자동완성을 찾으면 됩니다~ 그리고 소스를 다 작성했는데 빈줄이 너무 많아서 하나씩 지우기 귀찮을때는 :g/^$/d 이런식으로 문서내의 모든 빈줄을 삭제해 줍니다. 그리고 작성하다가 중요한 부분은 파일로 저장하고 싶을때에는 Shift+v를 눌러서 행블럭을 씌운후에 범위를 정한다음에 : 를 눌러서 :’<,’>w 파일명
이런식으로 파일로 저장도 합니다.

※ :’<,’> 는 블럭을 씌우고 : 를 누르면 자동으로 붙습니다.

글쓰다가 보면 키를 잘못 눌르거나 커서가 더이상 움직이지 않을때에 띡띡하고 소리가 나게 됩니다.
이 소리가 듣기 싫으실때에는
:set vb
라고 쳐주면 소리가 나지 않습니다.

그리고 보통 C 소스 짜다가 보면 확인해 보고 싶을때는 그냥 간단한 쉘 명령어를 써서 a.c 소스를 a로 컴파일 한다면
:!gcc -o a a.c
호 해서 a파일을 만들고 a를 실행해 보기 위해서
:!./a
라고 쳐서 대략 확인을 합니다.

만약 몇 번째 라인에서 에러가 났다고 나오면
:set nu
라고 쳐서 라인 번호가 나오게 만들어 준다음에
:라인번호 라고 쳐서 그라인으로 이동을 한후에 수정을 해줍니다.
다시 컴파일 하기 위해서는 :w 로 바뀐내용을 저장해준 후에
다시 컴파일하면 됩니다.

C언어 함수에 대한 설명이나 명령어들의 man 페이지등을 보고 싶을때에는 그 단어에 커서를 두고서
shift+k 를 누르게 되면 설명이 man페이지로 나오게 됩니다.
man 페이지는 그냥 커서로 아래위로 움직여서 참고해서 보고 q로 종료하면됩니다.

그런데 영어실력이 딸려서 영어 단어가 궁금할때에는 어떤분이 짜신건데, 이 스크립트를 이용해서 영어단어를 찾아서 바로 검색할 수 있습니다.

스크립트 소스
======================================================================================
#!/bin/sh
WORD=$*
WORD=$(echo ${WORD} |od -tx1 -w1000 |head -1|sed -e ‘s/^[0-9]+ //’ -e ‘s/ 0a$//’ -e ‘s/20/+/g’ -e ‘s/ /%/g’ -e ‘s/^/%/’|tr ‘[a-z]‘ ‘[A-Z]‘)

clear
lynx -nolist -verbose -dump http://kr.engdic.yahoo.com/result.html?p=${WORD} |grep -v “bu2.gif” |tail +14 |tac |tail +11 |tac |sed -e ‘s/[phon[0-9]+.gif] //g’ -e ‘s/[phon[0-9]+.gif]//g’|less -r
======================================================================================

저기 #! 여기부터 lynx 까지 복사하셔서

> cat > edic.sh
> 여기서 붙여넣기
> Ctrl+d 를 눌러서 저장,종료를 하고

>chmod 711 edic 를 해서
edic 라는 파일에 실행 퍼미션 1을 줍니다.

그럼 스크립트는 완성이 되는 것이구요.
그것을 vi 쓰다가
:!edic 모르는 단어
식으로 그냥 쓰고 있습니다.

※ 여기서 주의하실 점은 edic 이라는 스크립트파일이 path가 걸려있던지 아님 문서작성하는 곳과 같은 곳에 있어야 합니다.
그리고 이 원리가 lynx를 통해서 야후의 사전을 찾아서 뿌려주는 것밖에는 아니므로 lynx가 반드시 설치되어있어야 합니다.
lynx는 텍스트 브라우져로써 남의 서버에서 계정을 받아사용하시는 분들중에 몇몇 분은 서버에 안깔려있을 수도 있을꺼라고
생각됩니다. lynx를 서버관리자에게 설치해주라고 문의하셔서 설치된곳에서 해보세요^^

그리고 소스 작성시에 지역변수와 전역변수가 있는데 그 변수들을 구분해서 찾아주는 기능도 있습니다.
소스에 너무 긴 변수명이 있다면 찾기에도 불편하니깐 바로바로 이동도 할 일이 생기게 됩니다.
gd 는 local definition 으로 점프하게 되고,
gD 는 global definition 으로 점프하게 됩니다.
정의된 부분을 back 할 때는 “ 을 누르면 되돌아가게 됩니다.
윗쪽 아랫쪽으로 검색을 더 하고자 할때는 # 이나 * 를 눌르면 됩니다.

이젠 소스를 다 작성하였는데 모양이 정렬이 잘 안되어 있을때에는
전체 열을 이동시켜서 모양을 맞춰줄 수 있습니다.
<< 라고 치면 한줄만 탭단위로 왼쪽으로 이동하게 되고 >> 한줄만 탭단위로 오른쪽으로 이동하게 됩니다.
정렬하고 싶은 부분을 블럭을 씌우고 << 해줘서 정렬을 해줄 수도 있습니다. * 이부분 강추입니다^^ 특히 강력한 기능인 Ctrl+v 열 블럭 씌우기!! 행 블럭을 씌우는게 아니라 열블럭을 씌우는 것입니다. 저도 이거 있는줄 몰랐다가 여러가지 키 조합하다가 알아냈는데 정말 편합니다. 정렬할때에 쓰면 더 좋죠~ 열로 블럭을 씌워서 정렬할 부분 << 해주어서 옮기는 거죠~ 마지막으로 more 나 less 로 문서를 보고 있다가 바로 vi로 가서 보던걸 편집하고 싶을때에는 : 로 정지한 상태에서 v 를 눌러서 vi로 전환할 수 있습니다. 이로써 pbi12, 즉 제가 작업하는 스타일이였습니다. 아직도 많이 부족하지만 정리해서 적어봤습니다. <제 2 부 막강한 여러가지 팁들>

간단히 강력한 추천하고픈 vi 팁들을 적을려고 합니다.
1부에서도 말했었던 강력한 기능인 Ctrl+v 열 블럭 씌우기!! 정말 좋습니다.

-그리고 더 강력한 기능!!
vi에선 전에 한 작업은 기억이 되어져 있습니다.
그래서 . (점)을 누르면 그대로 다시 됩니다.
바로 전 작업이 기억 되어져서 다시 되는 거죠^^
만약에 아래와 같이 쳤다면 i로 삽입 모드를 만들고
pbi12 ZZang 엔터
이렇게 했다면 esc를 눌러서 모드를 변경후에 .를 누르면
pbi12 ZZang 이 쳐지고 엔터가 들어간다는 거죠~
제가 이제야 알게 되서 그런지 무척이나 신기했습니다^^

-자~ 주목하십시요!!
vi의 하이라이트인 알파벳 대문자 시리즈 입니다. ^_^
알파벳의 대문자에 정말 좋은 기능들이 있었구요~
그리고 소문자와 비교했을때에 비슷한 기능도 많이 있었습니다.
전 물론 그냥 키 하나 씩 눌러서 무슨 기능인가 확인해보구 적는 것이구요;;
대문자와 소문자를 잘 구분해서 보시기 바랍니다~

vi에서 w는 단어의 앞부분씩 이동이고, b는 w와 같으나 뒷쪽방향으로 이동이고,
e는 단어의 끝부분씩 이동합니다.

x는 지우기 i는 현재위치에서 삽입 a는 현재글자의 뒷쪽에 이어서 삽입, u는 되살리기

P 는 빈줄 한줄씩 삽입

K는 man 페이지 찾기 모드

V 는 한줄 블럭씌우기

R 은 replace 로 수정모드

A는 그 줄의 마지막에서 삽입
O는 한줄 건너뛰어 삽입

S는 그 줄 새로 작성, 현재 줄 지워지고 삽입모드
C는 현재의 줄만 현재 커서의 뒷부분이 지워지고 삽입모드

Y 한줄 복사
D는 그 줄의 처음에 있을때 누르면 한줄 삭제 (삭제되면서 버퍼에 저장 잘라내기라고 봐두 됨)
p는 아래로 붙여넣기인반면 P는 위로 붙여넣기

ZZ 저장하고 종료;;

x는 지우기로 del키와 같지만 X는 백슬래쉬 처럼 뒤로 지워집니다.

gg 는 맨 처음으로 이동
G 는 맨 마지막으로 이동
$은 그 줄 마지막으로 이동 0은 그 줄 처음으로 이동

^는 줄의 처음으로 이동

* 이 기능도 강력합니다^^
J 는 그 현재 위치 다음의 빈 줄을 다 붙여줍니다. 한 문장으로 만들때 사용하면 좋습니다.

-자~ 여기부터는 문서를 볼때에 중요한 스크롤 기능에 대한 팁들입니다~
문서를 빨리 더 정확하게 스크롤해서 중요부분만 보는게 중요하다고 자부하시는 분들은 꼭 보시길 바랍니다~

대문자 L 은 그 보는 페이지에서 맨 아랫줄 커서 이동

B는 앞쪽으로 빈칸 단위로 이동
W는 뒷쪽으로 빈칸의 앞쪽 단위로 이동
E는 뒷쪽으로 빈칸의 뒷쪽 단위로 이동

[[ 는 문서의 맨처음 ]] 는 문서의 맨 마지막으로 커서 이동

Ctrl+d 반페이지씩 아래로 스크롤
Ctrl+u 반페이지씩 위로 스크롤
Ctrl+f 한페이지씩 아래로 스크롤
Ctrl+b 한페이지씩 위로 스크롤

` 레지스트 기록한곳으로 이동 할때에 `저장문자

( 한 단락위로
) 한 단락 아래로

-이 외에 자주 쓰는분은 잘 아시는 참 특이하면서도 기특한? 팁들이 있습니다^^;

Ctrl+g 를 눌르면 그 문서의 커서가 위치한 곳의 정보가 아랫줄에 나옵니다.

*이 기능도 강추입니다!!
~ 는 대소문자 변환 블럭을 씌워 ~눌르면 대소문자가 뒤바뀜

!! 쉘명령어 사용 결과값만
:! 쉘명령어 사용 실행과정부터 나옴

이정도로해서 제가 주로 쓰는 vi 팁들의 정리를 마무리 하겠습니다.
이 문서의 절반정도는 제가 그냥 궁금해서 vi 켜놓고 모든 키를 조합해서 특이할만한 기능이 있는걸 확인한후에 적었습니다.
필요하신 분들은 유용하게 사용하셨으면 좋겠구요~ 여러분이 더 편한 방법있으시면 글남겨주셨음 합니다^^

마지막으로 하고 싶은 말로는…
제가 최근 시작한 강좌홈페이지가 http://pknowhow.com인데 들려주셔서 서로의 팁을 공유하였으면 좋겠구요~
제가 전부터 운영하던 제 작업홈페이지인 http://linuxnew.com에도 오셔서 여러가지 즐거운 관계로 지냈으면 좋겠습니다. 그럼 이렇게 문서 마무리 하겠습니다.

Written By Pbi12

===============================================================================
= V I M 편 집 기 한 글 자습서 Version 1.4 =
===============================================================================

Vim은 이 자습서 같은 파일에서 다 설명할 수 없을 정도로 많은 명령을
가지고 있는 아주 강력한 편집기입니다.
이 자습서는 Vim의 사용 목적에 상관없이 쉽게 사용할 수 있는 충분한
명령어를 설명하도록 고안되었습니다.

이 자습서를 끝마치는데에는 실습하는 정도에 따라 다르지만
대략 25분에서 30분 정도 소요된다.

명령들은 이 텍스트 파일을 수정하게 됩니다. 이 파일을 복사해서 사용하세요
(만일 vimtutor 라는 명령으로 시작하였다면 이 파일은 이미 복사본입니다.)

이 자습서는 사용법을 가르치기 위해 만들어졌다는 사실을 기억해 주십시오.
이 말은 명령을 적절히 실행하는것이 필요하다는 것을 말하는 것입니다.
만약 이 문서를 읽기만 한다면, 명령어들 모두 잊을것입니다.

자 이제, Shift 글쇠가 안 눌려져 있는지 확인을 합니다. 그리고 나서
j 글쇠를 Lesson 1.1이 충분히 보일 때가지 여러번 눌러서 커서를 이동합니다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 1.1: 커서 이동하기
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** h,j,k,l 글쇠를 지시대로 눌러서 커서를 이동한다. **
^
k 힌트 : 왼쪽에 있는 h 글쇠를 누르면 왼쪽으로 이동한다.
< h l > 오른쪽에 있는 l 글쇠를 누르면 오른쪽으로 이동한다.
j j 글쇠는 아래쪽을 향하고 있다.
v
1. 편한데로 화면 여기저기로 이동한다.

2. 아래쪽(j) 글쇠를 반복될때까지 누르고 있는다.
—> 이제 다음 강좌로 이동하는 방법을 알게 되었을 것이다.

3. 아래쪽 글쇠를 눌러서 Lesson 1.2 로 이동한다.

참고: 자신이 누른 글쇠가 확신이 가지 않을 때에는 글쇠를 눌러서
정상모드로 전환한다. 그런 다음 원하는 명령을 타이핑한다.

참고: 화살표 글쇠도 물론 작동한다. 그러나 hjkl 글쇠를 사용하는 것이
한번 익숙해지고 나면 훨씬 더 빠르게 이동할 수 있게 해준다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 1.2: VIM 시작하기와 종료하기
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

!! 필독: 아래의 단계를 진행하기 전에 lesson전체를 읽어야 한다!!

1. 글쇠를 누른다. (정상 모드상태를 확실히 하기 위해서)

2. 입력: :q! .

—> 이것은 바뀌어진 어떤 변화도 저장하지 않고 편집기를 종료한다.
변경된 사항을 저장하고 종료하길 원한다면 아래와 같이 입력한다.
:wq

3. 쉘 프롬프트가 나오면, 이 자습서를 보기 위해서 이렇게 입력한다.
vimtutor 또는
정상적으로 vim tutor

—> ‘vim’은 vim 편집기의 실행을 의미하고,’tutor’는 편집하려는 파일을 의미한다.

4. 지금 배운 단계를 외우고 자신이 생겼다면 다음 단계를 실행한다.
1번 에서 3 번정도 편집기에서 나갔다가 다시 들어온다. 그런 다음 Lesson 1.3
으로 커서를 아래로 이동한다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 1.3: 글자 편집 – 삭제
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 정상 모드에 있을때에는 x 를 누르면 커서에 위치한 글자가 삭제된다. **

1. 아래쪽에 —> 표시가 있는 줄로 커서를 이동한다.

2. 오류를 수정하기 위해서, 삭제하려는 글자의 위치까지 커서를 이동한다.

3. 원하지 않는 글자를 지우기 위해 x 글쇠를 누른다.

4. 이런 과정을 문장이 고쳐질때까지 두서너번 반복한다.

—> The ccow jumpedd ovverr thhe mooon.

5. 문장이 다 고쳐졌으면, Lesson 1.4 로 이동한다.

참고: 이 자습서를 따라서 하는동안 외우려 하지 말고 사용법을 그냥 익힌다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 1.4: 글자 편집 – 삽입
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 정상 모드에서 글자를 삽입하려면 i 를 누른다. **

1. —> 표시가 되어있는 처번째 줄로 커서를 이동한다.

2. 첫번째 줄과 두번째 줄을 똑같게 만들기 위해서 커서를 첫번째 글자에
둔 다음 글자를 삽입할 것이다.

3. i 를 누르고 추가로 필요한 글자들을 입력한다.

4. 각각의 오류를 고칠 때 마다 를 눌러서 정상모드로 돌아온다.
문장이 올바르게 고쳐질때 까지 두서너번 반복한다.

—> There is text misng this .
—> There is some text missing from this line.

5. 글자 삽입하는 것이 익숙해 지면 아래에 있는 요약으로 이동한다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LESSON 1 요약
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. 화살표 글쇠 또는 hjkl 글쇠를 이용하여 커서를 이동한다.
h (왼쪽) j (아래쪽) k (위쪽) l (오른쪽)

2. 프롬프트에서 Vim 편집기를 실행하려면: vim FILENAME

3. Vim 을 종료하려면 :q! 변경된 사항을 버린다.
또는 :wq 변경된 사항을 저장한다.

4. 정상모드에서 커서에 있는 글자를 삭제하려면 x

5. 정상모드에서 커서가 있는 위치에 글자를 삽입하려면
i 글자 입력

참고: 를 누르면 부분적으로 완성된 명령이나 원하지 않는 명령을 취소하거나
정상모드로 전환하게 된다.

Lesson 2. 로 계속 이어진다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 2.1: 삭제 명령
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 한 단어의 끝까지 삭제하려면 dw 를 누른다. **

1. 정상모드를 확실히 하기 위해서 를 누른다.

2. 아래의 —> 표시가 있는 곳으로 커서를 이동한다.

3. 삭제하려고 하는 단어의 첫 글자 위에 커서를 이동한다.

4. 단어를 삭제하기 위해서 dw 를 입력한다.

참고: dw를 누르는 동안 화면하단에 dw 글자가 나타날 것이다.
만약 잘못 눌렀다면 를 누르고 다시 시작한다.

—> There are a some words fun that don’t belong paper in this sentence.

5. 문장이 올바르게 될때까지 서너번 반복하고 Lesson 2.2.로 이동한다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 2.2: 삭제 명령 (계속)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 줄의 끝까지를 삭제하려면 d$ 를 누른다. **

1. 정상모드를 확실히 하기 위해서 를 누른다.

2. 아래의 —> 표시가 있는 곳으로 커서를 이동한다.

3. 정확한 문장의 끝으로 커서를 이동한다. (첫번째 마침표 뒤에 )

4. d$ 를 눌러서 줄끝까지 삭제한다.

—> Somebody typed the end of this line twice. end of this line twice.

5. 어떤 것인지 이해가 되었으면 Lesson 2.3 로 이동한다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 2.3: 명령과 대상
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

삭제 명령 d 는 아래와 같은 구조를 가지고 있다.

[숫자] d 대상 또는 d [숫자] 대상
Where:
숫자 – 명령을 몇번 실행할 것인지를 의미한다.(옵션이고 기본값은 1>
d – 삭제 명령
대상 – 명령이 작동하는 범위 (아래 목록)

대상에 대한 간단한 목록:
w – 커서로 부터 단어의 끝까지, 공백을 포함한다..
e – 커서로 부터 단어의 끝까지, 공백을 포함하지 않는다.
$ – 커서로 부터 줄의 끝까지.

NOTE: For the adventurous, pressing just the object while in Normal mode
without a command will move the cursor as specified in the object list.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 2.4: ‘명령 대상’의 예외
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 줄 전체를 삭제하기 위해서는 dd 를 누른다. **

줄 전체를 삭제하는 경우가 자주있기 때문에 Vim의 개발자는 한 줄을 삭제하는
명령을 간단히 d를 두번 누르는 것으로 쉽게 할 수도록 만들었다.

1. 문단 아래에 있는 두번째 줄로 커서를 이동한다.
2. 줄을 삭제 하기 위해서 dd 를 누른다.
3. 이제 네번째 줄로 이동한다.
4. 두 줄을 삭제하기 위해서 2dd (숫자-명령-대상)를 누른다.

1) Roses are red,
2) Mud is fun,
3) Violets are blue,
4) I have a car,
5) Clocks tell time,
6) Sugar is sweet
7) And so are you.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 2.5: 취소 명령
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 마지막 명령을 취소하려면 u 를 누른다. 줄 전체를 복구 하려면 U **

1. 아래의 —> 표시가 있는 곳으로 커서를 이동한다.
첫번째 에러가 있는곳에 커서를 둔다.
2. 원하지 않는 첫번째 글자로 이동한뒤 x 를 눌러서 지운다.
3. 이제 마지막으로 실행된 명령을 취소 하기 위해서 u 를 누른다.
4. 이번에는 x 명령으로 줄의 내용을 모두 고친다.
5. 이제 줄을 원래의 상태로 만들기 위해서 대문자 U 를 누른다.
6. 이전에 명령된 U 의 명령을 되돌리기 위해서 u를 몇번만 누른다.
7. 다시실행(취소 명령의 취소)을 하기 위해서
CTRL-R (CTRL 글쇠를 누른채로 R 을 누른다)을 몇번 누른다.

—> Fiix the errors oon thhis line and reeplace them witth undo.

8. 이 명령들은 아주 유용한 것들이다. 이제 2장 요약으로 이동하자.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LESSON 2 요약
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. 커서로 부터 단어의 끝까지 지울때 : dw

2. 커서로 부터 줄의 끝까지 지울 때 : d$

3. 줄 전체를 지울 때: dd

4. 정상 모드에서의 명령 구조

[숫자] 명령 대상 또는 명령 [숫자] 대상
where:
숫자 – 명령을 몇번 반복할 것인지
명령 – 어떤 것을 할 것인다. 삭제의 경우 d
대상 – 어떤것에 명령을 적용할 것인가 w (단어), $ (줄의 끝), 등등과
같은 것들 .

5. 이전 명령을 취소할 때: u (소문자 u)
줄에 적용된 모든 내용을 취소할 때 : U (대문자 U)
취소를 취소할때 : CTRL-R

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 3.1: 붙이기 명령
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 마지막으로 삭제한 내용을 커서 뒤에 붙일때에 p 를 누른다. **

1. 아래의 내용의 첫번째 줄로 커서를 이동한다.

2. dd 를 눌러서 한줄을 삭제한다. 이것은 Vim의 버퍼에 저장된다.

3. 삭제된 줄이 들어가야할 위치의 윗줄로 커서를 이동한다.

4. 정상모드에서 p 를 눌러 줄을 교체한다.

5. 모든 줄이 정확한 순서가 되도록 두서너번 반복한다.

d) Can you learn too?
b) Violets are blue,
c) Intelligence is learned,
a) Roses are red,

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 3.2: 대체 명령
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** r 을 누르고 대체할 글자를 입력한다. **

1. 아래의 —> 표시가 있는 첫번째 줄로 커서를 이동한다.

2. 커서를 첫번째 잘못된 글자 위에 올려 놓는다.

3. r 을 누르고 잘못된 글자를 대신할 글자를 입력한다.

4. 첫번째 줄이 정확히 수정될때 까지 2번 3번 과정을 반복한다.

—> Whan this lime was tuoed in, someone presswd some wrojg keys!
—> When this line was typed in, someone pressed some wrong keys!

5. Lesson 3.2.으로 갑니다.

참고: 외우지 말고 사용법을 익혀야 한다는 것을 잊지 마세요.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 3.3: 변경 명령
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 단어 전체 또는 부분을 변경할 때에는 cw 를 누른다. **

1. 아래의 —> 표시가 있는 첫번째 줄로 커서를 이동한다.

2. lubw 의 u 에 커서를 둔다.

3. cw 를 입력하고 정확한 단어를 입력한다.(지금의 경우는 ‘ine’를 입력한다.))

4. 글쇠를 누르고 다음 오타가 있는 부분으로 이동한다.
(첫번째 글자는 변경되었다.)

5. 첫번째 문장과 두번째 문장이 일치할 때까지 과정 3번과 4번을 반복한다.

—> This lubw has a few wptfd that mrrf changing usf the change command.
—> This line has a few words that need changing using the change command.

cw 는 단어를 교체할 때 뿐만아니라, 글자를 삽입한다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 3.4: 변경 명령 추가
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 변경 명령은 삭제명령과 같은 대상을 사용한다. **

1. 변경 명령은 삭제명령을 할때와 똑같이 작동한다. 그 형식은 :

[숫자] c 대상 OR c [숫자] 대상

2. 대상은 역시 똑같다. w (단어), $ (줄의 끝) 등등.

3. 아래의 —> 표시가 있는 첫번째 줄로 이동한다.

4. 첫번째 틀린곳으로 커서를 이동한다.

5. c$를 누르고 나머지 부분을 두번째 줄의 내용과 같게 한다.

—> The end of this line needs some help to make it like the second.
—> The end of this line needs to be corrected using the c$ command.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LESSON 3 요약
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. 이미 삭제된 글자들로 대체하기 위해서는 p 를 누른다. 이것은
커서뒤에 삭제된 내용을 붙이게 된다.(만약 한 줄이 삭제 되었다면
커서의 아래줄로 놓이게 될 것이다.)

2. 커서에 놓인 글자를 고치기 위해서는 r 을 누른다. 그리고 나서
고치려고 하는 글자를 입력하면 고쳐진다.

3. 변경 명령을 커서로부터 원하는 대상까지 변경하는 것을 허용한다.
예를들어 cw 를 누르면 단어의 끝까지 변경을 하게 된다.
c$ 를 누르면 줄의 끝까지를 변경하는 것으로 생각하면 된다.

4. 바꾸기 명령의 형식은 :

[숫자] c 대상 또는 c [숫자] 대상

이제 다음 장으로 갑니다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 4.1: 위치와 파일의 상태
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** CTRL-g 를 누르면 파일에서의 위치와 파일의 상태를 보여준다.
SHIFT-G 를 누르면 파일의 마지막으로 이동한다.. **

주의: 단계를 진행하기 전에 레슨 전체를 읽으세요!!

1. Ctrl 글쇠를 누른체로 g 를 누른다. 화면 하단에 상태선이 나타나고
파일 이름과 위치를 표시해준다. 단계 3을 위해서 줄번호를 기억해 두세요.

2. shift-G 를 눌러서 파일의 맨 끝으로 이동한다.

3. 조금 전에 있던 줄 번호를 입력한후 shift-G를 누른다.
이렇게 하면 처음 Ctrl-g를 누르던 곳으로 되돌아가게 된다.
(숫자를 누를 때, 화면에는 숫자가 표시되지 않는다.)

4. 이것을 자신있게 할 수 있다고 생각되면, 1 단계부터 3 단계까지 실행한다

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 4.2: 검색 명령
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** / 를 누르고 검색하고자 하는 글자를 입력한다. **

1. 정상모드에서 / 문자를 입력한다. : 명령과 마찬가지로 화면 하단에 / 문자가
나타나는지 확인을 한다.

2. 이제 ‘errroor’을 입력하고 엔터를 누른다. 이것이 찾으려는 문자이다.

3. 같은 문자를 또 검색하기 위해서는 그냥 n 을 누른다.
반대 방향으로 검색하기를 원하면 Shift와 n 을 함께 누른다.

4. 아래에서 위로(반대 방향으로) 검색을 하길 원한다면
/ 문자 대신 ? 문자를 사용하면 된다.

—> 검색을 해서 파일의 끝에 도달하면 처음부터 다시 시작한다.

”errroor” is not the way to spell error; errroor is an error.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 4.3: 괄호의 짝 찾기
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 괄호 ), ], } 의 짝을 찾으려면 %를 누른다. **

1. —-> 표시가 있는 줄에서 괄호 ( ,[ , { 가 있는곳에 커서를 둔다.

2. 그런 다음 % 문자를 누른다.

3. 그러면, 짝이 되는 괄호가 있는 곳으로 커서가 이동하게 된다.

4. 다시 % 를 누르면 반대쪽 괄호로 (처음 위치하던 곳으로) 다시 돌아간다.

—> This ( is a test line with (‘s, [‘s ] and {‘s } in it. ))

참고 : 이것은 프로그램을 디버깅할때 일치하지 않는 괄호를 찾기에 아주 유용하다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 4.4: 오류를 수정 하는 방법
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** :s/old/new/g 를 누르면 ‘old’를 찾아서 ‘new’로 바꾸어준다. **

1. 커서를 —> 표시가 있는 줄로 이동한다.

2. :s/thee/the 를 입력하고 엔터를 누른다. 이렇게 하면 그 줄에서 첫번째로
나타나는 것만 바뀌는 것을 볼 수 있다.

3. 이제 :s/thee/the/g 를 입력한다. 이것은 그 줄에서 전체적으로 교체하는
것을 의미한다. 그 줄에 나타난 모든 단어를 바꾼다.

—> thee best time to see thee flowers is in thee spring.

4. 두 줄 사이의 문자열을 모두 바꾸려면 다음과 같이 하면된다.
:#,#s/old/new/g 를 누른다. #,#는 시작하는 줄과 끝나는 줄의 번호를 뜻한다.
:%s/old/new/g 를 누르면 파일 전체에 나타나는 모든 것들을 바꾸어준다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LESSON 4 요 약
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. Ctrl-g 는 파일에서의 현재 위치와 파일의 상태를 화면에 보여준다.
Shift-G 는 파일의 끝으로 이동한다. 행(줄)번호를 누른후에
Shift-G 를 누르면 그 줄로 이동한다.

2. / 를 누르고 앞쪽으로 찾을 단어를 입력한다.
? 를 누르고 뒤쪽으로 찾을 단어를 입력한다.
찾은 후에 같은 방향으로 다음에 나타나는 것을 찾으려면 n 을 누른다.
반대방향으로 나타나는 것을 찾으려면 Shift-N을 누른다.

3. 커서가 (,),[,],{, 또는 } 에 위치할때 % 를 누르면 그 괄호의 짝을
찾아준다.

4. 줄에 있는 첫번째 old를 new로 바꾸려면 :s/old/new
줄에 있는 모든 ‘old’들을 new 로 바꾸려면 :s/old/new/g
두 줄사이에(#부터 #까지) 있는 것들을 바꾸려면 :#,#s/old/new/g
파일에 있는 모든 것들을 바꾸려면 :%s/old/new/g
바꿀 때마다 확인을 하도록 만들려면 c 를 붙인다. :%s/old/new/gc

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 5.1: 외부 명령어를 실행하는 방법
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** :! 를 누른후 외부 명령어를 입력하면 그 명령이 실행된다. **

1. 익숙해진 명령인 : 을 입력하여 커서를 화면의 하단으로 이동시킨다.
이렇게 하면 명령어를 입력할 수 있다.

2. 이제 !(느낌표)를 입력한다. 이것은 쉘에서 사용하는 어떤 명령이든
실행할 수 있도록 해준다.

3. 한가지 예로 !(느낌표) 뒤에 ls 를 입력한 후 엔터를 누른다.
이렇게 하면 당신의 디렉토리의 파일 목록을 보여줄 것이다. 마치
쉘 프롬프트에서처럼 작동한다. ls 가 작동하지 않으면 :!dir을 사용한다.

—> 참고: 이 방법으로 어떤 외부 명령어이든 실행할 수 있습니다.

—> 참고: 공통 : 명령어는 반드시 엔터를 눌러서 끝내야 합니다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 5.2: 파일 저장하기 (추가)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 변경된 내용을 다른파일로 저장하려면 :w 파일이름 을 입력한다. **

1. :!dir 또는 :!ls 를 입력하여 당신의 디렉토리의 목록을 확인한다.
이렇게 한 후에 엔터를 눌러야한다.(위에서 배운내용)

2. 존재하지 않는 파일의 이름을 하나 정한다. 예를들면 TEST

3. 이제 :w TEST 를 입력한다. (TEST 는 당신이 선택한 파일이름이다.)

4. 이것은 TEST라는 이름으로 파일 전체를 새롭게 저장한다.
당신의 디렉토리에서 이 파일이 보이는지 :!dir 을 입력하여 확인한다.

—> 만일 당신이 vim에서 빠져나간후 TEST 라는 파일을 vim으로 실행하였다면,
그 파일은 당신이 저장한 자습서 파일의 정확한 사본이 될것이다.

5. 자 이제 다음과 같이 입력하여 파일을 삭제한다. :!delete TEST

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 5.3: 선택적인 저장 명령
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 파일의 일부분을 저장하려면 :#,# w 파일이름 을 입력한다. **

1. 다시 한번, :!dir 또는 :!ls 를 입력하여 디렉토리 목록을 확인한다.
그리고 적절한 파일이름(TEST)을 선택한다.

2. 이 화면의 첫번째 줄로 커서를 이동한후 Ctrl-g를 입력하여 그 줄의 번호를
기억해 둔다.

3. 이제 화면의 마지막줄로 커서를 이동한후 Ctrl-g를 입력하여, 이 줄의 번호도
마찬가지로 줄의 번호를 기억해 둔다.

4. 파일의 일부분만을 저장하기 위해서 :#,# w TEST 를 입력한다.
#,#는 당신이 기억해둔 두개의 번호(첫줄, 마지막줄)의 번호이고
TEST는 파일이름이 된다.

5. 다시, 그 파일이 있는지 확인하기 위해서 :!dir 을 입력한다.
그러나 그 파일을 지우지는 않는다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 5.4: 파일 가져오기와 합치기
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 파일의 내용을 삽입하려면 :r 파일이름 을 입력한다. **

1. 위에서 만든 TEST 라는 파일이 존재하는지 확인하기 위해서 :!dir을 입력한다.

2. 커서를 이 화면의 윗줄로 옮긴다.

참고: 3 단계를 실행하고 나면 Lesson 5.3을 보게된다.
그렇게 된 후에 아래로 이동하여 지금 Lesson 으로 다시 되돌아 온다.

3. 이제 TEST 파일을 가져오기 위해서 :r TEST 라고 입력한다.
TEST는 그 파일의 이름이다.

참고: 가져오는 파일은 커서가 위치한 곳에서부터 끼워넣어진다.

4. 가져온 파일을 확인 하기 위해서 커서를 뒤로 이동하여 Lesson 5.3 이
두번 나타나는지 확인한다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LESSON 5 요 약
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. :!명령어 외부명령어를 실행한다.

유용한 예제:
:!dir – 디렉토리의 파일 목록을 보여준다.
:!delete FILENAME – FILENAME이라는 이름의 파일을 지운다.

2. :w FILENAME 현재 파일을 FILENAME이라는 이름으로 디스크에 저장한다.

3. :#,# FILENAME FILENAME 파일의 #번째 줄부터 #번째 줄까지 저장한다.

4. :r FILENAME 디스크에 있는 FILENAME이라는 파일을 현재 파일의
커서가 있는 위치의 아래로 가져와서 삽입한다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 6.1: 열기 명령
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 커서가 있는 아래줄을 열어서 삽입상태로 만들기위해 o 를 입력한다. **

1. —> 표시가 있는 줄로 커서를 이동한다.

2. 커서의 아랫줄을 열고 삽입상태로 만들기 위해서는 소문자 o 를 입력해야한다.

3. 이제 —> 표시가 있는 줄을 복사한후 를 눌러 삽입상태에서 빠져나온다.
—> After typing o the cursor is placed on the open line in Insert mode.

4. 커서의 윗쪽으로 줄을 열려면 소문자 o 대신에 대문자 O를 입력하면 된다.
아래줄에서 한번 시도해본다.
이 줄에 커서가 있을 때에 Shift-O를 입력하면 위쪽으로 빈줄이 나타날것이다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 6.2: 추가 명령
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 커서의 뒤(오른쪽)에서 삽입상태를 만들기 위해서 a 를 입력한다. **

1. 첫번째 —> 표시가 있는 줄의 끝으로 이동합니다.
정상모드에서 $를 입력하면 끝으로 갑니다.

2. 커서의 뒤에 글자를 추가하기 위해서 소문자 a 를 입력합니다.
대문자 A 는 그 줄의 끝에 추가를 하게 됩니다.

참고: 단지 줄 끝에 내용을 추가하기 위해서 마지막 글자에서 i 를 누르고 글자를
입력한후 를 누르고, 커서를 오른쪽으로 이동한후 x 를 누르는 일련의
작업을 피할수 있습니다.

3. 이제 첫번째 줄이 완성한다. 참고로 추가 명령은 삽입명령과 똑같다.
단지 글자를 어느위치에서 삽입하는지가 다를 뿐이다.

—> This line will allow you to practice
—> This line will allow you to practice appending text to the end of a line.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 6.3: 또 하나의 수정 방법
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 한 글자 이상의 글자를 수정하기 위해서는 대문자 R을 누른다. **

1. 아래의 —> 표시가 있는 줄로 커서를 이동합니다.

2. —> 표시가 있는 두번째 줄과 다르게 시작하는 단어의 첫번째 글자로
커서를 이동합니다. (그 단어는 ‘last’입니다.)

3. 이제 R 을 입력한후 첫번째 줄의 남아있는 부분의 글자가 두번째 줄의
문장과 같아지도록 입력을 해나갑니다.

—> To make the first line the same as the last on this page use the keys.
—> To make the first line the same as the second, type R and the new text.

4. 빠져나가기 위해서는 를 누르면 됩니다. 바뀌지 않은 글자들은 그대로
남습니다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 6.4: 옵션 설정
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 검색이나 교체할때 대소문자를 무시하도록 설정할 수 있습니다. **

1. ignore 를 검색하기 위해 입력합니다:
/ignore
n 글쇠를 여러번 반복합니다.

2. 대소문자 무시 옵션을 설정하기 위해 ic (Ignore case) 를 입력합니다.
:set ic

3. 이제 ignore 를 다시 검색합니다.
n 글쇠를 여러번 눌러서 검색을 반복합니다.

4. ‘hlsearch’ 와 ‘incsearch’ 옵션을 설정합니다:
:set hls is

5. 이제 검색을 다시 해봅니다. 어떤 일이 생기는지 보십시오:
/ignore

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LESSON 6 요 약
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. o 를 입력하면 커서의 아래쪽으로 한 줄을 열어주고 커서가 삽입상태로 그 줄에 위치한다.
대문자 O 를 입력하면 위쪽으로 줄이 열리고 커서가 그곳에 위치한다.

2. a 를 입력하면 커서가 있는 글자의 뒤로 가서 삽입상태가 된다.
대문자 A 를 입력하면 그 줄의 끝으로 가서 삽입상태가 된다.

3. 대문자 R 을 한번 입력하면 를 눌러서 빠져나갈때까지 문장이 교체된다.

4. “:set xxx” 를 입력하면 “xxx” 옵션이 설정된다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LESSON 7 : 온라인 도움말 명령어
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

** 온라인 도움말 체계를 이용한다. **

Vim 은 종합적인 도움말 체계를 가지고 있다. 시작하기 위해서는 아래처럼
하면된다.
글쇠를 누른다. (자판에 있으면)
글쇠를 누른다. (자판에 있으면)
– :help 를 입력한다.

도움말 화면을 닫으려면 :q 을 입력한다.

어떤 항목에 대한 도움말을 찾으려면 “:help” 명령 뒤에 항목을 입력한다

:help w
:help c_
:help insert-index

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

이제 Vim 자습서의 결론이다. 자습서는 Vim 편집기의 전체적인 기능을 간략히
볼 수 있도록 만들었다. 아주 쉽게 편집기를 사용할 수 있도록했을 뿐이다.
Vim의 많고 많은 기능들과는 거리가 좀 멀다.

더 자세히 공부하고자하는 사람들을 위해서 아래의 책을 추천한다:
Learning the Vi Editor – by Linda Lamb
Publisher: O’Reilly & Associates Inc.

이것은 Vi로 할 수 있는 어떤것이든 알 수있게 해주는 좋은 책이다.
Vim의 6번째 판에 대한 정보도 포함되어있다.

set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin

set diffexpr=MyDiff()
function MyDiff()
let opt = ”
if &diffopt =~ ‘icase’ | let opt = opt . ‘-i ‘ | endif
if &diffopt =~ ‘iwhite’ | let opt = opt . ‘-b ‘ | endif
silent execute ‘!C:Vimvim61diff -a ‘ . opt . v:fname_in . ‘ ‘ . v:fname_new . ‘ > ‘ . v:fname_out
endfunction

map <F1> K
map <F2> :w!<CR>
map <F3> v]}zf
map <F4> zo
map <F5> :25vs ./<CR>:set nunumber<CR>^Ww
map <F6> ^ww
map <F7> O
map <F8> [i
map <F9> gd
map <F10> ''
map <F11> ^]
map <F12> ^T

set tabstop=4
set ai
set ts=4
set sw=4
colo darkblue
set guifont=굴림체
20vsset nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin

set diffexpr=MyDiff()
function MyDiff()
let opt = ”
if &diffopt =~ ‘icase’ | let opt = opt . ‘-i ‘ | endif
if &diffopt =~ ‘iwhite’ | let opt = opt . ‘-b ‘ | endif
silent execute ‘!C:Vimvim61diff -a ‘ . opt . v:fname_in . ‘ ‘ . v:fname_new . ‘ > ‘ . v:fname_out
endfunction

map <F1> K
map <F2> :w!<CR>
map <F3> v]}zf
map <F4> zo
map <F5> :25vs ./<CR>:set nunumber<CR>^Ww
map <F6> ^ww
map <F7> O
map <F8> [i
map <F9> gd
map <F10> ''
map <F11> ^]
map <F12> ^T

set tabstop=4
set ai
set ts=4
set sw=4
set nobackup
colo darkblue
set guifont=굴림체
20vs
set autoindent
set wrap

^p ^n 자동완성
:X 문서 암호화
shift + k 온라인 문서 매뉴얼 소문자 바꾸기 – 영문자에만 해당 –

## 지우기와 바꾸기의 차이점은 바꾸기 명령어 후에 ##
## vi 편집모드로 바뀐다. ##

4. 찾기

/pattern pattern 이라는 단어 찾기 – 위에서 아래로
?pattern scully 라는 단어찾기 – 아래에서 위로

/ : 찾기반복 – 위에서 아래로
n : 찾기반복 – 위에서 아래로

? : 찾기반복 – 아래에서 위로
N : 찾기반복 – 아래에서 위로

fx : 현재줄에서 x문자 찾기 – x 는 한개의 글자 –
Fx : 현재줄에서 반대방향으로 x문자 찾기 – x 는 한개의 글자 –
tx : 현재줄에서 x문자를 찾아서 바로전에 커서놓기
Tx : 현재줄에서 반대방향으로 x문자를 찾아서 바로후에 커서놓기

; : 현재줄에서 한글자 찾기반복
‘ : 현재줄에서 한글자 찾기반복 – 반대방향으로 –

## 찾기와 편집명령의 응용 ##

d/simple simple 이라는 단어가 나올때까지 지우기
d/^scully 줄의 맨앞에 scully 라는 단어가 나올때까지 지우기
y/yahoo yahoo 라는 단어가 나올때까지 복사하기

5. 편집모드 지정하기

i : insert 현재커서위치
10i* * 문자를 10개 집어넣기
25i=- =- 를 25개 반복하기
I : 현재커서가 위치한 줄의 맨처음에
a : append 현재커서위치 바로 다음에
A : 현재커서가 위치한 줄의 맨끝에
o : open 현재커서위치 바로 아래줄에
O : Open 현재커서위치 바로 윗줄에

6. 위치 기억하기

mx : mark 현재의 커서위치를 x 라는 문자로 기억
`x : 기억된 x 위치로 이동
“ : 이동하기 전의 위치로 (제자리)
‘x : 기억된 x 위치의 맨 앞으로 이동
” : 이동하기 전 위치의 맨앞으로 이동

7. 버퍼 이용하기

“xyy : x 라는 이름의 버퍼에 한줄 복사 하기
“xp : x 라는 이름의 버퍼에 저장된 내용을 붙이기

## 잠시 쉬었다 가기 ##
:= 현재 줄번호 보여주기
:/pattern/ = pattern 이 위치한 줄번호 보여주기

8. ex 명령어 익히기

8.1 ex 명령어의 기본형식

:k,l command m
(범위지정) (명령어) (명령이 수행될 위치)
—————————————-

예)

:1,10 co 50 1 줄 부터 10 줄 까지를 50 줄 이후로 복사.
:34,50 d 34 줄 부터 50 줄 까지 삭제.
:100,150 m 10 100 줄 부터 150 줄까지를 10 줄 이후로 옮김.

:.,$ d 현재줄부터 끝까지 지우기
:.,+20 co -4 현재줄부터 20줄을, 4줄 위에 복사하기
:-,+ t 0 위, 아래로 한줄(총 3줄)씩을, 문서 맨위에 복사하기

:/pattern/ d pattern 이 들어있는 줄 지우기
:/pattern/ -nd pattern 이 들어있는 줄로부터 n 번째 윗줄 지우기
:/pattern/ +nd pattern 이 들어있는 줄로부터 n 번째 아랫줄 지우기

:/pattern1/,/pattern2/ d
pattern1 이 들어있는 줄부터, pattern2 가 들어있는
줄까지 지우기

:.,/pattern/ m 23 현재줄부터 pattern 이 들어있는 줄까지, 23번줄 이후로
옮기기

8.2 g 옵션 붙이기

:g/pattern 화일전체에서 마지막으로 pattern 이 쓰여진 줄로 가기
:g/pattern/ p 화일전체에서 pattern 이 있는줄 보여주기
:g/pattern/ nu 화일전체에서 patterm 이 있는줄을 번호와 함께 보여주기

:60,124 g/pattern/ p 60,124 줄 사이에서 pattern 이 들어있는줄 보여주기

8.3 저장 및 종료하기

:w 저장하기 (write) :q 종료하기 (quit)
:wq 저장하고 종료하기
:x 저장하고 종료하기 (:wq 와 동일)

:w! 강제로 저장하기 (read-only 로 열었을경우)
:q! 편집한 내용을 저장하지 않고 종료하기

:w new_file_name 새로운 파일이름으로 저장하기
:w %.new 현재화일 이름에 .new 를 붙여서 새로운 화일로 저장.

:230,$ w file_name 230 줄부터 끝줄까지 file_name 으로 저장하기
:.,600 w file_name 현재줄부터 600줄까지 file_name 으로 저장하기

:1,10 w new_file 1줄부터 10줄까지 new_file 로 저장하기
:340,$ w >> new_file 340줄부터 끝줄까지 new_file 에 추가하기

8.4 읽기

:r[ead] filename 현재위치에 filename 읽어들이기
:r /usr/local/data 현재위치에 /usr/local/data 읽어들이기

:185 r /usr/local/data
185줄 이후에 /usr/local/data 읽어들이기
:$ r /usr/local/data 맨끝줄 이후에 /usr/local/data 읽어들이기
:0 r /usr/local/data 맨윗줄에 /usr/local/data 읽어들이기

:/pattern/ r /usr/local/data
pattern 이 존재하는 줄에 /usr/local/data 읽어들이기

8.5 다중편집하기

vi file1 file2 file3

:args 편집중인 화일목록 보여주기
:n[ext] 다음 화일로 넘어가기
:prev[ious] 이전화일로 돌아가기

## 편집중인 화일이 저장되지 않으면 다음 화일로 넘어갈수 없다. ##

새로운 화일 편집하기

:e[dit] file_name 새로운 file_name 편집하기.
:e! 현재의 편집중인 내용을 무시하고 가장 최근에
편집한 내용을 다시편집하기

8.6 g 옵션과 바꾸기

:m,n s/old/new/g
:g/pattern/ s/old/new/g
————————-

:1,30 s/his/the/gc 1 줄부터 30 줄까지 his 를 the 로 바꾸면서 확인하기.

:g/BX/ s/Esc/ESC/g BX가 있는줄만 찾아서 Esc 를 ESC 로 바꾸기.

:% s/editer/editor/g 처음줄부터 마지막줄까지, editer 를 editor 로 바꾸기

:g/editer/ s//editor/g
위와 동일(“s/” 다음에 인자가 없어서 윗줄과 같은효과)
dos변환
vim에서 unix <-> dos변환

이런 예제가 많이 있는 걸로 압니다.

dos에서는 줄바뀜을 알리는 문자가 rn
unix에서는 n
mac에서는 r

차이점때문에 생기는데

perl이나 다른 유틸로 해결가능하더군요

그런데 얼마전 옛날 잡지를 뒤적거리다보니

재미있는 팁이있어서 소개합니다.

:set ff=unix[enter]
:w[enter]

해주면 dos형태의 파일을 unix로 변환합니다.

간단하죠?

unix, dos, mac을 넣을 수가 있더군요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다