如果我在Sublime中有以下代码:
if (condition) {
// code
}
当我的光标位于// code
的末尾时,我想设置一个键绑定(例如Tab),它将退出if语句块并将其移动到}
的末尾。感谢。
答案 0 :(得分:1)
BracketHighlighter插件可以原生提供此功能......有点儿。在其示例快捷方式文件Example.sublime-keymap
中,有一个“Go to Right Bracket”示例键绑定:
// 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。
接下来,保存blockescape.py(如果链接死亡,请参见下文)
Preferences -> Browse Packages... -> BracketHighlighter/bh_modules/blockescape.py
然后,将此条目添加到用户密钥绑定(Preferences -> Key Bindings — User
)的顶部:
{
"keys": ["tab"],
"command": "bh_key",
"args":
{
"lines" : true,
"plugin":
{
"type": ["__all__"],
"command": "bh_modules.blockescape"
}
}
},
我不建议使用tab
作为触发键,因为tab
在扩展中已经发挥了重要作用。当然,您可以定义一个特殊的context来使用tab
,但这取决于您。
如果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上发表评论。
答案 1 :(得分:0)
您可以将代码段中的$0
添加到该位置:
<snippet>
<description>If Condition</description>
<content><![CDATA[if (${1:/* condition */}){
${2:/* code */}
}${0}]]></content>
<tabTrigger>if</tabTrigger>
<scope>source.c</scope>
</snippet>