Sublime Text2에서 Play framework 2.0 Syntax Highlight

사전 준비

Syntax Definitions 문서를 참조하여 AAAPackageDev를 사전 준비한다.

Syntax Definition 작성

메뉴에서 Tools > Packages > Package Development > New Syntax Definition를 선택하고 에티터 다음 소스를 복사한다.

{ "name": "Play Routes",
  "scopeName": "source.routes", 
  "fileTypes": ["routes"], 
  "patterns": [
      {  "name": "comment.routes",
         "match": "#.*"
      },
      {  "name": "method.routes",
         "begin": "^",
         "patterns": [
            {  "name": "keyword.routes",
               "match": "GET"
            },
            {  "name": "constant.language.routes",
               "match": "."
            }
         ],
         "end": "\\s"
      },
      { "name": "path.routes",
        "begin": "\\s/",
        "beginCaptures": {
            "0": {"name": "string.quoted.double.routes"}
        },
        "patterns": [
            {  "name": "constant.numeric.routes",
               "match": ":[a-zA-Z0-9]+"
            },
            {  "name": "string.quoted.double.routes",
               "match": "."
            }
        ],
        "end": "\\s"
      },
      { "name": "action.routes",
        "begin": "\\s[a-z]",
        "beginCaptures": {
            "0": {"name": "string.quoted.double.routes"}
        },
        "patterns": [
            {  "name": "constant.numeric.routes",
               "match": "[a-zA-Z0-9]+:"
            },
            {  "name": "support.type.routes",
               "match": "\\s[A-Z][a-zA-Z0-9]+"
            },
            {  "name": "param.routes",
               "match": "[\\(\\)]"
            },
            {  "name": "string.quoted.double.routes",
               "match": "."
            }
        ],
        "end": "$"
      }
  ],
  "uuid": "60027e77-890d-4e0c-8da3-3b11f2fbcef2"
}

주섬주섬 처음 만들어 보는 Sublime 확장이라 어수선하다.

  • Method 부분을 GET인 경우와 그 외로 구분하여 색상을 강조하였다.
  • 파라미터 부분을 쉽게 눈에 띄도록 강조하였다.

uuid는 자동생성된 것을 사용한다.

빌드 / 적용

작성된 파일을 pakages\User 디렉토리에 Play Routes.JSON-tmLanguage로 저장한다. 확장 .JSON-tmLanguage는 AAAPackageDev의 관례이므로 꼭 따라야한다.

메뉴 Tools > Build System > JSON to tmLanguage를 선택하고 빌드한다. 빌드 성공이라면 Package\User 디렉토리에 확장자가 .tmLanguage인 PList 형식의 xml 파일이 생성된다. Sublime Text2를 재시작하고 routes 파일을 열어본다. 또는 메뉴 View > Syntax > Play Routes가 추가 된 것을 확인한다.


iTerm2 + tmux + vim == Awesome IDE

코딩툴/에디터로 MacVim을 애용하왔는데 Vim and tmux on OSX를 보고 iTerm2에서 Play! 콘솔을 실행하고 MacVim에서 코딩하던 화면을 최적화할 수 있겠다 싶어 전환한다. Vim and tmux on OSX에서 발췌한 할 일은 다음과 같다.

  • 새로운 vim 설치
  • tmux 설치
  • .tmux.conf 설정

새로운 vim 설치

brew install https://raw.github.com/Homebrew/homebrew-dupes/master/vim.rb

Homebrew 공식 저장소에는 vim이 없다. 다른 저장소를 이용하여 vim을 설치할 수 있다. ‘Vim and tmux on OSX’과는 url이 다르다. 이유는 dupes 저장소가 별도로 분리되었기 때문이다.

vim 설치 후 paste(p)할 때 발생하는 register문제를 수정하기 위해 https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard 를 방문하여 설명대로 해법을 적용시켜준다.

Mac OSX에는 이미 vim이 설치되어있다. 이 것 대신 새로이 설치한 vim을 사용하려면

cd /usr/bin
sudo rename vim _vim
sudo ln -s /usr/local/bin/vim vim

tmux 설치

brew install tmux

.tmux.conf 설정

# C-b인 prefix 키를 C-f로 변경한다. 개인적인 취향.
set-option -g prefix C-f
# o 키가 pane(패널)간 전환인데 자꾸 Ctrl키가 함께 눌려진다.
# 그래서 pane 위치를 변경하는 C-o를 꺼버린다.
unbind C-o
# prefix 키를 두번 눌러, 빠르게 pane간 전환
bind-key C-f last-pane

# reload tmux.conf
bind r source-file ~/.tmux.conf

set -g default-terminal "screen-256color"
set -g mode-mouse on

# 기본 키 바인딩을 쉽게 인식되는 키로 변경
unbind %
bind | split-window -h
bind - split-window -v

# 인식성을 높이기 위해
# 현재 윈도우명을 흰색으로 강조
set-window-option -g window-status-current-fg white

# vim 사용시 필요.
# 시스템 클립보드와 연동시킬 때 문제 수정해줌.
set-option -g default-command "reattach-to-user-namespace -l zsh"

tmux 사용법

Terminal vim을 위한 vimrc 변경

" Map to switch tabs
map  <leader>1 :tabn 1<CR>
imap <leader>1 <Esc> :tabn 1<CR>
map  <leader>2 :tabn 2<CR>
imap <leader>2 <Esc> :tabn 2<CR>
map  <leader>3 :tabn 3<CR>
imap <leader>3 <Esc> :tabn 3<CR>
map  <leader>4 :tabn 4<CR>
imap <leader>4 <Esc> :tabn 4<CR>
map  <leader>5 :tabn 5<CR>
imap <leader>5 <Esc> :tabn 5<CR>
map  <leader>6 :tabn 6<CR>
imap <leader>6 <Esc> :tabn 6<CR>
map  <leader>7 :tabn 7<CR>
imap <leader>7 <Esc> :tabn 7<CR>
map  <leader>8 :tabn 8<CR>
imap <leader>8 <Esc> :tabn 8<CR>

MacVim에서는 Command-숫자 조합으로 탭을 선택하도록 사용해왔다. Command-숫자는 iTerm2에서 사용하므로 조합으로 변경한다.

" 모드에 따라 cursorline 보이고 안보이고
set nocursorline
if version >= 700
    au InsertEnter * set cursorline
    au InsertLeave * set nocursorline
endif

MacVim을 사용하다 원래의 vim으로 전환하면서 가장 불편한 점이 모드에 따라 커서가 변하지 않는 점이다. MacVim에서 커서는 insert mode일 때는 실선, 기타 모드에서는 사각형 모양으로 변한다.

아쉬운데로 cursorline을 이용하여 시각적인 변화를 주어 보완한다.


Play framework 2.0 소스 빌드 절차

1:$ git clone git://github.com/playframework/Play20.git
2:$ cd Play20/framework
3:$ clean
4:$ build
5:> publish-local

4: SBT 실행
5: compile, package, publish in local repository