新手问题 sublime 怎样跳出括号?

wangbaomi · 2012年08月09日 · 最后由 xiaolai 回复于 2012年11月22日 · 25943 次阅读

比如:我在"( )"内输入完成后,怎样让光标跳到括号外?

好像 eclipse 上直接按 Enter 键就可以跳到括号外,sublime 用什么快捷键呀?

请按向右方向键

#1 楼 @xiaozi 没有其它方法了吗?方向键按着慢呀。。

按右括号也可以吧?

#3 楼 @luikore 对,右括号也可以。。

有个插件叫 auto semicolon,在括号内输入分号,会自动把光标移到行尾然后再输入分号,不过这玩意对 Ruby 和 Python 没用…… 我用 Sublime 写 Ruby 的时候一般用 Vim 模式,括号内输入完了就直接 Esc 然后 o,切到下一行。

我一般用ctrl + f

#6 楼 @fantasyday ctrl + f 不是查找嘛。。

[
{ "keys": ["enter"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
    [
        { "key": "following_text", "operator": "regex_contains", "operand": "^[)\\]\\>\\'\\\"]", "match_all": true },
    ]   
  }
]

我用这个 key setting 光标右边为括号一类的字符时候 按 enter 来跳过一个字符

#7 楼 @wangbaomi Mac 下是向右。。

#8 楼 @leozwa 很好,收藏了~

匿名 #11 2012年08月22日

#8 楼 @leozwa 我将这段代码,拷贝进 key bindings - user 都无法保存。不论是 win,还是 mac。还望说明

匿名 #12 2012年08月22日

该死的,多看看提示就好了,谢谢,已经解决。是因为"match_all": true }后面多了一个,逗号

#12 楼 @ronbin 哈 不好意思 我本来下面还有一行 删掉的时候忘记把括号删掉了 就是这个 { "key": "preceding_text", "operator": "not_regex_match", "operand": "^.*\\{$", "match_all": true }

主要目的就是光标在{}之间按回车的话不跳出来 而是正常的另起一行 不然写 c, java, css 之类的时候很别扭...

匿名 #14 2012年08月22日

#13 楼 @leozwa 你好,我把你刚刚后面这句也给加上了。不过貌似在{}里面,按回车键,还是没办法跳出来。如果能跳出{}这个真心很好。

^_^

匿名 #15 2012年08月22日

#13 楼 @leozwa 不好意思,我又再次的把文字给看错了。不好意思。

匿名 #16 2012年08月22日

#13 楼 @leozwa 我发现,有这句和没有这句,在当光标在{}里面时,按回车,都是不会跳出。出于好奇,还是希望能说下,加上这句,用意是?

啊 我之前发的那个 regex 里面 "operand": "^[)\\]\\>\\'\\\"]" 没有包括 } 所有在 {} 中按回车不跳出

其实这个 key setting 就是用回车向右移动一格 不过有两个要求

第一个要求是说光标后的内容必须符合 "^[)\\]\\>\\'\\\"]" 这个 regex。 基本就是光标后为 ) ] > ' " 的时候。 注意是用的是following_text 还有 是 regex_contains

第二个要求是说光标前的内容必须不符合 "^.*\\{$" 这个 regex。 就是说光标的左边不能是 { 这次用的是 preceding_textnot_regex_match

所以说其实并没有跳出括号 只是向右移动罢了

这两个 regex 你都可以按照你的需求更改。 我现在用的是这个

[
    {"keys": ["enter"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
        [
            { "key": "following_text", "operator": "regex_contains", "operand": "^[)\\]\\>\\'\\\"\\ %>\\}\\;\\,]", "match_all": true },
            { "key": "preceding_text", "operator": "not_regex_match", "operand": "^.*\\{$", "match_all": true  }
        ]
    }
]

可以去看看 sublime key settings api 的文档

匿名 #18 2012年08月23日

#17 楼 @leozwa 谢谢分享,看了你的说明之后。我琢磨了下,每加上你后面那句,使用 shift+enter 来代替{}中换行,比较适合我。就让在{}中,只要不按 shift+enter,就让其继续向右跳动一个字符吧。

好像 Tab 键可以

#19 楼 @w7938940 大概要设置下才行吧?

使用 17 楼的脚本会有一个问题,就是在括号中无法用 enter 来自动补全了,我稍微改了一下,这个样子就完美了:

[
    {"keys": ["enter"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
        [
            { "key": "following_text", "operator": "regex_contains", "operand": "^[)\\]\\>\\'\\\"\\ %>\\}\\;\\,]", "match_all": true },
            { "key": "preceding_text", "operator": "not_regex_match", "operand": "^.*\\{$", "match_all": true  },
            { "key": "auto_complete_visible", "operator": "equal", "operand": false }
        ]
    }
]

ctrl+enter 就可以啊

#21 楼 @sleepd 哈哈 我是改为 tab 补全了 因为有时候我不想补齐只想跳出括号 却先要 ESC 跳出补全...

mac 下是 Command + Enter

需要 登录 后方可回复, 如果你还没有账号请 注册新账号