BACKRUSH  유닉스명령  다음  자료실  Ascii Table   원격접속  달력,시간   프로세스  
지하철노선   RFC문서   SUN FAQ   SUN FAQ1   C메뉴얼   PHP메뉴얼   너구리   아스키월드 아이피서치

글쓴이: estguard vi editor 활용팁 1부 조회수: 8473

estguard@thrunet.com

적수네 동네에서 긁어온 vi활용 강좌 1입니다.
많은 분들께 도움이 되었으면...

일단 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 파일명
이런식으로 파일로 저장도 합니다.

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

글쓰다가 보면 키를 잘못 눌르거나 커서가 더이상 움직이지 않을때에 &#46945;&#46945;하고 소리가 나게 됩니다.
이 소리가 듣기 싫으실때에는
: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, 즉 제가 작업하는 스타일이였습니다. 아직도 많이 부족하지만 정리해서 적어봤습니다.

관련글 : 없음 글쓴시간 : 2002/03/05 23:39 from 134.75.155.151

  vi editor 활용팁 2부 목록보기 새글 쓰기 지우기 응답글 쓰기 글 수정 침입 테스트에 유용한 도구  
BACKRUSH  유닉스명령  다음  자료실  Ascii Table   원격접속  달력,시간   프로세스  
지하철노선   RFC문서   SUN FAQ   SUN FAQ1   C메뉴얼   PHP메뉴얼   너구리   아스키월드 아이피서치