본문 바로가기

Program Language and Algorithm

vi로 코딩하기~~vol.1

반응형
누군가 요청했던 vi로 코딩하기 시리즈를 블로깅하려고 합니다..>,.<

이 블로그에서는 어떤 종류가 있는지 전부 나열하고 전부 설명하는 진부한 짓 안합니다...ㅡㅡ;;
그런건 위키 백과 뒤지세요......링크 첨부는 생략......왜냐하면 그정도 찾는건 인터넷 갓 시작한 사람도 할 줄 알고 모르는 사람이라면 배워야 하니까요..^____^

여기선 오로지 제가 vi로 코딩하면서 필요했던 것들만 쓰겠습니다. 그러니 실무에 적합할 것이고 내용은 부족할 것입니다. 자신이 제가 소개한 것들을 충분히 쓴다고 생각 된다면 한번쯤 위키백과를 검색하시거나 제가 추천해둔 리눅스 프로그래밍 필수 유틸리티 책을 보세요~~~

그럼 시작 합니다..^.~

우선 설치~~~~ 이게 왜 필요하냐는 아우성이 초큼 들리는데..... 필요 합니다..ㅡㅡ;; 왜냐면 제가 첨에 이거 때문에 뻘짓했거든요.....

일단 리눅스의 종류는 여러가지가 있죠....그중 어떤 리눅스(페도라) 는 vim(vi의 확장 이하 vi) 최신 버전을 기본 설치 하지만 최소화된 채로 말그대로 클라우드 컴퓨팅에 가까운 배포(우분투)를 하는 리눅스는 옛날 옛적 택스트 시절의 vi 를 설치합니다. 그 시절의 향수를 느끼고 싶은게 아니라면.....터미널에 다음 명령을 내려주세요~~~~
sudo apt-get install vim gcc
리눅서라면 이정도는 아시죠...gcc는 특별한 사유가 없는 이상 최신판을 사용해 주시구요~~~

일단 제 .vimrc의 설정 입니다. 기본 틀은 추천했던 필수 유틸리티에서 제공된 녀석과 같습니다. 그걸 제가 아주 조금 손본 상태죠.
앗....ctags까지 넣을려다 보니 제가 입력한건....안나왔네요..ㅡㅡ;; 머 간단한거고 이번장에서는 그것만 설명하려하니 글로 쓰겠습니다.

set hlsearch  << 검색된 글귀에 음영을 씌워 글귀의 위치를 알려줍니다. 저같이 검색을 많이 쓰는 사람은 필수 입니다.
set nu  << 스샷의 왼쪽에 숫자들 보이시죠?? 라인 넘버 입니다. 이녀석들을 나오게 해준답니다.
syn on << 글자에 맞는 색상을 입혀줍니다. 프로그래머라면 당연히 입력해야죠...^^

set ts=8
set sw=4
set sts=4 요녀석들은 탭에 관한 설정을 해줍니다. 설정한지 오래 된 후 안건들였 더니 정확한 내용은 모르겠어요.....궁금한 분은 구글링하시구요...^^ 이 설정 후 탭은 4칸으로 정의 됩니다. 보통 프로그램은 8칸을 쓰는데 (비쥬얼 스튜디오) 프로그래머 라면 4칸이 더 편하실 거에요...좌유로 길게 늘여진 프로그램.....썩 보기 좋진 않찮아요. 그래서 전 비쥬얼 스튜디오를 쓸 때에도 4칸으로 줄여서 씁니다.

그 다음 기본 변수는 모르겠습니다.....저도 기본 뼈대는 카피라서..ㅎㅎㅎ 그 뒤의 내용은 이후 버전에서 하거나 스킵하겠습니다. 제가 스킵한 부분으면....저도 잘 안쓰는 거니까....필요하면 공부하세요..>,.<

좋은 블로거는 친절해야해 근데 난 친절하지 안찮아??? 난 아마 안델거야~~좋은 블로거...ㅠ,.ㅠ

그럼 다음 장에서 할 내용은 제끼고..ㅡㅡ;;

기초 vi로 돌아 옵니다. ㅎㅎㅎ

vi는 3가지 명령모드가 있죠... 하나는 ex모드 였나...그거고 하나는 편집, 하나는 수정(<-아닐수도 있음 머...그게 중요하진 않찮아요?) 입니다.
편집모드는 말그대로 편집하는 것입니다. vi는 켜지면 ex모드 입니다. ex모드에서 상황에 따라 편집모드로 가는 방법은 여러가지가 있습니다. 일단 i 자신의 위치에서 삽입모드 설정, s 커서 위치 지우고 삽입모드 설정 a 커서 다음 위치 삽입 o 다음줄 삽입....그 외에도 수정모드로 들어가는 여러가지가 있는데 생각 안나네요....아시는 분은 댓글 플리즈..................이지만.....귀찮으시죠..초보자인데....외우기....간단하게 하나만 하죠...키보드에 insert키를 누르세요....삽입 모드 입니다. 한번 더 누르세요 수정모드입니다....참~~~쉽죠잉~~~
하지만  위에 제가 언급한 아이들이 있었다는 것 잊지 말아 주세요....오른손이 기본 자판 배열에서 안떠난다는게 vi의 최대 장점중 하나 입니다. 언젠가는 i,s,a,o를 누르는 것에 익숙해 지셔야 합니다....머 그전에 마우스로 안간다는 것만으로도 장족의 발전이지만요..^^

그리고 편집모드에서 ex모드나 수정모드로 가실때는 esc키를 누르시면 됩니다.
왼쪽 ex 가운데 편집 오른쪽 수정
참....위에 삽입모드와 수정 모드라고 했는데....이건 편집모드에서의 수정모드 이지 ex,편집,수정 할때의 모드는 아닙니다....편집시 수정모드는 그냥 한글을 쓰실때 수정모드와 같은 거에요.

자 편집 모드 설명은 접겠습니다. 더 할게 없거든요....창을 텍스트 창으로 만들었으니 열심히 글만 쓰시면 데요....그럼 ex모드와  수정 모드인데 ex모드 부터하고 정~~~말~~~중요한 수정 모드로 가겠습니다.
ex모드에서는 세가지만 기억하세요 e,w,q 추가로 ! ( 당연히 이외에도 많은 명령어가 있으니 필요 하신 분은 검색하세요~~)
e는 열기
w는 저장
q는 종료
!는 강제 입니다.
e text.txt
는 text.txt를 열거나 만듭니다.
w는 저장이고 이후에 전달자가 있으면 그이름으로 저장합니다.
q는 종료 이고 !는 강제 입니다. vi에서 파일이 수정 되었으면 w를 입력하지 않고 q를 누를 경우 저장하지 않았다고 종료 시키지 않습니다. 헌데...편집에 실수해서 저장하기 싫다면 q!를 누를경우 수정된 내용은 갱신되지 않고 강제 종료 되는 거죠.....

그럼~~~~정말 정말 중요한 수정 모드 입니다. 제가 이걸 설명하면서 ex모드의 명령어를 수정 모드라고 소개 하기도 할 것 입니다. 하지만.....그 기준은 누가 만든 건가요....전 제가 만든 기준을 사용 합니다. ex모드의 명령이지만 수정이라는 범주에서 많이 사용 되니까 전 수정 모드로 분류하는 것입니다. 여기에 대해서는 딴지 걸지 말아 주세요~~~

수정은 말그대로 문서를 수정하는 것 입니다. 편집 모드의 수정과 무엇이 다르냐구요???  타 편집기에서 오른손의 위치가 다릅니다. 다 른 편집기에서 사용자의 손이 마우스에 가있다면 이건 vi에선 수정 모드 입니다. 수정 모드에선 화살표나 hjkl키를 이용해서 커서의 이동이 가능합니다. 역시 초보자는 화살표가 편하지만( 저도 아직 화살표를 더 많이 쓴답니다.) hjkl키를 사용 함으로서 오른손이 떠나지 않게 노력해 주세요..^^
이 모드에선 중요한게 너무 많습니다.
일단 'v'키 입니다. 이 키는 마우스를 드레그하는 효과를 부여합니다. 일정범위를 택하는 거죠...
'v'를 누른 뒤 커서를 옮기면 커서가 있던 자리부터 옮겨진 자리까지 선택됩니다. 이후 삭제하시거나 카피하실수 있게 되는 거죠.
응용으로 'ctrl+v'와 'shift+v'가 있습니다. 전자는 블록 선택(줄단위가 아니라 커서의 원래 위치와 마지막 위치가 그리는 직사각형 영역 선택) 이구요 후자는 줄 단위 선택입니다.
왼쪽 보통 선택'v' 가운데 라인선택 'shift+v' 오른쪽 블록선택 'ctrl+v'
다음은 'd'입니다. 이녀석은 삭제 기능을 합니다. 글자 몇개정도는 'v'키를 이용해 선택한뒤 'd'를 눌러 삭제 하시구요.....
정말 중요한건 지금 부터죠...vi의 강점이 나온답니다.

'd'키를 두번 누르세요....커서가 있던 줄이 사라집니다. 'd''1''0''d'를 누르세요 'd'와 'd'사이에 10이라는 숫자가 들어갔죠 커서 위치 포함 아래로 10줄이 삭제 됩니다. 와우~~~ 우린 더이상 문서의 일정영역을 삭제하기위해 마우스로 드레그 한뒤 delete키를 누르지 않아도 된답니다.

다음은 'y'입니다. 이녀석은 카피 입니다. 사용자가 지정한 영역을 버퍼에 넣습니다. 사용법은 'd'와 같습니다. 'y'를 두번 눌러 한줄을 카피 하시던지 'y'사이에 숫자를 넣어 복수 행을 카피하세요~~

버퍼에 카피했으니 이번엔 문서에 붙이셔야 겠죠 'p'를 누르세요 커서 바로 다음에 버퍼에 저장한 내역이 붙습니다. 참~~쉽죠잉~~

이제 'u'입니다. u는 취소 명령입니다. 'd'를 잘 못 눌러서 원치 않는 행이 사라졌다면 u를 누르세요 복구해 줄것입니다. 또한 이 명령의 결과는 vi의 버퍼에 차곡차곡 쌓입니다......근데 이게 또 그렇게 심하게 필요하진 않아요.....필요한 사람은 검색..^^

장시간의 레이스~~~힘드시죠~~~ 마지막은 당연히 정말 중요한 녀석입니다...검색과 치환이죠....약간의 논설을 할테니 필요 없으시면 논설은 스킵하고 바로 검색과 치환 설명을 읽으세요..ㅎㅎ

검색과 치환.....이건 제가 리눅스를 쓰면서 리눅스의 최대 장점이라고 생각합니다. 윈도우의 경우 검색명령은 쓰지도 않고 쓰게 된다면 명령후 퇴근합니다.....다음날 출근 뒤 되어 있는지는 의문이죠....하지만 리눅스의 경우....명령을 내린뒤....커피 한잔 타오면 검색은 종료 되어 있습니다. 또 처음 검색때 태그가 생성 되어 있기 때문에 이후 검색은 명령과 동시에 결과를 출력하죠....매우 빠른 검색 이게 리눅스의 엄청난 장점이죠....이건 vi에서도 당연히 적용 됩니다.

그럼 이제 실무 vi의 검색명령은 /입니다. 수정중에 /를 입력하고 뒤에 원하는 문장을 넣으면 되죠....헌데 찾기만 하는 것으론 부족하시죠...치환 명령도 있습니다. 기본틀은 다음과 같습니다.

:[범위]s/[검색문구]/[치환문구]/[옵션]

첫번째 범위는 % 이거나 라인 넘버 입니다. 이것때문에 전 vi의 라인 넘버 표시를 켜놓는 것이랍니다.
10,13s라고 하면 10번째 줄부터 13번째 줄까지가 범위가 되는 것입니다.
%의 경우 문서 전체를 검색하는 것이구요.

검색문구와 치환문구는 아시죠..^^ 단 이 둘은 스크립트 인식됩니다. 그래서 /와 같은 특수 문자는 \를 붙여줘야 한다는 거 잊지 마세요....귀찮다고 생각 될지 모르지만 스크립트 인식은 이 귀찮음보다 훨씬 많은 이득을 제공 합니다. 제가 쓰는 스크립트만 적죠

$ 줄의 끝 부분을 지정합니다.
^ 줄의 처음 부분을 지정합니다.
& 치환 문구 위치에 넣을경우 검색문구가 그대로 적용 됩니다.

이 실예는 다음과 같습니다.
:10,15s/^/\/\/
이 명령의 결과는 10~15줄을  주석처리 합니다.
반대로
:10.100s/^\/\//^
는 10~100줄까지 중 줄단위 주석으로 잡혀있는 모든 줄을 주석해제합니다.
이런 아이들은 써보시면 금방...익숙해지고 좋아질 것입니다.

마지막 옵션 부분에서 제가 쓰는 건 오직 둘 'g'와 'c' 입니다.

'g'는 줄에서 다수를 선택합니다.(g가 없을 경우 그 줄에 검색결과가...2 이상이라고 해도 첫번째 것만 치환합니다.)
'c'는 치환전에 사용자에게 치환 유무를 물어 봅니다.

당연히 이 이상은....필요하시면 공부하세요

만약 치환에 실수를 하셨다면 그냥 'u'를 누르세요 치환 전의 상황으로 되돌려주는 착한 vi를 보실수 있으십니다. 그리고 나서 :입력후 위쪽 화살표 한번 눌러주시면 이전에 입력한 치환 문이 나올테니 잘못 된 것만 수정해서 다시 명령 내리시면 뎁니다...^^

머..제가 vi를 쓰면서...쓰는 것들만 나열했습니다. 이후에 꼭 필요하다고 생각되는게 있다면...절취선과 함께 추가 될것이구요....
허나 아마 없을거에요....그럼...다음에는 위 스샷에서 키 매핑에 있는 아이들에 대한 설명을 하겠습니다...^^
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vimrc를 요청하시는 분은 보내 드립니다...많으면 첨부하구요..^^
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
글 올리고...일하려다...저도 모르게 여기 안써 놓은 기능을 쓰더군요...ㅡㅡ;; 정말 중요한 기능인데...
ex,수정 모드에서 :후 숫자를 쳐보세요...해당 라인으로 이동합니다. :1000이라고 치시면 파일의 1000번째 줄로 커서가 이동하는 거죠..^^
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
별로 신경 안쓰고 쓴 글인데 너무 많이 읽어 주셔서...ㅡㅡ;; 내일까지 스샷첨부해서...좀...이쁜 글로 만들어 놓겠습니다..>,.<
관심에 감사드립니다...^^
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
또 추가하는 군요..^^ 수정모드에서의 명령입니다. 'g''g' (g키 연속입력)수정모드에서 이 키는 파일의 제일 첫줄로 이동합니다. 또 대문자 'G'는 글의 제일 끝줄로 이동하죠....이 명령은 여러가지로 사용 됩니다. 중간에 'y'키나 'd'키등을 넣을 수 있거든요 'y'키를 삽입 할 경우 'g''g''y''G'가 되겠죠...이러면 파일 전체가 카피 됩니다. 또 'g''g''d''G'의 경우 파일 전체가 삭제 되구요. 또 추가 키 '='이녀석은 수정 모드에서 자동 들여쓰기 기능을 합니다. 'v'키로 영역 선택후 '='을 누르면 그 영역에 자동 들여쓰기가 적용 되는 거죠 마찬가지로 'g''g''=''G'를 이용 글 전체에 자동 들여쓰기를 적용 시킬수도 있구요. 이 기능은 매우 중요합니다. 왜냐하면 디버그를 돕거든요 프로그램 짜다 보면 괄호가 덜 닫혀있다는 메시지를 많이 보실 것입니다. 이경우 'g''g''=''G'를 입력하면 들여쓰기 기능때문에 닫히지 않은 괄호를 쉽게 찾으실수 있죠..^^
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0722 스샷 첨부 하였습니다...ㅡㅡ;; 많이 늦었죠...약속한거 보다....스샷보다 사용법을 동영상으로 올리는게 나을 것 같아...새벽에 찍어 놨는데....안올라 가네요..ㅡㅡ;; 내일 서브 PC나 노트북으로 다시 해봐야 겠어요..^^

반응형