2013-05-18 1 views

답변

1

BracketHighlighter 플러그인은 기본적으로 ... 종류의이 기능을 제공 할 수 있습니다. 그 예를 들어 바로 가기 파일, Example.sublime-keymap에서 바인딩 "오른쪽 브래킷으로 이동"예를 들어 키가 :

// Go to right bracket 
{ 
    "keys": ["ctrl+alt+super+down"], 
    "command": "bh_key", 
    "args": 
    { 
     "lines" : true, 
     "plugin": 
     { 
      "type": ["__all__"], 
      "command": "bh_modules.bracketselect", 
      "args": {"select": "right"} 
     } 
    } 
}, 

유일한 문제는 호출 bracketselect 명령은 오른쪽 대괄호의 왼쪽로 커서를 이동한다는 것입니다 블록에서 완전히 탈출하기 위해 또 다른 키 누름이 필요합니다. 나는 그것이 당신이 원하는 것이라고 생각하지 않습니다.

걱정하지 마세요! 고맙게도 BracketHighlighter는 매우 직관적 인 플러그인 API를 제공하며, bracketselect 플러그인을 수정하여 대괄호로 묶은 블록 (기본적으로 bracketselect과 동일)에서 탈출 할 수있는 명령을 만들 수 있지만 커서를 오른쪽으로 이동했습니다.은 왼쪽이 아닌 닫는 괄호이며 추가 인수가 필요하지 않습니다.

아직 설치하지 않은 경우 먼저 BracketHighlighter을 설치해야합니다.

{ 
    "keys": ["tab"], 
    "command": "bh_key", 
    "args": 
    { 
     "lines" : true, 
     "plugin": 
     { 
      "type": ["__all__"], 
      "command": "bh_modules.blockescape" 
     } 
    } 
}, 

I :

다음, blockescape.py을 저장 사용자 키 바인딩의 상단 (Preferences -> Key Bindings — User)에이 항목을 추가, 그리고

Preferences -> Browse Packages... -> BracketHighlighter/bh_modules/blockescape.py 

에 (링크 이제까지 죽으면 아래 참조) tab을 확장 키와 함께 사용하는 것이 중요하기 때문에 tab을 트리거 키로 사용하지 않는 것이 좋습니다. 물론 tab을 사용하는 특별 context을 정의 할 수 있지만 그 것은 귀하에게 달려 있습니다. 경우

는 Github에서 여기에 플러그인 코드입니다, 지금 다운 : 내가 더 많거나 적은 플러그인 함께 해킹 때문에

import bh_plugin 
import sublime 

DEFAULT_TAGS = ["cfml", "html", "angle"] 


class BlockEscape(bh_plugin.BracketPluginCommand): 
    def run(self, edit, name, tags=DEFAULT_TAGS): 
     current_left, current_right = self.selection[0].begin(), self.selection[0].end() 
     left, right = self.left, self.right 
     first, last = left.end, right.begin 
     if left.end != right.end: 
      if name in tags and left.size() > 1: 
       first, last = right.begin + 1, right.begin + 1 
       if first == current_left and last == current_right: 
        first, last = right.end, right.end 
      else: 
       first, last = right.begin, right.begin 
       if first == current_left and last == current_right: 
        first, last = right.end, right.end 
     else: 
      # There is no second bracket, so just select the first 
      if name in tags and left.size() > 1: 
       first, last = left.begin + 1, left.begin + 1 
      else: 
       first, last = right.end, right.end 
       if first == current_left and last == current_right: 
        first, last = right.end, right.end 

     self.selection = [sublime.Region(first+1, last+1)] 


def plugin(): 
    return BlockEscape 

, 제대로 작동하지 않을 수 있습니다. 이 경우 직접 수정하거나 Gist page에 의견을 남기십시오.

+0

정말 고마워요, 내가 키 바인딩 + 이동 입력 설정, 그것은 완벽하게 작동합니다. – conjugate

0

당신은 그 위치에 탭으로 코드 조각에 $0을 추가 할 수 있습니다

<snippet> 
    <description>If Condition</description> 
    <content><![CDATA[if (${1:/* condition */}){ 
     ${2:/* code */} 
    }${0}]]></content> 
    <tabTrigger>if</tabTrigger> 
    <scope>source.c</scope> 
</snippet> 
+0

이 답변은 발췌문 작성과 관련되어 있으며 질문이 암시 하듯이 코드 작성의 일반적인 경우는 아닙니다. 적절한 응답이라고 확신합니까? –

+0

대답은 OP의 질문을 해결합니다. 플러그인과 스 니펫은 ST2에서 이러한 작업이 가장 잘 수행되는 방법입니다. – AGS

+0

내가 준 스 니펫은 특정 경우에만 작동합니다. 내가 요구하는 것은 진술을 "탭 아웃 (tab out)"할 수 있다는 것입니다. 그것은, while, for 등이 될 수 있습니다. 또 다른 예는 제가 키 대괄호를 사용하여 괄호와 따옴표를 탭할 수 있습니다. 닫는 괄호/인용 앞의 탭. 그러나 이것은 인라인에서만 작동합니다. – conjugate

관련 문제