Scala,Sublime Text 3 - 停止在文本后面跳动时关闭大括号
Scala, Sublime Text 3 - Stop closing curly brace from jumping when followed by text
每当我在 Scala 中键入多块代码构造(例如 if..else..
、for..yield..
)时,如果我在第一个右大括号之后写入文本而没有先填写正文,Sublime "helpfully" 缩进花括号。当我在同一行中写多个右括号/大括号/圆括号时也会发生这种情况。示例:
if (condition) {
} else {
}
for {
} yield {
}
list.map(x => {
})
如何强制右大括号保持不动?
我在这里感受到你的痛苦,但不知何故我多年来一直忍受这种行为。当然,直到现在。我搜索了用户和语言偏好,把东西撕掉,直到什么都没有。就在那时,我意识到导致问题的不是首选项或语言文件中的内容,而是 没有 的内容。由于许多其他语言具有相同的 if/else 语法,因此我尝试了其中的许多 if/else 语句。 C、C++ 和 Java 没有这个问题,但 C# 有。缺少什么? 缩进规则。
我只是从 Java 包中复制了缩进规则,因为它在语法上非常相似,并将扩展名更改为 scala。我正在研究 linux,所以我不确定其他操作系统上的确切路径应该是什么,但我想它在 ${HOME}
.
之后会类似
${HOME}/.config/sublime-text-3/Packages/Scala/Indentation Rules.tmPreferences
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Indentation Rules</string>
<key>scope</key>
<string>source.scala - comment</string>
<key>settings</key>
<dict>
<key>decreaseIndentPattern</key>
<string>^(.*\*/)?\s*\}.*$|^\s*(public|private|protected):\s*$</string>
<key>increaseIndentPattern</key>
<string>^.*\{[^}"']*$|^\s*(public|private|protected):\s*$</string>
<key>bracketIndentNextLinePattern</key>
<string>(?x)
^ \s* \b(if|while|else)\b [^;]* $
| ^ \s* \b(for)\b .* $
</string>
</dict>
<key>uuid</key>
<string>20E93106-18CF-4BA3-9DA3-8F0C955DB774</string>
</dict>
</plist>
(或者 your-subl-config-folder-here../Packages/Scala/Indentation Rules.tmPreferences
如果你的配置保存在其他地方。Packages
目录的结构应该是相同的。)
您很可能必须在 sublime Packages
目录中创建 Scala
目录。对于 Sublime Text 2,解决方案完全相同,除了包含所有语言文件的 Scala 目录已经存在。我已经尝试了所有我能想到的语法,似乎还没有错。不过,这可能需要一些调整。
每当我在 Scala 中键入多块代码构造(例如 if..else..
、for..yield..
)时,如果我在第一个右大括号之后写入文本而没有先填写正文,Sublime "helpfully" 缩进花括号。当我在同一行中写多个右括号/大括号/圆括号时也会发生这种情况。示例:
if (condition) {
} else {
}
for {
} yield {
}
list.map(x => {
})
如何强制右大括号保持不动?
我在这里感受到你的痛苦,但不知何故我多年来一直忍受这种行为。当然,直到现在。我搜索了用户和语言偏好,把东西撕掉,直到什么都没有。就在那时,我意识到导致问题的不是首选项或语言文件中的内容,而是 没有 的内容。由于许多其他语言具有相同的 if/else 语法,因此我尝试了其中的许多 if/else 语句。 C、C++ 和 Java 没有这个问题,但 C# 有。缺少什么? 缩进规则。
我只是从 Java 包中复制了缩进规则,因为它在语法上非常相似,并将扩展名更改为 scala。我正在研究 linux,所以我不确定其他操作系统上的确切路径应该是什么,但我想它在 ${HOME}
.
${HOME}/.config/sublime-text-3/Packages/Scala/Indentation Rules.tmPreferences
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Indentation Rules</string>
<key>scope</key>
<string>source.scala - comment</string>
<key>settings</key>
<dict>
<key>decreaseIndentPattern</key>
<string>^(.*\*/)?\s*\}.*$|^\s*(public|private|protected):\s*$</string>
<key>increaseIndentPattern</key>
<string>^.*\{[^}"']*$|^\s*(public|private|protected):\s*$</string>
<key>bracketIndentNextLinePattern</key>
<string>(?x)
^ \s* \b(if|while|else)\b [^;]* $
| ^ \s* \b(for)\b .* $
</string>
</dict>
<key>uuid</key>
<string>20E93106-18CF-4BA3-9DA3-8F0C955DB774</string>
</dict>
</plist>
(或者 your-subl-config-folder-here../Packages/Scala/Indentation Rules.tmPreferences
如果你的配置保存在其他地方。Packages
目录的结构应该是相同的。)
您很可能必须在 sublime Packages
目录中创建 Scala
目录。对于 Sublime Text 2,解决方案完全相同,除了包含所有语言文件的 Scala 目录已经存在。我已经尝试了所有我能想到的语法,似乎还没有错。不过,这可能需要一些调整。