GIT 간단 사용기 1  에 이어 계속 진행하자.

사용기 1에서 웹으로 부터 clone한 폴더를 로컬 서버로 다시 clone한 다음 부터 진행하도록 한다.

2. Work Project를 생성하자.
/home/git-repos
폴더에서
>> git clone u-boot /home/work/u-boot

1. 사용자 등록
우선, 사용자 등록을 하도록 하자. name 과 email을 이용하여 git에게 사용자를 알려주게 된다.

>> git config --global user.name myname
>> git config --global user.email mymail@email.addr
>> git config -l

...
user.name=myname
user.email=mymail@email.addr
...


2. Branch 가지고 놀기
  어쨌든 다운 받은 코드에서 Branch를 이용해보자. 생성 삭제 등등이 너무나 자유로워서 내마음대로 가지고 놀아도 괜찮을 듯하다.
1) Branch 생성

>> git branch mybranch

or

>> git checkout -b mybranch [TAG]

이처럼 두가지 방법으로 Branch 생성이 가능하다.
 첫번째는 mybranch라는 이름의 branch를 생성하기만 한다. 즉, 현재 branch는 mybranch를 생성하기전의 branch가 되는 것이다. 지금은 master이다.
 두번째는 간단 사용기 1에서도 사용했던 것 처럼 mybranch를 생성과 동시에 현재 branch를 mybranch로 변경하는 것이다. [TAG]를 사용할 경우 해당 TAG를 default code로 사용하게 되며, [TAG]를 입력하지 않을 경우 mybranch를 생성하기 직전의 코드를 default로 사용하게 될 것이다.

2) Branch 변경 및 삭제

>> git checkout mybranch
>> git branch -d mybranch

checkout 은 현재 소속을 변경하는 역할을 한다. 명령을 이용하여 해당 branch로 변경할 수있다. 또한 생성된 branch를 삭제하고 싶으면 branch의 -d 옵션을 사용하면 된다.
등록되어 있는 모든 branch를 확인하고 싶으면 그냥  git branch를 입력하면 된다.


3) branch에서 작업한 내용을 병합하기 (Merge)
- mybranch에서 작업을 한 이후 commit를 이용하여 변경사항을 적용한다. 추가된 사항이 있다면 add 명령을 이용하여 추가해야 할 것이다.

>> git commit -a

- 변경사항이 저장되었으면, 머지될 branch로 돌아가자. 우선은 master에 머지하는 것으로 하겠다.
행여나 master 가 변경되어야 할 사항이 있다면 commit부터 하도록하자.

>> git checkout master
>> git commit -a
>> git merge mybranch

만약 충돌 사항이 없다면 제대로 된 것이다. 충돌이 있을 경우 diff명령을 이용하여 충돌을 확인 후 수정 및 commit를 하면 된다.
diff 명령은 새롭게 추가된 파일중 add가 수행되지 않은 파일도 보여준다. 충돌 사항을 확인 하기에는 번거로운 경우이다. 이를 피하기 위해 --cached 옵션을 사용하자. 서버에 등록된 코드의 변경사항만 보여준다.

>> git diff
>> git diff --cached
>> git status

status 명령은 작업 프로젝트의 간단한 변경사항들을 알려준다.

4) 작업완료된 분기 삭제하기
- 변경 사항이 모두 적용되었고 더이상 branch가 사용되지 않는 다면 위의 삭제 명령을 이용하여 과감히 버리자.


더 자세한 사항은 http://www.kernel.org/pub/software/scm/git/docs/user-manual.html 의 GIT user manual이나 http://git-scm.com/ 의 Document를...



cf) 마음껏 퍼가셔도 됩니다.
출처 및 댓글 남겨주시면 감사하고, 것도 여의치 않으면...
그동안, 그리고 앞으로 내가 저지를 행동들이 있기에  ^____________^

Posted by 알 수 없는 사용자
>> 간단 시나리오.
u-boot를  git를 이용해서 받았다.
U-BOOT-1_1_6 의 TAG  를 Base로 작업을 했다 치자.
내가 가진 보드에서 무지하게 동작잘하는데, 같은 보드를 가진 client가 uboot를 달라한다.
이럴땐 어떻게 전달할까?

case 1. make clean을 해서 소스만 남긴뒤, 압축해서 메일로 보낸다.
  -> 요거 소스 용량얼마 안되고, Base 코드도 서로 모르고 하면 이게 최고다. 소스 용량이 얼마 안된다면 말이다. ㅡ,.ㅡ

case 2. Base 코드랑 compare해서 수정된 파일만 남기고 모조리 지운다. 그리고 폴더채로 압축해서 메일로 보낸다.(Beyond Compare같은 툴을 쓰면 겁나 편하다.) 
  -> 불과 4,5년전에 엄청나게 하던 짓이다.800M넘는 수만개의 파일을 비교해서 다른놈만 뽑아서 보내느라 죽는줄 알았다. 즉 무식하면 손 발이 고생한다는게 요런 짓이다.

case 3. diff 명령을 이용해 patch script 파일을 만들어 요놈만 보내자. client는 patch 명령을 이용해 틀린부분만 업데이트가 가능할 것이다.
-> 이걸 이제야 알게 되었다니 기가 막힐 노릇이다. 모르는게 약이라고는 하지만 무식하면 손 발이 고생한다는 걸 절대 잊어선 안되겠다.


1. Patch 파일 만들기.
u-boot Base코드와 u-boot-work 작업코드를 준비한다. 요기까지는 case 2랑 비슷하다.
>> diff -uprN -X  dontdiff u-boot u-boot-work > diff.patch
   u : output num lines of unified context 란다. 사실 뭔지 잘모르겠다.
   p : 비교하는 파일에 대한 정보가 diff.patch파일에 기록된다. 요놈이 없으면 patch명령이 동작하지 않는다.
   r : sub folder까지 비교한다.
   N : 추가된 파일에 대한 정보를 diff.patch파일에 기록한다.
   -X [dontdiff] : dontdiff에 대한 파일은 diff.patch파일생성에서 제외시킨다.
cf) dontdiff 파일 내용
*~
*.png
*.a
*.o
*.so
*.ko
*.gz
*.orig
*.rej
*.ver
*.bin
*_MODULES
.*
*.aux
*.dvi
*.eps
*.log
*.pdf
*.css
*.gif
*.jpeg
*.html
*.ps
*.sgml
*.tex
...

를 실행하면 두 폴더의 차이가 patch 파일이 생성된다.


2. Base 코드에 Patch 적용하기
diff.patch파일을 적당한 위치에 카피한다. u-boot-base폴더가 있는 곳에 카피를 하자.
>> cd u-boot-base
>> patch -p1 < ../diff.patch
-p[N] : Strip [N] leading components from file names.
diff에 기록된 파일path에 대하여 /를 찾아서 [N]까지를 뺀 파일에 적용한다.
즉 diff.patch에 u-boot/test.c 에 대한 파일은 -p1일 경우 test.c를 찾아서 적용, -p0일 경우엔 u-boot/test.c를 찾아서 적용하게 된다.

이러면 Patch 끝.

cf) 마음껏 퍼가셔도 됩니다.
출처 및 댓글 남겨주시면 감사하고, 것도 여의치 않으면...
그동안, 그리고 앞으로 내가 저지를 행동들이 있기에  ^____________^

'이것 저것.. > ProgramGuide' 카테고리의 다른 글

GIT 간단사용기 2  (0) 2009.05.08
GIT 간단 사용기 1  (2) 2009.05.07
Linux svn client - Nautilussvn  (0) 2009.05.05
Eclipse기반 크로스플랫폼 개발 환경  (0) 2009.04.10
Trac으로 Project를 관리해 보자  (0) 2009.02.05
Posted by 알 수 없는 사용자
GIT가  SVN과 비슷하다 하드만... 도저히 감이 안잡힌다. 뭐 이런게 다 있나 싶을정도로....

몇일간의 웹서핑과, Local에서의 테스트로 얻은것들을 정리한다.
이제 초기 작업을 위한  내용파악이 된 상태지만, 머지 않아 내가 Local에서 마음대로 쓰기에 불편하지 않을 정도가 될 것같다. (@.@ 뭐시라???)

이 문서는 기존의 Repository에서 GIT로 다운받은 후 Local에서 버전관리 하기 위한 시작단계의 내용들이다.
Sample은 u-boot 코드를 이용하였다.
Test환경은 Cygwin 상에서 이루어 졌으며, Linux상에서도 아무 문제 없이 될 듯하다.
아직은 Linux보다는 윈도우에 설치된 Cygwin이 내 입맛에는 맞는 듯하다.

1. Repository에서 GIT로 다운 받기
>> mkdir git-repos 
>> cd repos
>> git clone git://git.denx.de/u-boot.git  
혹은
>> git clone http://git.denx.de/u-boot.git  

를 실행하여 u-boot를 다운받는다.
<결과>
/home/git-repos/u-boot
가 생성된다.
앞으로 local에서 사용할 GIT의 Repository이다.

/home/git-repos/u-boot 폴더에서 git log, git tag -l, git branch 등을 이용하여 GIT의 정보를 마음껏 확인할 수있다.

2. Work Project를 생성하자.
/home/git-repos 폴더에서
>> git clone u-boot /home/work/u-boot
를 실행하여 work project를 만든다.

이제 작업할 Base 버전을 선택하고 Branch를 만들자.
물론 Main에 저장해도 상관은 없겠지만, Original Source가 내가 만든 것이 아니므로....

Tag 와  Branch를 확인해보자.
>> git tag -l

...
v1.3.4
v1.3.4-rc1
v1.3.4-rc2
v2008.10
v2008.10-rc1
v2008.10-rc2
v2008.10-rc3
...

>> git branch
>> * master
현재 등록되어서 사용되는 Branch를 볼수 있다. 
다운받은 u-boot코드는 master가 하나 딸랑 보이고 앞에 '*'가 붙어 있다. 이놈이 SVN의 trunk에 해당하는 듯 하다.
'*' 는 현재 사용되는 branch를 가르킨다.

이제, 내가 원하는 TAG의 코드로 나만의 branch를 생성시켜보자.
생성 명령은 checkout 이고, Branch 생성은 -b new 이다.

>> git checkout -b mybranch U-Boot-1_1_6
를 실행하면 U-Boot-1_1_6 의 TAG코드로 변경되고, mybranch가 생성되어 현재 사용되는 branch로 등록된다.

다시한번
>> git branch
를 실행하면 아래와 같은 화면이 보인다. 이번에는 메인 branch가 mybranch로 변경되었다.
>>   master
>> * mybranch

branch를 생성하긴 했는데, 코드를 다른 놈을 Base로 쓰고 싶단다. 그럼 어떻게 하나????
>> git reset --hard TAG
멋지다. 요렇게 하면 마음대로  Base코드도 바꿀 수 있다.

근데... 요렇게 작업하다가 master로 돌아가고 싶으면???? 
음... 요기까지는 아직 검토안해봤다. Branch의 이동명령...  왠지 그런 것도 될 것만 같은...

쩝... 암튼.. 겁나 편한 거 같기는 한데 아직은 잘 모르겠다.

Commit이랑 History관리 등등은... 기약없이 다음으로 .....

더 자세한 사항은 http://git-scm.com/ 의 Document를...



cf) 마음껏 퍼가셔도 됩니다.
출처 및 댓글 남겨주시면 감사하고, 것도 여의치 않으면...
그동안, 그리고 앞으로 내가 저지를 행동들이 있기에  ^____________^
Posted by 알 수 없는 사용자
Linux에서도 윈도우용 TortoiseSVN과 같은 사용자 편의성의 높은 SVN Client가 있단다.

Nautilussvn이 바로 그것이다. Nautilus하면 나디아의 네모 선장이 생각난다는...  ^^;;

자세한 사항은 홈페이지를 참조하자. http://code.google.com/p/nautilussvn/

다운 받은 파일 설치 : sudo dpkg -i nautilussvn_xxx.deb
Package 의존성 : python-nautilus, python-wxgtk2.6, python-svn, python-configobj, meld (diff, merge)
Posted by 알 수 없는 사용자
Eclipse 기반 임베디드 리눅스 크로스 플랫폼 개발 환경을 소개한다.

소개

Eclipse 기반 임베디드 리눅스 크로스 플랫폼 개발 환경을 소개한다.

개발 환경 버젼 정보

Subclipse로 프로젝트 불러오기

Repository를 추가

  • Perspective 를 SVN으로 변경합니다.
  • SVN Repository 창에서 마우스 오른쪽 버튼 -> [New] -> [Repository Location ...]
  • URL에 http://svn.emstone.com/svn/at204x 입력

Project Check out

  • 프로젝트 선정 후 마우스 우버튼 클릭합니다. 여기서는 at204x-1.6-stable를 선정
  • "Check out as a project configured using the New Project Wizard"를 선택한 후 Finish 버튼을 클릭합니다.
    • C Project로 설정하기 위해서 Project Wizard 사용
eclipse/crossplatform/2007-02-02.7368576235/image

Project Type 지정

Managed Make C BUILD:

프로젝트에 Makefile이 없는 경우.

Standard Make C BUILD:

project에 Makefile이 있는 경우. 
  • Makefile이 존재하므로 'Standard Make C BUILD'를 선택
eclipse/crossplatform/2007-02-02.7487207363/image

PATH 환경 변수에 툴체인의 위치를 지정

  • 여기서는 /usr/local/arm-linux/bin
  • PATH에 크로스 툴체인의 위치가 반드시 지정되어야 합니다.
eclipse/crossplatform/2007-02-02.7990567966/image

Eclipse에서 minicom 사용하기

External tool로 minicom 추가

  • 메뉴바에서 [Run]-> [External tools] -> [External tools..]을 클릭
  • 아래 화면이 나오면은 다음 값들을 입력한 후 저장하고 나온다.
  • Location: /usr/bin/gnome-terminal
  • Arguments: -e "/usr/bin/minicom"
eclipse/crossplatform/2007-02-01.8147644080/image
  • 저장하고 나오면은 [Run]-> [External tools] 에서 minicom 메뉴를 볼수 있다.

Remote Debugging - NT Application 디버깅

Remote Debugging 이란

eclipse/crossplatform/2007-02-02.9328613704/image
임베디드 시스템을 호스트에서 디버깅 하는 것을 말합니다. Remote Debugging을 하기 위해 필요한 것들
  • 호스트(Development System)에서 동작하는 debugger
  • 타켓에서 동작하는 통신 프로그램. 이 통신 프로그램은 호스트의 디버거와 통신을 합니다.
타겟의 OS가 리눅스이고 호스트의 디버거가 gdb인 경우
  • 타겟에선 gdbserver가 통신 프로그램입니다. gdbserver는 리눅스 운영체제 위에서 동작합니다.
  • 호스트에서는 gdb 프로그램을 동작
  • 그림에서는 Ethernet으로 연결되어 있지만 시리얼 통신을 이용할 수 도 있습니다.

arm-linux-gdb와 gdbserver 준비

다음은 리모트 디버깅에 필요한 프로그램들을 컴파일 하고 설치 합니다.

arm-linux-gdb 컴파일
  • gdb-6.6 컴파일.
./configure --target=arm-linux --prefix=/usr/local/arm-linux
make install
  • gdb-6.3 컴파일 중 에러 메세지가 발생하여 gdb-6.6으로 컴파일
../../../gdb-6.3/sim/arm/iwmmxt.c: In function ‘WMAC’:
../../../gdb-6.3/sim/arm/iwmmxt.c:2117: error: invalid lvalue in assignment
gdbserver 컴파일
gdb-6.6/gdb/gdbserver/configure --host=arm-linux
make

컴파일 후 타겟에 올라가는 램디스크에 적재

리모트 디버깅 실행

Target (NT) - gdbserver 실행
  • NT에 로그인 후, 다음과 같이 명령어 입력.
gdbserver  [host_ip]:[port] 디버깅_프로그램
Host (PC) - arm-linux-gdb 실행

arm-linux-gdb 실행후, 리모트 디버깅 명령어 입력.

arm-linux-gdb -s [심볼 파일]
target remote [target_ip]:port

ECLOX - 문서화 도구

  • Version 0.5.5
  • 문서화 도구로 Doxygen 설정파일인 Doxyfile 파일을 GUI로 설정할 수 있게 해준다. 단, Doxyfile을 생성해주지는 않는다.

설치

  • [Help] -> [Software Updates ]-> [Find and Install] -> "Search for new features to Install" 선택

  • New Remote Site 클릭 후 아래 사이트 추가

    http://download.gna.org/eclox/update

사용법

Doxyfile을 더블 클릭한 후 화면.

eclipse/crossplatform/2007-02-01.2402764972/image

문제점

  • sudo 명령을 포함하고 있는 Makefile의 target은 error 발생
  • Remote Debugging 시 ARM 소스 코드가 disassemble 되지 않음.
  • Shared Library 함수 호출된 후부터는 Debugger가 소스코드 위치를 찾지 못함.

TODO List

  • Remote Debug를 Eclipse에서 이용하는 방법
  • CDT Project Type을 추가 하여 좀 더 쉽고, 자동화된 환경 제공 필요.
  • Target 시스템의 파일을 이클립스에서 관리하는 기능
by myungo 최종 수정일: 2007-02-02 17:10

출처 : Tong - kangdydtjs님의 C,C++통


Posted by 알 수 없는 사용자

프로젝트 관리

트랙에서 새로이 생긴 개념은 바로 티켓( Ticket )과 마일스톤( Milestone ) 입니다.

  • 티켓  하나의 개발 이슈입니다. 이것은 버그 수정이 될 수도 있고 새로운 기능 추가가 될 수도 있습니다. 프로젝트에 있어서 변경사항이 필요한 최소 단위라고 보시면 되겠습니다.
  • 마일스톤  마감일이라고 보면 비슷합니다. 프로젝트에 있어서 프로토 타입 공개클로즈 베타 서비스 등 일종의 정해진 마감일입니다. 각 티켓은 무조건 하나의 마일스톤을 지니게 됩니다.

티켓

 

사용자
  • 티켓 제목  Arrange Damage 라는 글자가 맨 위에 보이시는지요? 바로 이 티켓의 제목입니다. 티켓의 제목은 이 티켓의 내용을 함축하고 있어야겠죠. 이 티켓은 Arrange Damage 라고 합니다. 무언지는 모르겠지만 데미지를 조정하도록 요구하는 티켓으로 보입니다.
  • 발행 날짜  Opened 8 moths ago. 8 달 전에 발행한 티켓이네요. Last modified 6 moths ago. 이 티켓의 내용을 프로젝트에 마지막으로 반영한 것은 6 개월 전입니다.
  • Reported by  Digitz 라고 나와있죠? 이건 티켓을 발행한 사람입니다. 티켓 발행자는 프로젝트 일원이면 누구나 발행할 수 있습니다. 버그를 발견했거나 기능을 추가할 필요성이 있을 때 그 당사자가 발행하면 되겠죠.
  • Assigned to  digitz 군요. 개발자 자신이 티켓을 접수할 수도 있고, 혹은 프로젝트 매니저가 해당 개발자에게 직접 넘길 수도 있습니다. 티켓을 받은 사람은 티켓을 처리하거나 다시 티켓을 딴 사람에게 넘기던가 하면 됩니다.
  • Priority  티켓의 중요도를 나타냅니다. trivial < minor < major < critical < blocker의 순으로 나뉩니다.
  • Milestone  이 티켓이 속한 마일스톤을 나타냅니다. 마일스톤에 대한 내용은 다음 항목에서 설명하도록 하겠습니다.
  • Component  이 티켓이 관여하는 모듈이 무엇인지 나타냅니다. 예를 들어 클라이언트 어플리케이션이 있고 스크립팅 툴이 있다면 그것들이 컴포넌트가 될 수 있겠죠.
  • Version  이 티켓이 유효한 버전을 나타냅니다. 이것은 리비젼과는 다르게 취급됩니다.
  • Keywords  이곳에 해당하는 키워드들을 등록합니다. 이 키워드들은 나중에 검색할 때 효과적으로 동작합니다.
  • Cc  티켓 발행자를 제외한 다른 사람에게도 이 티켓에 변경사항이 있을 때 메일을 보내도록 합니다. 참조라고도 하죠.
  • Description  티켓의 세부 설명을 적습니다. 위키 문법을 이용할 수 있으므로 하이퍼텍스트로 다른 페이지를 연결하는 것도 가능합니다.

이런 티켓은

  • 티켓을 받거나( accept )
  • 해결하거나 ( resolve )
  • 다른 사람에게 교부( reassign )

할 수 있습니다. 만일 해결이 되었다면 담당자는 이 티켓을 폐기( close )할 수 있습니다. 폐기하게 되면 마일스톤에 진척도 그래프가 올라가게 됩니다.

마일스톤

마일스톤은 각각의 마감 시한을 나타냅니다.

패치 올리는 날, 클로즈 베타 시행하는 날, 프로토 타입을 올리는 날. 그 어떤 것이 될 수도 있습니다. 마일스톤은 그 마감 시한과 티켓들을 지니고 있으며 그것을 예쁜 그래프로 표시해줍니다.


사용자

각각의 마일스톤이 나와있고 마감시한이 6, 7달이 지났다는 걸 나타내고 있습니다. 마지막 마일스톤인 Implement Multiplay를 살펴보면 폐기된 티켓이 두 장, 아직 남아있는 티켓이 한 장. 그래서 67%의 완성율을 지니고 있다고 알려주고 있습니다. 그 외의 마일스톤의 경우 100%인데도 그래프가 보이는 이유는 마일스톤 설정자가 그 마일스톤을 폐기하기 전까지는 그 마일스톤은 유효한 것으로 칩니다. 왜냐면 언제든 티켓이 재발행되거나 할 상황이 나올 수 있기 때문이죠. 그리고 100%라고 나와있는 그래프를 좀 더 오래보면 좋지 않습니까. 실제로 티켓을 폐기하고 늘어가는 그래프를 보면 보람이라는 녀석이 조금씩 차오르는 걸 느낄 수 있습니다.

놀랍게도 빨간 글자 뿐만 아니라 그래프도 각각의 통계 페이지를 제공합니다. 여기서 일일이 스크린 샷을 첨부하기 보다는 직접 눌러보시기를 궈장합니다. 그냥 눌러 보아도 이해가 잘 될 정도로 일목요연하게 정리가 잘 되어 있습니다.

메뉴 설명

굳이 메뉴를 설명할 필요 있겠냐마는 간단히 설명하자면 다음과 같습니다.

  • Roadmap  마일스톤 그래프를 보여줍니다. 바로 위의 그림을 참고하세요.
  • View Tickets  현재 프로젝트의 모든 티켓을 분류하여 보여줍니다.
  1. Active Tickets : 현재 남아있는 모든 티켓을 보여줍니다.
  2. Active Tickets by Version : 현재 남아있는 모든 티켓을 버전별로 보여줍니다.
  3. All Tickets by Milestone : 모든 티켓을 마일스톤별로 보여줍니다.
  4. Assigned, Active Tickets by Owner : 현재 티켓을 가지고 있는 사람별로 보여줍니다.
  5. Assigned, Active Tickets by Owner (Full Description) : 위의 항목을 좀 더 상세하게 보여줍니다.
  6. All Tickets By Milestone (Including closed) : 3 번 항목을 폐기된 티켓도 함꼐 보여줍니다.
  7. My Tickets : 나에게 할당된 티켓을 보여줍니다.
  8. Active Tickets, Mine first : 모든 티켓을 보여주되, 나의 것을 제일 위에 보여줍니다.
  • New Ticket  새 티켓을 발행합니다.
  • Search  프로젝트 내부에서 검색합니다. 위키만이 가진 장점입니다. 속도도 매우 빠릅니다.

위 와 같이 트랙을 크게 기능별로 세 개를 알아보았습니다. 트랙은 프로젝트 관리에 있어 충분하다고는 할 수 없지만 필수적인 최소한의 요건을 지니고 있습니다. 트랙만으로도 충분히 잘 돌아가는 프로젝트들도 여럿이 있으며 웹 기반이라 어떠한 플랫폼에서도 돌아갑니다. 또한 오픈 소스라서 별도의 라이센스가 필요없습니다.

가볍지만 강력한 프로젝트 관리자.

당신도 한 번 사용해보심이 어떻습니까 ?


Posted by 알 수 없는 사용자
출처  : http://2bwithu.tistory.com/156

그 동안 각종 아이디어(기획안) 및 도서 요약 정리 등의 용도로 사용할 프로그램을 찾다가 ThinkWise(MindMapper, 이하 MindMapper)를 적극 활용하기로 결심했습니다. 이미 이전 게시물에서 빌 게이츠가 극찬한 프로그램이라고 이 프로그램의 유용성을 소개해드린 적이 있는데요. 이번에 순전히 개인적인 불편을 해결하기 위해 비공식적인(배포 불가한) Portable MindMapper를 만들어 봤습니다.


평소 MindMapper 프로그램으로 작성한 문서를 USB 저장 장치에 폴더로 분류하여 넣고 다니는데, 프로그램이 설치되지 않은 컴퓨터에서는 파일을 열어볼 수 없는 불편함이 상당했습니다. 물론 MindMapper에서 자체 제공하는 문서 변환 기능으로 MS Word나 HWP 등으로 변환된 것을 같이 저장하고 다니면 필요할 때 간접적으로 수정할 수 있으나, 직접 MindMap을 열고 이것 저것 수정하는 것과는 전혀 다른 의미와 느낌을 주는 일이죠.


이 때문에 요즘 각종 프로그램이 비공식적으로 Portable화되어 배포되고 있는 점에 착안하여 스스로 MindMapper의 Portable화를 시도해보기로 했습니다. 하지만 제작 방법에 대해 아는 것이 전혀 없었기 때문에 시작하기조차 힘들었습니다. 그동안 각종 Portable 프로그램을 넙죽 받아서 사용하기만 했을 뿐 만들 생각은 전혀 못했기 때문이죠.


기초지식 하나 없이 이곳 저곳 헤매다 긱종 Freeware를 Portable화하여 배포하고 있는 Portableapps.com 의 포럼 게시판에서 NSIS로 작성된 Portable Template(스크립트 파일)를 하나 발견했습니다. 별다른 지식이 없이 그저 하라는 대로 적용만 하면 바로 자신만의 Portable 프로그램을 만들 수 있는 해주는 놀라운(적어도 제게는) 물건이었습니다. 최종적으로 NSIS 컴파일을 해야하긴 하지만, 이것 역시 아무것도 몰라도 바로 할 수 있는 일이더군요. 실제로 저는 NSIS에 대해서 전혀 몰랐지만, Portable MindMapper를 만드는데 아무런 장해가 없었습니다. 해당 Template은 아래 링크를 클릭하여 바로 다운로드 받으실 수 있습니다.


Klonk's Portable Application Template v1.4 : http://portableapps.com/node/2022 


NSIS는 헬마님이 본인 블로그에서 직접 한글화하여 배포하고 있는 것을 설치했습니다. 각종 플러그인과 에디터들이 포함되어 있는 데다가 사용 설명서까지 한글화되어 있더군요. 저처럼 잘 모르는 분들에게는 그야말로 정말 최고가 아닐까 합니다. 하지만 이것만으로는 부족하고, 헤더와 플러그인을 한개씩 추가로 설치해줘야 합니다. 워낙 아는게 없이 작업하다 보니 저는 이런 기초적인 부분을 몰라서 좀 헤맸습니다. 별것 아니고, 아래 파일 두개를 받아서 Registry.nsh는 설치를하시고, FindProc.dll은 NSIS가 설치된 폴더내 Plugins 폴더에 넣어주시면 됩니다.(헬마님 같은 고수가 이 Template를 좀 다듬어주고, 한글 각주를 붙여주신다면 이용하기가 훨씬 편리할텐데요.)



또한, Portable 프로그램 실행시 해당 컴퓨터에 임시로 등록해주고, 프로그램 종료시 깨끗히 삭제해줘야하는 레지스트리를 Template에 입력해야하는데, 이를 위해서 Portable화하고자 하는 프로그램을 정상적으로 컴퓨터에 설치할 때 등록되는 레지스트리를 파악할 수 있게 해주는 프로그램이 필요합니다. 저는 Total Uninstall을 이용했습니다만, Freeware인 RegShot을 이용해도 전혀 문제가 없겠더군요.  


Template를 다운받고, NSIS와 추가적인 헤더와 플러그인 설치, 레지스트리 감시 프로그램까지 설치했으면 이제 기본 준비는 완전히 끝난 것입니다. Klonk의 게시물의 기초 설명과 스크립트 파일에 달린 각주, 그리고 게시물 아래 달린 질문/답변을 참고하여 기본 사항만 입력을 해주고 NSIS 컴파일만 해주면 일은 끝납니다.


게시물에 달린 댓글을 보면, Klonk 님이 예제로 Freeware인 Inkscape의 Portable 스크립트를 작성하여 올려둔 것이 있는데 이걸 이용하여 먼저 Portable Inkscape를 만들어 보시기 바랍니다. 이것을 한번 해보면 어떻게 해야하는지 감이 잡힐 것입니다.


마지막으로 작업 폴더를 만드는 것이 아주 중요한데, 이것을 아무렇게나 만들어서는 곤란합니다. Inkscape를 예로 들자면 아래와 같은 형태로 폴더를 만들어줘야 합니다.(게시물 댓글에 있는 내용임)


PortableInkscape (컴파일한 Portable 실행파일이 위치해야 할 곳)
+-App
| +-Inkscape (프로그램 설치된 폴더의 모든 파일 및 폴더를 이 폴더 안에 복사)
+-Data
  +-Registry
  +-Settings
  +-Other
    +-PortableInkscapeSource(기본 스크립트, 아이콘파일(ICO),스플래시 이미지는 이곳에 복사)

설명이 부족하지만 사실 제가 아는 것이 이 정도 수준에 불과합니다. 다행인 것은 이 정도만 알아도 Portable 프로그램을 만들 수 있다는 것이지요. 관심 있으신 분들은 꼭 한번 도전해보시고, 기필코 성공하시기 바랍니다. 혹시 이것말고 더 쉽고, 좋은 방법이 있으시면 저한테 좀 알려주시구요. 질문을 해주시면 제가 아는 한도 내에서 답변을 해드리겠습니다. 하지만 뭐, 크게 도움은 안될거에요. :)

'이것 저것.. > ProgramGuide' 카테고리의 다른 글

Eclipse기반 크로스플랫폼 개발 환경  (0) 2009.04.10
Trac으로 Project를 관리해 보자  (0) 2009.02.05
Apache + Subversion + Trac 설치 가이드  (0) 2009.01.09
VIM 팁  (0) 2008.12.31
Doxygen 설정  (0) 2008.04.16
Posted by 알 수 없는 사용자

[STEP I. Package 준비]
1. Subversion 접속후 관련된 Application의 Version Check
1)(Apache version 확인) http://subversion.tigris.org 에서 WindowsBinary 접속 -> 지원가능한 Apache Version 확인    -  현재는 2.2 version 사용 가능
2)(python version 확인 - 2.5) 원하는 Apache Version을 클릭하여 python binding 파일의 Version을 확인
=> subversion Apache용 Binary & python Binding 용 Binary Download

2. http://apache.org에 접속하여 HTTP Server선택하여 1.1)에서 확인한 version(2.2)의 apache binary Download
=> localhost로 접속은 되는데, IP로 접속이 안된다. 왜그럴까???
어쩔수 없이 근사모(www.apmsetup.com)에 접속하여 apmset6.0을 다운 받아 설치하였다. apache버전을 확인하고 다운로드하여야 한다.

3. http://www.python.org 에 접속하여 1.2) 에서 확인한 version(2.5.4)의 python binary Download

4. http://www.modpython.org 에 접속하여 apache와 python의 version을 지원하는 binary Download

5. http://trac.edgewall.org 에 접속하여 최신버전(0.11.2.1)의 TRAC  Download

6. http://genshi.edgewall.org 에 접속하여 최신버전(0.5.1)의 바이너리 Download

7. http://peak.telecommunity.com 에 접속하여 setuptools인 ez_setup.py Download

8. http://initd.org에 접속하여 pysqlite의 최신 버전(2.4.1)중 python의 version과 동일한 Binary download

9. http://sourceforge.net/projects/gnuwin32 에서 enscript를 Download


[STEP II. Package 설치]
1. Apache 설치 + WEBDav 설치
  1) 다운로드 받은 apm_setup.exe를 설치한다.
  2) conf 를 설정하여 webdav를 사용하기 위한 환경 설정을 한다.

>> httpd.conf
사용 모듈 선언 (주석 # 제거)
...
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so

WEBDav 환경 설정 파일 include (주석 처리 되어있는 부분을 해제한다.)
Include conf/extra/httpd-dav.conf

>> httpd-dav.conf
digest type을 Basic Type으로 변경한다.

DavLockDB "C:/apps/server/Apache2.2/var/DavLock"
Alias /uploads "C:/apps/server/Apache2.2/uploads"
<Directory "C:/apps/server/Apache2.2/uploads">
    Dav On
    Order Allow,Deny
    Allow from all

    AuthType Basic
    AuthName DAV-upload

    AuthUserFile "C:/apps/server/Apache2.2/htpasswd"
#    AuthDigestProvider file

    <LimitExcept GET OPTIONS>
        require valid-user
    </LimitExcept>
</Directory>

      
cf) Apache와 IIS를 동시에 사용하기
http://www.microsoft.com/downloads/details.aspx?familyid=6EC50B78-8BE1-4E81-B3BE-4E7AC4F0912D&displaylang=en 다운로드 및 설치후

       >> httpcfg.exe set iplistem -i <IP_address>
       목록조회 >> httpcfg query iplistem
       목록에서삭제 >> fttpcfg delete iplistem -i <IP_address>
       >> net stop http
       >> net start http



2. SVN 설치
  1) subversion Apache용 Binding Binary 설치 (zip파일을 특정 폴더에 풀기)
  2) apache conf 파일에 module을 추가한다.

>> httpd.conf
사용 모듈 추가 선언
... 
LoadModule dav_svn_module "C:\apps\server\svn-win32-1.5.4\bin\mod_dav_svn.so"
LoadModule authz_svn_module "C:\apps\server\svn-win32-1.5.4\bin\mod_authz_svn.so"


SVN setting 추가 혹은 setting 파일 Include
Include conf/extra/httpd-svn.conf

>> httpd-svn.conf
SVN  Apache 사용 환경 설정

# SVN Repository
<Location /svn>
    DAV svn
    SVNParentPath "E:\00.repository\subversion"
    AuthType Basic
    AuthName "SVN Repository"
    AuthUserFile "C:\apps\server\Apache2.2\htpasswd"
    Require valid-user
</Location>


3. Trac 설치
  1) python 설치 (python-2.5.4.msi 실행)
      이후 2) ~ 6), 8) package 설치시 선택가능한 Python이 1)에서 설치한 경로와 버전이 맞는지 반듯이 확인하여야 한다.
  2) python용 binding svn 설치 (svn-python-1.5.4.win32-py2.5.exe 실행)
  3) Genshi 설치 (Genshi-0.5.1.win32-py2.5.exe 실행)
  4) python.exe ez_setup.py 을 실행하여 setuptools을 설치

C:\apps\server\Python25\python.exe ez_setup.py

Downloading http://pypi.python.org/packages/2.5/s/setuptools/setuptools-0.6c9-py2.5.egg
Processing setuptools-0.6c9-py2.5.egg
Copying setuptools-0.6c9-py2.5.egg to c:\apps\server\python25\lib\site-packages
Adding setuptools 0.6c9 to easy-install.pth file
Installing easy_install-script.py script to C:\apps\server\Python25\Scripts
Installing easy_install.exe script to C:\apps\server\Python25\Scripts
Installing easy_install-2.5-script.py script to C:\apps\server\Python25\Scripts
Installing easy_install-2.5.exe script to C:\apps\server\Python25\Scripts

Installed c:\apps\server\python25\lib\site-packages\setuptools-0.6c9-py2.5.egg
Processing dependencies for setuptools==0.6c9
Finished processing dependencies for setuptools==0.6c9

  5) mod_python 설치
    Apache용 Python 설치 (mod_python-3.3.1.win32-py2.5-Apache2.2.exe 실행)
     - 설치중 Apache의 설치 폴더를 물어봄.
  6) pysqlite 설치 (pysqlite-2.4.1.win32-py2.5.exe를 실행)
  7) Enscript 설치 (enscript-1.6.3-9-bin.exe를 실행)
  8) TRAC 설치 (Trac-0.11.2.1.win32.exe를 실행하거나 아래 명령어로 설치) 

C:\apps\server\Python25\Scripts\easy_install.exe http://svn.edgewall.com/repos/trac/trunk


[STEP III. TRAC & SVN 연동 실행]


1. sample SVN 및 Sample TRAC repository 생성
1) SVN repository 생성

C:\apps\server\svn-win32-1.5.4\bin\svnadmin create example

2) TRAC repository 생성

C:\apps\server\Python25\Scripts\trac-admin.exe [trac_repos]\example initenv

Project Name [My Project]>   Project Name입력후 엔터
Database connection string [sqlite:db/trac.db]> 그냥 엔터
Repository type [svn]>  svn 입력 후 엔터. Repository Type을 물어보는 거다.
Path to repository [/path/to/repos]>  TRAC에 연결 시키고 싶은 Repository의 Local Full path를 입력한다.
                                                       ex) c:\repos\example

3) TRAC Admin 설정

C:\apps\server\Python25\Scripts\trac-admin.exe [trac_repos]\example permission add [ADMINID] TRAC_ADMIN



2. Apacheconf 파일에 TRAC을 사용하기 위한 환경을 설정한다.

>> httpd.conf
사용 모듈 추가 선언 5)설치시 Apache서버의 Root Path를 제대로 설정하였다면 mod_python.so가 자동으로 apache module에 복사되어 있다.
... 
LoadModule python_module modules/mod_python.so

TRAC setting 추가 혹은 setting 파일 Include
Include conf/extra/httpd-trac.conf

>> httpd-trac.conf
TRAC  Apache 사용 환경 설정

#TRAC Apatch Configuration   
<Location /trac>
    SetHandler mod_python
    PythonHandler trac.web.modpython_frontend
    PythonOption TracUriRoot /trac
    PythonOption TracEnvParentDir c:/trac_repos
    PythonOption TracLocale English_KOREA
</Location>
<LocationMatch "/trac/[^/]+/login">
    AuthType Basic
    AuthName "TRAC Repository"
    AuthUserFile "C:\apps\server\Apache2.2\htpasswd"
    Require valid-user
</LocationMatch>


3. TRAC plugin 설치
각각의 Plugin은 설치후 사용하기 위해 Apache를 새롭게 시작하여야 한다.

1) WebAdminPlugin
 i) http://trac-hacks.org/wiki/IniAdminPlugin 에 접속하여 zip파일을 다운로드 한다.
 ii) 다운 받은 파일의 압축을 풀고 폴더내의 setup.py를 python명령을 이용하여 설치한다.

C:\apps\server\Python25\python.exe setup.py install

 iii) trac-hacks 저장소에서 직접 받아서 설치할 수도 있다.

C:\apps\server\Python25\Scripts\easy_install.exe http://trac-hacks.org/svn/iniadminplugin/0.11/

 iv) TRAC 에 접속하여 login하면 Admin 탭을 볼수 있다.
     General\Plugins를 클릭하여 해당 plugin을 클릭하면 Enable 체크 박스가 나온다. 체크하고 Apply changes 클릭


2)  AccountManagerPlugin
 i) http://trac-hacks.org/wiki/AccountManagerPlugin 에 접속하여 zip파일을 다운로드 한다.
 ii) 다운 받은 파일의 압축을 풀고 폴더내의 setup.py를 python명령을 이용하여 설치한다.

C:\apps\server\Python25\python.exe setup.py install

 iii) trac-hacks 저장소에서 직접 받아서 설치할 수도 있다.

C:\apps\server\Python25\Scripts\easy_install.exe http://trac-hacks.org/svn/accountmanagerplugin/trunk

 iv) TRAC 에 접속하여 login하면 Admin 탭을 볼수 있다.
     General\Plugins를 클릭하여 해당 plugin을 클릭하면 꽤 많은 체크 박스가 나온다. 상황에 따라 선택하여 사용하면 된다. 우선은 아래와 같이 체크하고 Apply changes 클릭.


Component Enabled
AccountManagerAdminPage

acct_mgr.admin
--------------------------------

AccountManager

acct_mgr.api

--------------------------------
SessionStore

acct_mgr.db

--------------------------------
AbstractPasswordFileStore

acct_mgr.htfile

--------------------------------
HtDigestStore

acct_mgr.htfile

--------------------------------
HtPasswdStore

acct_mgr.htfile

--------------------------------
HttpAuthStore

acct_mgr.http

--------------------------------
AccountChangeListener

acct_mgr.notification

--------------------------------
AccountChangeNotificationAdminPanel

acct_mgr.notification

--------------------------------
HtDigestHashMethod

acct_mgr.pwhash

--------------------------------
HtPasswdHashMethod

acct_mgr.pwhash

--------------------------------
SvnServePasswordStore

acct_mgr.svnserve

--------------------------------
AccountModule

acct_mgr.web_ui

--------------------------------
EmailVerificationModule

acct_mgr.web_ui

--------------------------------
LoginModule

acct_mgr.web_ui

--------------------------------
RegistrationModule

acct_mgr.web_ui




우선 여기까지하면 SVN+TRAC을 설치하기 위한 준비는 끝이 났다. 휴~~~~ 힘들었다. 켁켁켁...



[Extended STEP. ViewVC 설치]
참조 페이지 :  http://www.pyrasis.com/main/SubversionWithViewVCForWindows

1. ViewVC 다운로드 : http://viewvc.tigris.org 에 접속하여 viewvc를 Download 한다.
2. http://sourceforge.net/project/showfiles.php?group_id=78018 에서 Python Extensions for Windows를 다운로드 한다. 해당 python버전을 맞추어야 한다. 더블클릭하여 설치한다.
3. http://sourceforge.net/projects/gnuwin32 에서 diffutils 및sed 를 Download 및 설치한다.
4. 다운로드한 viewvc의 압축을 풀어 특정 폴더에 카피한 후 install한다.
  1)받은 viewvc-1.0.3.zip를 C:\temp에 압축을 해제합니다.
  2) python을 이용하여 install 한다.

C:\temp\viewvc\viewvc>C:\apps\server\Python25\python.exe viewvc-install

   3) Apache의 conf를 설정한다.
>> httpd.conf
사용 모듈 선언 (주석 # 제거)
...

LoadModule dav_module modules/mod_python.so

viewvc 환경 설정 파일 include (주석 처리 되어있는 부분을 해제한다.)
Include conf/extra/httpd-viewvc.conf

>> httpd-viewvc.conf

ScriptAlias /viewvc "C:/Program Files/viewvc-1.0.3/bin/mod_python/viewvc.py"
<Location /viewvc>
    AddHandler mod_python .py
    PythonPath "[r'C:\\Program Files\\viewvc-1.0.3\\bin\\mod_python']+sys.path"
    PythonHandler handler
    PythonDebug On
    AddDefaultCharset UTF-8
    Options +Includes
</Location>

  4) viewvc의 viewvc.conf를 수정한다.

[general]
# 저장소의 최상위 디렉토리를 설정합니다.
root_parents = c:\repos : svn

# default_root는 주석 처리합니다.
#default_root = cvs

# Subversion이 설치된 경로
svn_path = C:\Program Files\Subversion\bin

[options]
# URL로 저장소를 구분합니다.
# 이것을 0으로 하면 위의 default_root에서 기본 저장소를 지정해줘야 합니다.
root_as_url_component = 1

# UTC를 사용하지 않고 대한민국 표준시를 사용합니다.
use_localtime = 1

# enscript를 사용하도록 설정함
use_enscript = 1
enscript_path = c:\Program Files\GnuWin32\Bin

 5) ViewVC의 handler.py 파일의 apache.import_module 부분을 다음과 같이 수정합니다. 이것을 수정하지 않으면 mod_python에서 모듈을 찾지 못하여 ViewVC를 실행할 수 없습니다.


def handler(req):
  path, module_name = os.path.split(req.filename)
  module_name, module_ext = os.path.splitext(module_name)
  try:
    #module = apache.import_module(module_name, path=[path])
    module = apache.import_module(module_name, path)
  except ImportError:
    raise apache.SERVER_RETURN, apache.HTTP_NOT_FOUND

req.add_common_vars()
  module.index(req)

return apache.OK

 6) 한글 설정
ViewVC는 기본적으로 로그는 UTF-8로 표시해주지만 소스코드는 변환없이 그대로 출력합니다. 그래서 윈도우에서 저장한 소스파일은 cp949(euc-kr)이기 때문에 브라우저에서는 깨져서 출력됩니다. 브라우저의 인코딩을 euc-kr로 바꾸면 잘 보이지만 UTF-8로 인코딩된 로그가 깨져서 볼 수 없게 됩니다.

그래서 소스코드도 UTF-8로 변환하도록 ViewVC를 수정해 줘야 합니다. use_localtime을 1로 설정했을 경우 나오는 "대한민국 표준시"도 깨지지 않도록 UTF-8로 변환합니다.

수정 사항은 아래 1.0.3 기준의 첨부파일 참조


수정 py 파일
handler.py, viewvc.py, blame.py

'이것 저것.. > ProgramGuide' 카테고리의 다른 글

Eclipse기반 크로스플랫폼 개발 환경  (0) 2009.04.10
Trac으로 Project를 관리해 보자  (0) 2009.02.05
Portable 프로그램 만들기 - Portable MindMapper v5.0  (0) 2009.01.19
VIM 팁  (0) 2008.12.31
Doxygen 설정  (0) 2008.04.16
Posted by 알 수 없는 사용자
http://www.viper.pe.kr/cgi-bin/moin.cgi/Vim_팁

1. 참고링크

2. Vim 팁 모음

2.1. 치환 기능 사용하기

vim 사용 중 문자나 단어를 치환해야할 일이 생겼을 경우 바꿔야될 대상의 갯수가 작다면 단순히 커서를 이동해서 수정하면 된다. 하지만 갯수가 많다면 vim 의 치환 기능을 사용하여 손쉽게 수정 가능하다. vim 의 다른 기능과 마찬가지로 정규표현식으로 처리가능하다.

  • 기본 사용법
    :[범위]s/[oldpattern]/[newpattern]/       # 기본 형식
    
    :%s/\<찾을글자\>/치환될글자/gc           # 전체 영역
    :'<,'>s/찾을글자/치환될글자/gc           # 블럭 지정 영역 (VISUAL 모드)
    

    부분

    설명

    %

    현재 파일

    '<,'>

    블럭 지정 영역

    \< \>

    정확히 일치하는 글자

    g

    라인 전체

    c

    치환여부 확인

  • 사용 예)
    # 파일 전체에서 char 를 _char_ 로 치환한다.
    :%s/char/_&_/g
    
    # 현재 커서 위치부터 파일 끝까지 모든 char 를 _char_ 로 치환한다.
    :.,$s/char/_&_/g
    
    # 파일의 1~10 라인 사이에서 buf_.*[255], buf_in[255], buf_get[255] 와 같은 문자열을 hello 로 변경한다.
    :1,10s/buf_.*\[255\]/hello/g
    

2.2. 줄바꿈 문자 변환하기

텍스트 파일을 처리할 때 unix 나 dos, mac 등 각 운영체제에 따라 줄바꿈 문자가 다르다. 그래서 불편한 경우가 많은데... <:( linux 에서 vim 을 사용할 때 단순히 문자치환으로 바꿀 수 있지만 아래의 방법을 이용하면 간단히 처리가 가능하다.

  • : set ff=unix
    

그리고 저장하면 된다.

참고> unix 대신에 dos, mac 을 사용하면 해당 운영체제에 맞게 바뀐다.

2.3. 소스 코드를 html로 변환하기

vim 의 여러가지 기능 중에 눈에 띄는 기능 중 하나로 편집 중인 코드를 HTML 형태로 저장하는 기능으로 이용하면 syntax highlight 된 상태 그대로 HTML로 변환이 가능하다. 소스 코드의 예제를 만들어서 웹 상에 올리고자 할때 유용하게 사용할 수 있는 기능으로 사용법은 간단하다.

  • : so $VIMRUNTIME/syntax/2html.vim
    

시간이 조금 걸린 후 변환된 내용이 화면 출력되면 저장하면 된다.

2.4. 문서 암호화 하기

vim 에디터에서 문서 암호화가 가능하다. RedHat Linux 7.2 이상에서 제공되고 있는 vim (버젼 5.7 이상) 에서만 가능하며 사용방법은 다음과 같다.

  1. 암호화 하기
    1. set 명령
      : set key=<Password>
      
      파일을 저장한다.
    2. X 명령
      : X<Enter>
      
      Password 를 입력한(두번) 후 파일을 저장한다.

      참고> X 명령은 대문자 입니다.

  2. vim 에서 파일 읽기
    • vi 에서 파일을 열기 전에 Password 를 입력하라는 메세지가 출력될 때 Password를 입력하면 된다.
  3. 암호화 해제
    1. set 명령
      : set key=
      
      파일을 저장한다.
    2. 편집 저장 파일을 열고 간단히 편집한 후 저장하면 암호화가 해제된다.

2.5. 자동들여쓰기 해제하기

vim 으로 코딩할 때 편리한 기능 중에 하나가 자동 들여쓰기가 아닐까 라고 생각한다.

그러나 자동 들여쓰기 기능이 너무 좋아서 불편한 경우가 있다. 주로 telnet 을 이용할 때 웹이나 다른 창에서 소스를 끍어붙이면 소스가 엉망으로 삽입된다. 이유는 vim 이 들여쓰기만 자동으로 실행되고 내어쓰기는 되지않기 때문이다.

하지만 자동 들여쓰기는 vi 의 옵션중에 하나 이기 때문에 다음과 같이 필요에 따라 해제하면 된다.

  • : set noautoindent
      또는
    : set noai
    

그리고 다시 자동 들여쓰기 기능을 사용하고 싶다면 다음과 같이 설정한다.

  • : set autoindent
      또는
    : set ai
    

똑똑한 유저라면 필요에 따라 적절히 선택할 수 있을 것이라고 생각한다.

2.6. 문법에 맞게 들여쓰기 재정렬하기

vim 에서는 C/C++ 파일이나 기타 다른 언어의 파일들을 각각의 문법에 맞게 들여쓰기를 재정렬할 수 있다. 자동 들여쓰기는 코드 입력 과정에서 사용되지만 들여쓰기 재정렬 기능은 코드가 입력된 후에 일괄 처리할 수 있어서 편리하다.

  • 설명

    =

    선택된 영역을 들여쓰기 처리

    =a{

    현재 블럭을 들여쓰기 처리

    gg=G

    전체 내용을 들여쓰기 처리

2.7. 파일 삽입하기

vim 에서는 현재 편집 중인 파일에 다른 파일 내용을 삽입할 수도 있으며 명령이 실행된 결과를 삽입할 수도 있다.

  • 파일 삽입
    :r 파일명
    
  • 명령의 실행 결과 삽입
    :r! 명령어
    

2.8. 열어본 파일 이동하기

vim 을 통하여 열어본 파일 사이를 이동하는 방법이 있다. 이전에 열어봤던 파일이 히스토리에 남아있다면 역시 열어볼 수 있다. 필요성이 있을지는 모르겠지만 간단한 키조작으로 이동가능하다.

  • 설명

    <Ctrl+O>

    이전 파일로 커서를 이동

    <Ctrl+I>

    다음 파일로 커서를 이동

3. vim 의 fold 기능

3.1. fold 키

  • 설명

    설명

    zf

    폴더 생성 (접기)

    zd

    폴더 삭제 (펴기)

    zo

    폴더 펴기

    zc

    폴더 접기

    za

    폴더 접기/편기 (토글)

    zi

    폴더 기능 On/Off

    zj

    다음 폴더로 이동

    zk

    이전 폴더로 이동

3.2. fold 기능 옵션

  • fold 옵션 - 폴더 정보 저장 방식 지정 (vim 도움말 참고)
    : set foldmethod=manual
    
  • fold 정보 저장/읽기
    • 폴더 정보 저장 파일: ~/.vim/view

    명령

    설명

    :mkview

    폴더 정보 저장

    :loadview

    폴더 정보 읽기

  • fold 정보 자동 저장/읽기
    • vim 설정 추가: ~/.vimrc

    명령

    설명

    au BufWinLeave *.[ch]* mkview

    *.c* 또는 *.h* 파일을 로딩시 폴더 정보 저장

    au BufWinEnter *.[ch]* silent loadview

    *.c* 또는 *.h* 파일을 로딩시 폴더 정보 읽기

4. vim 키 정리

4.1. 커서 이동 키

  • 설명

    H

    화면의 첫 줄로 이동

    M

    화면의 중간 줄로 이동

    L

    화면의 마지막 줄로 이동

    %

    괄호 ([], {}, ()) 가 일치하는 위치로 이동

    설명

    설명

    w

    다음 단어의 첫 글자로 이동

    W

    'w' 와 동일. WORD 단위 이동

    e

    다음 단어의 마지막 글자로 이동

    E

    'e' 와 동일. WORD 단위 이동

    b

    앞 단어의 첫 글자로 이동

    B

    'b' 와 동일. WORD 단위 이동

    ge

    앞 단어의 마지막 글자로 이동

    gE

    'ge' 와 동일. WORD 단위 이동

    참고> WORD 단위: 공백있는 위치까지 하나의 단어로 인식

4.2. 스크롤 키

  • 설명

    설명

    <Ctrl+B>

    한 화면씩 위로 스크롤

    z<CR>

    커서가 위한 줄을 화면 처음으로 이동

    <Ctrl+F>

    한 화면씩 아래로 스크롤

    zt

    'z<CR>' 과 동일, 현재 컬럼 유지

    <Ctrl+U>

    화면의 절반씩 위로 스크롤

    z.

    커서가 위한 줄을 화면 중앙으로 이동

    <Ctrl+D>

    화면의 절반씩 아래로 스크롤

    zz

    'z.' 과 동일, 현재 컬럼 유지

    <Ctrl+Y>

    현재 커서 위치를 유지하면서 위로 스크롤

    z-

    커서가 위한 줄을 화면 아래으로 이동

    <Ctrl+E>

    현재 커서 위치를 유지하면서 아래로 스크롤

    zb

    'z-' 과 동일, 현재 컬럼 유지

4.3. 블럭 지정 (VISUAL 모드) 키

  • 설명

    v

    문자 단위로 블럭 지정

    V

    줄 단위로 블럭 지정

    <Ctrl+V>

    세로 단위 블럭 지정

4.4. tags 기능

모든 tags 명령에서 근접단어를 입력한 후

  • 설명

    <Ctrl+D>

    근접단어로 시작하는 tag 목록 출력

4.5. 특수 키

숫자 위에 커서를 이동 시킨 후

  • 설명

    <Ctrl+A>

    숫자 증가

    <Ctrl+X>

    숫자 감소

4.6. Function 키 정의

vim 에서는 <F1> ~ <F12> 키에 기능을 정의할 수 있다. 홈디렉토리의 .vimrc 파일에 아래의 내용을 추가한 후 vim 을 실행시키면 된다. 단, CRT ( http://www.vandyke.com ) 와 같이 Function 키 입력이 가능한 터미널 프로그램에서만 가능하다.

  • " vim 의 편집 기능키 정의 "
    "-------------------------"
    
    map <F1>  K                     " 도움말
    map <F2>  :w!<CR>               " 파일 저장
    
    map <F3>  [{v]}zf               " 함수 축소
    map <F4>  zo                    " 축소 해제
    
    map <F5>  ^]                    " tags 추적
    map <F6>  ^T                    " tags 복귀
    map <F7>  :tnext<CR>            " 다음 tags 검색
    
    map <F8>  [i                    " 함수 원형 보기
    map <F9>  gd                    " 지역 변수 보기
    map <F10> ''                    " 원래 위치로 복귀
    
    map <F11> :n<CR>                " 다음 파일로 전환
    map <F12> :N<CR>                " 이전 파일로 전환
    

5. vim 의 프로그래밍 지원 기능

5.1. 자동 완성 기능

입력 모드에서 함수 또는 변수명 입력 시 자동완성 기능을 사용할 수 있다.

  • 설명

    ^P

    일치하는 이전 단어 를 검색

    ^N

    일치하는 다음 단어 를 검색

5.2. 검색 기능

소스 코드 중 함수 또는 변수명, 헤더 파일명 위에 커서를 옮겨놓고 아래의 키를 누르면 해당 기능이 동작한다.

  • 설명

    gd

    지역 변수 찾기

    gD

    전역 변수 찾기

    ' '

    원래 위치로 복귀

    <Ctrl+wi>

    함수가 선언된 위치로 이동

    <Ctrl+wf>

    헤더 파일을 연다.

    K

    함수의 도움말 (man page) 보기

5.3. 이동 기능

소스 코드 중 함수 또는 변수명, 매크로 위에 커서를 옮겨놓고 아래의 키를 누르면 해당 기능이 동작한다.

  • 식별자 (함수 또는 변수) 에 대한 기능

    설명

    설명

    [I

    해당 식별자가 있는 라인 목록 보기

    ]I

    커서 이후 해당 식별자가 있는 라인 목록 보기

    [i

    [I 목록 중 첫번째 보기

    ]i

    ]I 목록 중 첫번째 보기

    [<Tab> 또는
    [<Ctrl+I>

    [I 목록 중 첫번째 위치로 이동

    ]<Tab> 또는
    ]<Ctrl+I>

    ]I 목록 중 첫번째 위치로 이동

  • #define 으로 정의된 매크로 또는 상수에 대한 기능

    설명

    설명

    [D

    해당 식별자가 있는 라인 목록 보기

    ]D

    커서 이후 해당 식별자가 있는 라인 목록 보기

    [d

    [D 목록 중 첫번째 보기

    ]d

    ]D 목록 중 첫번째 보기

Posted by 알 수 없는 사용자
사용 준비
1. Cygwin 설치시 Doxygen을 Enable하여 함께 설치한다.
2. Cygwin의 Bin 폴더의 Path를 설정하면 어디서든 실행이 가능하다.
3. Graphviz를 설치한다. (Graphic View지원) : http://www.graphviz.org/Download..php

환경파일 생성
1. doxygen -g doxyfile

doxyfile을 Edit를 이용하여 편집한다.
Option은 다음을 참조한다.

PROJECT_NAME: 프로젝트의 이름이다. 한단어이상일 경우 " " 으로 묶는다.
OUTPUT_DIRECTORY: 경로 설정이다. 절대, 상대 경로 모두 가능하다.
OUTPUT_LANGUAGE: 언어설정 (English / Korean)
EXTRACT_ALL: 비어있는 문서도 doc으로 만들지 여부 (YES / NO)
EXTRACT_PRIVATE: private 멤버도 doc으로 만들지 여부 (YES / NO)
EXTRACT_STATIC: static 멤버도 doc으로 만들지 여부 (YES / NO)
INLINE_SOURCES: inline 소스에 대한 브라우징을 지원할 여부 (YES / NO)
STRIP_CODE_COMMENTS: source 코드에 doxy문법의 주석이 아닌 주석을 제거 할지 여부 (YES / NO)
GENERATE_LATEX: LATEX생성여부 (YES / NO)
GENERATE_TREEVIEW: HTML생성시에 treeview를 지원할지의 여부 (YES / NO)
TREEVIEW_WIDTH: HTML생성시에 treeview를 만들었다면 그 넓이 (pixel)
FILE_PATTERNS: 지원하는 확장자를 셋팅한다 빈칸으로 구분한다. (*.c *.cpp *.h)
EXTRA_PACKAGES:tex파일에 \usepackage{hangul}을 추가하여 한글 폰트 사용이 가능하게 한다. (hangul)
INPUT: 추가되는 경로를 설정한다. "filename.cpp" "/usr/src/myproject"식으로 스페이스를 구분자로 사용하면된다.
RECURSIVE: 하위디렉토리까지 모두 패턴에 맞는 파일을 찾을지 여부

<Graphviz 지원 관련 Configuration>
SOURCE_BROWSER: 소스파일에 대한 브라우징을 지원할 여부 (YES / NO)
REFERENCED_BY_RELATION: (YES / NO)
REFERENCED_RELATION: (YES / NO)
HAVE_DOT: graphviz툴의 한 graph생성여부 (YES / NO)
CALL_GRAPH: 함수의 호출 관계 표시(YES / NO)


Doxygen Document 생성
1. doxygen [doxyfile path]/doxyfile



Posted by 알 수 없는 사용자
이전버튼 1 이전버튼