Tuesday, July 12, 2011

sublime text 2 - 자동완성에 대해

자동완성 정의 파일은 *.sublime-completions 의 파일이름의 형식을 취하고 있습니다.

참고문서
(1) sublime document - Completions
(2) sublime document - Tab Completion

현재 sublime text 배포판 베타 2076에는 자동완성 파일은 두개만 배포하고 있습니다.
의도적인 것인지는 모르겠습니다만, 일반적으로 함께 배포되는 자동완성파일로는 적은 듯합니다. (어쩌면 베타가 아닌 정식 릴리스에서는 추가되어 배포될 지도 모르겠습니다.)

Packages\HTML\HTML.sublime-completions
Packages\PHP\PHP.sublime-completions

이 두 파일을 참조하여 .sublime-completions을 제작해 추가해 둠으로써 자동완성기능을 추가할 수 있습니다.

파일의 내용중, 알쏭달쏭한 내용만 약간 살펴보면,

"scope": "source.php - variable.other.php",

scope는 보통 'source.<언어이름>' 과 'text.<언어이름>' 의 구성으로 되어 있습니다.
프로그래밍언어는 source.xxxx이고, 마크업파일이나 기타는 text.xxxx를 사용하라고 하는 군요.
html은 text.html 이고, php는 source.php이네요.
# scope에 대한 sublime text의 설명은 이쪽에 있습니다.

이 scope는 정확히는 textmate의 아이디어에서 왔습니다. 문장의 내용중 선택하기 쉽도록 pre-defined된 rule입니다.
파일은 Packages\PHP\PHP.tmLanguage 와 같은 .tmLanguage 확장자를 쓰는 파일에 있습니다.
예를 들면 source.php 라는 scope는 PHP.tmLanguage파일의 제일 마지막부분에 있습니다.

scopeName
source.php

#파일의 내용을 보면 variable.other.php 라는 이름의 scope는 몇개의 matching으로 나누어져 구성되어 있습니다.
#textmate의 scope selectors에 대한 문서는 이쪽입니다.
#textmate의 language_grammars페이지
#아예 textmate의 매뉴얼 페이지


{ "trigger": "addcslashes", "contents": "addcslashes(${1:str}, ${2:charlist})" },

과 같은 내용은 탭을 눌렀을 경우 이동하는 번호와 디폴트값 입니다. $0은 커서의 위치를 나타내므로 여기에선 사용하지 않습니다.

PHP.tmLanguage의 화면. Ctrl-Space를 눌러 complete suggestion을 작동시킨 화면


Scope Rule을 쉽게 알 수 있는 방법이 없을까 하고 구글해보면, 이 Textmate의 Scope Rule은 꽤 다른 곳에서도 빌려 쓰고 있어서, 쉽게 정의된 페이지를 검색해 볼 수 있습니다.
예를 들면 Titanium Stuidio의 Scope정의 페이지와 같은.

하지만 scope를 잘 모르겠다면, source.go 와 같이 간단히 적어도 됩니다.

#참고문서(2)에도 나와 있는 내용입니다만, 단어 타이핑중에 자동완성이 아닌 탭을 입력하고 싶다면 shift+tab 을 사용합니다.
#또 자동완성을 끄고 싶다면 메뉴 Preferences / User File Preferences 에서 다음을 추가해 둡니다.
"tab_completion": false

No comments:

Post a Comment