일단 vi를 버젼별로 약간의 다른 점이 있는데 보통사용하시는 버젼(6.0이전버젼)으로 설명
을 하겠습니다. 최근 나온 6.0 버젼 들은 디렉터리 보기 기능등이 있지만 그전버젼엔 없는
걸로 압니다. 테마가 있어서 이쁘게 꾸밀수도 있다지만.. vi 의 바뀐 점들은 http://vim.sourcefor
ge.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 을 눌러 보세요.
자동으로 완성됩니다. 예를 들어서,
linuxnew 와 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://linuxnew.com 인데 들려주셔서 서로의 팁을 공유하였
으면 좋겠구요~ 제가 전부터 운영하던 제 작업홈페이지인 http://linuxnew.com 에도 오셔서 여
러가지 즐거운 관계로 지냈으면 좋겠습니다. 그럼 이렇게 문서 마무리 하겠습니다. Written
By Pbi12 --
아직도 많이 부족하구나...