2013년 3월 15일 금요일

중요한 설정들 몇 가지 더


짜증나는 벨소리 없애기



비록 간단한 작업이긴 하지만 MSYS+Console+Vim 환경에서 벨소리를 없애려면 두 군데나 손을 봐야 한다.

 
[여담] 무슨 이유로  Vim이나 shell terminal에 bell을 넣었는가 도무지 이해가 안간다. 어떠한 경우에도 typing 오류와 관련한 bell은 불필요할 듯 싶은데 말이다. 음악들으면서 coding 하기 좋아하는 필자 같은 사람들에게는 bell 소리가 정말 짜증난다. 


Shell prompt 오류 bell 죽이기


우선 MSYS 에서 마주치는 첫 bell 소리는 shell prompt 사용 중에 발생한다. 잘못된 입력이 발생하면 "띵"  하는 소리가 난다. 예를 들어, 더 지울 것이 없는데도 'backspace' 키를 계속 누르고 있으면 bell 이 발생하는 것이 bell 경고의 대표적인 예라고 할 수 있다. 이 bell 경고를 없애려면 Console 을 열고 shell 에서 Vi 로 home directory 에 있는 .inputrc 를 열어 다음 부분을 수정한다. 만일 bell 대신 visible 경고로 바꾸고 싶은 사람은 아래의 none 대신 visible 을 기입하면 된다. 그러나 그런 사람은 없을 것이다. 화면 깜박거림은 옛날 unix TTY terminal (검정 화면에 녹색글씨 - 영화 매트릭스에 비슷한 모니터가 나옴)에서 라면 모를까 windows 환경에서는 한마디로 'shit'  이다. 싸이코가 아니라면, 그냥 none 으로 설정해 놓는 것이 나을 것이다.

# none, visible or audible
set bell-style none


Vim의 오류 bell 죽이기


Shell에서 bell 소리가 없어졌다고 하더라도, Vim 에서 편집 중에 잘못된 key 입력이 있는 경우 bell 을 발생시킨다. 아무리 Vim 에 숙련된 사람이더라도 본인이 로보캅이나 R2D2 가 아니라면 가끔씩 bell 소리를 듣게 되는 것은 Vim editing 방식 상 피할 수 없는 것이 아닐까 싶다. 특히, Vim 에서 영어 이외에 다른 언어를 사용하는 사람이라면 더더욱 그러한 경우가 많을 것이다. .virmrc에 다음을 추가 함으로써 Vim  bell 은 죽는다. (아래에서 맨 마지막 = 다음에는 아무 글자도 없다.)

set vb t_vb=

Vim Ctrl-w, Windows hotkey와 충돌?


만일 Windows 용 gVim을 써본 사람이라면 Windows와 Vim 단축키 간의 충돌이 어떤 것인지 잘 이해 할 것이다.  예를 들어 Vim 에서 visual mode로 들어가려면 Ctrl-v를 type 해야 할 것인데, 이는 윈도우즈의 등록된 'paste' 명령 단축키 이기도 하다. 단축키의 충돌을 피하기 위하여 gvim 에서는 shift-v가 visual mode 단축키로 재설정되어 있다. 

Console 2 에서도 Vim command mode 에서 window mode로 들어가기 위하여 Cttl-w 을 누르면 황당하게도 Console 이 닫혀 버리는 현상이 발생한다. 필자는 처음에 이 키 조합이 Windows 의 application close 단축키인 Ctrl-w 와 충돌이 나는 것으로 오해를 하여 Window hotkey mapper 들도 종류별로 다운받아 시도해보고 별 짓을 다 해 봤지만 해결이 안되었었다. 나중에 알고보니 Console 의 조합키 setting을 바꾸어 주기면 하면 되는 거였다. Console-2의 GUI 메뉴에서 Edit > Setting 을 선택한 후 창에서 왼편 tree 의 Hotkey 를 클릭하면  다음과 같은 설정 화면이 나온다.


이 hotkey  설정 메뉴에서 Close Tab 이 Ctrl-w 로 되어 있는 것을 none 으로 변경하기만 하면  Console 에서 Vim editing 중에 Ctrl-w를 눌렀을 때 Console 프로그램이 완전히 종료해 버리는 현상이 사라진다. 이 부분을 해결하고 나니 어쩐지 MSYS의 Vim이 Windows 용 gVim 보다 멋져 보인다. MSYS 의 vim 에서는 Ctrl-v 도 아무 문제 없지 작동하니 한결 맑고 상쾌한 느낌이다. 


Vim의 튜닝


Vim 을 좋아하는 사람들은 Vim 의 다양한 강력한 기능에 반하기도 하지만, 사용자에게 주는 '자유도'에 매력을 느낀다.  '자유도'라고 함은 사용에 있어서 다양한 방법이 존재한다는 의미일 것이다. 따라서, Vim을 customize 하는 방법은 수도 없이 많고, 고수가 되는 길은 멀고 험하다. 필자가 감히 그 부분을 다 나열하려고 했다간 책을 한권 쓰게 될 것이다.

Vim 설정에 있어서 기억하면 도움이 될 만한 것들만 간략하게 나열해 볼까 한다.


Key mapping


Vim key mapping 기능을 설명하기 위하여, Vim 의 Window 모드에서 Window 간 이동을 하는 명령을 예를 들까 한다. 필자는 현재 윈도우에서 우측 윈도우로 이동, 좌측윈도우로 이동, 윗쪽 윈도우로 이동, 아랫쪽 윈도우로 이동하는 명령 키조합과 새로이 mapping 할 키조합의 설정을 아래와 같이 정하여 사용하고 있다.
 
동작
원래의 Vim 단축키
변경된 Vim 단축키
좌측 윈도우로 이동Ctrl-w,hCtrl-h
우측 윈도우로 이동Ctrl-w,lCtrl-l
상측 윈도우로 이동Ctrl-w,kCtrl-k
하측 윈도우로 이동Ctrl-w,jCtrl-j

사실 매번 Vim 윈도우간 이동시 Ctrl-w 를 누르고 방향 key 를 또다시 누르는 것은 상당히 번거롭기 때문에 적지 않은 사람들이 위의 table 의 변경 방식을 애용하고 있다. 위의 table 과 같은 Vim 단축키 변경을 반영하기 위해서는 .vimrc 에 다음과 같은 line을 추가하면 된다.

map <C-h> <C-w>h
map <C-l> <C-w>l
map <C-k> <C-w>k
map <C-j> <C-w>j


이제 vim 으로 아무 file 이나 열어 놓은 다음에 :sp 혹은 :vs 명령을 사용하여 두 개의 window를 만들어 보자. 그런 다음 Ctrl-h, j, k, l 적용에 보면 편집 control 이 좌/우/상/하로 이동하는 것을 볼 수 있을 것이다. 매번 Ctrl-w를 치지 않고 Ctrl을 누른 상태에서 h, j, k, l 방향키(설마 vim을 쓰면서 화살표 키를 방향키로 쓰는 사람은 없겠죠? - 물론 이 경우도 mapping 이 가능함)로 간편하게 이동이 가능하니 얼마나 편리한가? 

Vim 의 key mapping 에 관한한 상당히 많은 응용예를 인터넷에서 찾아볼 수 있다. key mapping 에 대하여 보다 많은 정보를 얻고 싶다면 www.vim.org 에 있는 map, nmap, imap 관련 문서를 확인하기 바란다. 또한 Vim command mode 상태에서 :map 을 type 하면 mapping list 가 화면에 뜨므로 직접 key mapping 상황을 확인해 볼 수 있다.

[여담] Key mapping 시에 가장 어려운 부분은 안쓰는 키조합을 찾아내는 것이다. 어떠한 경우에도 안쓰는 조합키들이 있는데 그 것들이 과연 무엇일까? 그것이 문제로다. ㅎ


Syntax  highlight와 indent 설정


Coding 에서 가독성이 중요하다는 말은 정말 귀가 닳도록 듣는 이야기 일 것이다. 가독성을 결정하는 요소 중에서 가장 중요한 것은 본인의 coding style 일 것이고, 그 다음으로 중요한 것은 comment 일 것이다. 그 다음으로 중요한 것들이 바로 syntax highlight 와 indent 일 것이다.

syntax highlight 라는 것은 해당 language 의 keyword 를 색깔과 bold 등으로 구분지어 표시하도록 하는 기능인데, 대부분의 coding 용 highlight는 MSYS basic 설치에 이미 포함이 되어 있다. MSYS 에서 단순히 Tcl/Tk 나 c 를 coding 할 경우 syntax highlight 와 indent 가 필요하다고 생각되면 .vrimrc 에 다음과 같은 내용을 추가 하기만 하면 된다.

syntax on
filetype indent on

만일 /text_to_seach 를 사용하여 search 및 trace 를 할 때 highlight 를 끄거나 켜는 것을 특정 key 에 지정하고 싶다면, 다음과 같이 .vimrc 내에 funciton 을 사용하여 key mapping 을 구현할 수도 있다.

function ToggleHLS()
     if &hls
          set nohls
     else
          set hls
endfunction

map <silent><C-n> :silent call ToggleHLS()<CR>

이렇게 해 놓으면 /text-to-search 후에 :set hls 혹은 :set nohls 를 할 필요 없이 Ctrl-n 만으로 간단히 search text highlight 를 toggle 할 수 있다.

Tab의 설정


Tab 사용을 하는 것이 좋을까? 아니면 안하는 것이 좋을까? 답은 'Tab 사용은 안하는 것이 좋다'  이다. 왜냐하면, 여러 사람이 coding 을 할 경우에 저마다 tab 설정이 다를 수 있고, 설사 같이 일하는 사람들 끼리 tab 설정을 맞추었다고 하여도, 고객이나 다른 업체의 사람들이 coding text 들을 가져다가 열람할 경우 tab 설정이 다름으로 해서 가독성이 엉망이 되는 경우가 많기 때문이다. 그럼 tab을 사용 않고 오로지 space 키에만 의존해서 indent 를 만들어 줘야 할까? 답은 '그런 수고까지 할 필요는 없다' 이다. Vim 은 file 저장을 할 때 tab을 space 로 바꾸어 주는 기능을 제공하고 있기 때문에 사용자는 vim 의 auto indent 기능을 만끽하고 tab을 마구 남용하면서도 tab 설정으로 인한 호환성 문제를 깨끗하게 해결 할 수 있다. .vimrc 에 다음과 같이 기입하면 tab 이 space 로 바뀐다. 여기서 숫자는 원하는 tab 의 size 이다. 

set et
set ts=3
set sw=3

이제 이 후로는 vi 편집시 tab을 사용해도 나중에 저장할 때 모든 tab 이 space 로 바뀌는 것을 확인 할 수 있을 것이다.

댓글 없음:

댓글 쓰기