vi editor와 관련된 유용한 팀[펌] > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

vi editor와 관련된 유용한 팀[펌] 정보

기타 vi editor와 관련된 유용한 팀[펌]

본문

이번에 굉장히 유용하게 사용했습니다. 특히 치환에 있었어 ㅠ.ㅠ

일단은 파일이 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 를 눌르면 그 문서의 커서가 위치한 곳의 정보가 아랫줄에 나옵니다.

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

!! 쉘명령어 사용 결과값만
:! 쉘명령어 사용 실행과정부터 나옴<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:32:05 Linux에서 이동 됨]</div>
추천
0

댓글 0개

전체 5,352
개발자팁 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT