复选框"智能角色" in"代码完成" “设置浏览器”部分(至少)执行两项操作:
1)输入时,它会加倍一些字符:',",(,[,{
2)它允许我可以选择一段代码,按(
(即Shift+9
),所选代码将被括号括起来:()
。我也可以再次按(
删除括号。我也可以[]
按[
和{}
按{
,即Shift+[
,即可。{/ p>
我不喜欢这些东西中的第一个,所以我想禁用它,但我喜欢第二件事,并希望保留它。我怎样才能做到这一点?关闭复选框将禁用两者。
P.S。我知道当复选框关闭时,添加/删除括号的工作方式为Cmd+Shift+9
(这比Shift+9
方便)并且Cmd+[
适用于[]
,尽管我这样做当复选框关闭时,不知道添加/删除{}
的任何工作快捷方式。
答案 0 :(得分:3)
该设置称为“智能字符”,它可以为您提供查看位置的线索。打开Finder,输入smartCharacters
,然后按 Enter 。您应该看到一些部分匹配以及NECController
和NECPreferences class
的完全匹配(前者只调用后者)。如果你稍微研究一下这些类,你会看到smartCharacters
存储一个布尔值,而smartCharactersMapping
返回一个字典,将一些字符映射到它们的“对应物”,即$[
到{ {1}}等等。现在看看$]
的发件人,你会看到它的来源。
您最感兴趣的来电者是smartCharactersMapping
。因此,在这个非常丑陋的方法中设置一个断点来查看它的作用。您不关心前两种情况(编辑器有选择而没有智能映射),因为您希望防止插入第二个匹配字符。所以有趣的是这一点:
NECController>>smartCharacterWithEvent
该方法只有一个实现者和一个发送者,因此注释掉原始方法并返回“左”字符应该是安全的,即:
self newSmartCharacterInsertionStringForLeft: char right: opposite
换句话说,不是创建一个包含左右字符的字符串,也可能是它们之间的空格,而只是返回一个包含您键入的单个字符的新字符串。可能不是最优雅的解决方法,但它应该有效,并且应该向您展示如何在将来解决类似的问题。
(理想情况下,你会找到一个更好的解决方案,在此作为替代答案发布,并将其贡献给Pharo代码库 - 毕竟Pharo是开源的。)