Git을 Windows에 깔아서 쓰다 보니 Git Bash 라는 놈이 있었다. 그런데 생긴게 꼭 진짜 Unix 계열에서 쓰는 Bash와 비슷한거다.
이게 무얼까 생각해보다가 잊어먹고 있었는데, 어느날 Windows에서 간단히 컴파일 할 수 있는 환경을 만들고 싶었다. 생각해보니 GNU 컴파일러가 윈도우에서 돌아가는 놈이 있을 것 같았다. (걔네들이 그런걸 만들지 않을리가 없다.)
그래서 찾은게 MINGW다. Minimalist GNU for Windows의 약자란다. gcc, make 등 GNU 개발 툴들을 윈도우 용으로 제공하고, Unix Like한 개발 환경을 제공한다. 그게 msys다. 그리고 이건 다시 돌아서, Git Bash와 거의 비슷하게 생긴 놈이다. 아니, Git Bash는 사실 msys를 가지고 만든거다.
GIt Bash 상에서 sh --version을 입력한 상태다. 이놈은 사실 GNU Bash이며, i686-pc-msys 환경에서 동작하도록 되어 있다.
다시 돌아가, MINGW를 설치하고 msys를 설치하면 Unix Like한 개발 환경을 가지게 된다. 일반적으로 C:\MinGW에 설치되는데, 그 아래 msys\(Version)\ 폴더에 들어가 보면 일반 Unix의 최상위 루트 디렉토리와 유사한 bin, etc, lib 등등의 폴더들을 볼 수 있다. msys가 구동되어 shell이 실행되면 이 폴더는 msys의 최상위 루트 디렉토리로 마운트 된다.
윈도우의 c, d 드라이브 등은 /c, /d 등으로 마운트 된다. 이 마운트 정보는 /etc/fstab에 저장되니 원하면 편집해서 써도 된다. msys에서 mount 등의 명령어는 Unix와 유사하게 구현되어 있으니 직접 마운트 해도 상관없다. (mount -a 등의 명령어도 잘 먹는다.)
Git Bash역시 Git이 설치된 디렉토리 (일반적으로 C:\Program Files (x86)\Git) 아래 들어가 보면 Unix의 최상위 루트 디렉토리와 유사한 놈들을 볼 수 있다. 물론 msys와 마찬가지로 이것이 Git Bash의 최상위 루트 디렉토리로 마운트 된다. 하지만 Git Bash는 단순히 Git 기능을 서포트 하기 위해 msys 기능 일부를 제공하는 것이기 때문에, 원하는 대로 mount 등의 기능을 사용할 수 없다. 제공하는 최소한의 기능들만 사용하게 된다.
또, Windows Vista 이상의 OS에서 Git Bash를 통해 Git Bash의 루트 아래 내용들을 건드리게 되면 윈도우 보안상의 이유로 (사용자 루트 디렉토리)\AppData\Local\VirtualStore\Program Files (x86)\Git 아래에 내용들이 갱신되게 된다. 여러모로 귀찮다.
MINGW를 설치하고 Git의 설치 내용 중 bin\git.exe만 msys의 /bin에 넣으면 msys에서 git을 쓰는데 이상 없다고 한다. 또, msys 2.0에서는 git을 기본 제공한다는 말도 있다. 둘다 안해봤으니 일단 패스. 만일 MINGW가 메인이라면 해보겠지만 개발 내용에서는 Git이 메인이기 때문에 Git Bash에 다음 수정을 하는 것을 목표로 한다.
1) gcc와 g++이 동작할 수 있도록 한다. 또, Git Bash에서 이 컴파일러로 컴파일된 놈이 동작해야 한다.
이런 UI를 보게 된다. 그러면 컴파일러를 위해서 (배보다 배꼽이 더 크긴 하지만) mingw32-base와 mingw32-gcc-g++을 선택하여 설치한다.
이러고 나면 일단 원하는 MINGW는 설치된거다. 이것을 Git Bash와 연결해보자.
Git이 설치된 디렉토리 아래 etc\profile 파일을 열어보면 중간쯤에 이런게 있다. (현재 사용하고 있는 버전 기준 18라인 부터다)
if [ $MSYSTEM == MINGW32 ]; then export PATH=".:/usr/local/bin:/mingw/bin:/bin:$PATH" else export PATH=".:/usr/local/bin:/bin:/mingw/bin:$PATH" fi
결국 MINGW가 설치된 디렉토리가 Git Bash 상에서 /mingw 디렉토리에 마운트 된다면 아무런 변경 없이 MINGW를
Git Bash에서 사용할 수 있게 되어 있다. 하지만 Git Bash에서 mount 명령은 동작하지 않는다. (여기까지 설치했으면 MinGW\msys\(Version)\bin 아래에 mount할 수 있는 도구들이 있을 거다. 이것을 가져와서 깔면 될 것 같긴 하지만 일단 이것은 패스)
이것을 다음과 같이 바꿔준다.
if [ $MSYSTEM == MINGW32 ]; then export PATH=".:/usr/local/bin:/c/mingw/bin:/bin:$PATH" else export PATH=".:/usr/local/bin:/bin:/c/mingw/bin:$PATH" fi
MINGW가 설치된 디렉토리를 가리키도록 바꿔주면 된다.
Git Bash에서 gcc가 성공적으로 실행되었다.
물론 컴파일, 그리고 실행도 문제 없이 동작한다.
이제 vim이 Git Bash에서 동작하기만 하면 된다.
그리고 재미있게도, Git Bash는 vim을 기본 탑재해서 제공한다. Git Bash 상에서 제공하는 기본 텍스트 에디터가 vim이다. 그러면 colorscheme만 제대로 동작하게 해 주면 문제가 없겠다.
(GIT 설치 디렉토리)\share\vim 아래 보면 vimrc 파일이 있다. 기본 세팅되기를 원하는 옵션은 여기 넣어주면 되겠다. (일반적으로 set ts=4 같은 것들. 물론 colorscheme 구문도 여기 넣어줘야지.)
" Setting some decent VIM settings for programming
set ai " set auto-indenting on for programming set showmatch " automatically show matching brackets. works like it does in bbedit. set vb " turn on the "visual bell" - which is much quieter than the "audio blink" set ruler " show the cursor position all the time set laststatus=2 " make the last line where the status is two lines deep so you can see status always set backspace=indent,eol,start " make that backspace key work the way it should set nocompatible " vi compatible is LAME set background=dark " Use colours that work well on a dark background (Console is usually black) set showmode " show the current mode syntax on " turn syntax highlighting on by default set ts=4 set sw=4 colorscheme desert
... (이하 생략)
그런데 이것을 넣어도 colorscheme는 동작 하지 않는다. (GIT 설치 디렉토리)\share\vim\colors 아래 디렉토리가 비어 있기 때문이다.