在 Mathematica 7 中取消/注释掉代码的键盘快捷键?

Posted

技术标签:

【中文标题】在 Mathematica 7 中取消/注释掉代码的键盘快捷键?【英文标题】:Keyboard shortcut to Un/Comment out code in Mathematica 7? 【发布时间】:2011-08-02 01:37:57 【问题描述】:

注释/取消注释一段代码的键盘快捷键在 Java、.Net 等语言的其他编程 IDE 中很常见。我发现这是一种非常有用的技术,可以通过反复试验来临时注释掉和取消注释行、单词和部分代码以找出什么是有效的,什么是无效的。

我在版本 7 的 Mathematica 前端找不到任何这样的键盘快捷键。我知道可以通过选择代码、鼠标右键单击并从出现的菜单中选择 Un/Comment 来注释掉代码,但这是编码时太慢了。

我尝试使用键盘上的menu key Menu 访问此键,但 Mathematica 前端不像其他应用程序那样响应或识别此键,这可能允许使用组合键进行评论。其他人可以验证这不是我的机器独有的,并且mathematica 无法识别密钥。我查看了question 并查看了 KeyEventTranslations.tr 文件,但我认为没有任何方法可以创建快捷方式来执行此操作(?)。我应该忍受它吗?

还有其他建议吗?

(我看到有一个 Emacs 版本的 mathematica,我从未尝试过 Emacs 或这个 Mma 版本,并想象它会有这种能力,但不想去麻烦和安装它的不确定性。我也想猜测 Wolfram Workbench 可以做到这一点,但这可能不值得为此投资。)

【问题讨论】:

【参考方案1】:

如果您愿意编辑 Mathematica 系统文件MenuSetup.tr,您可以在 Mathematica 7.0.x 中安装快捷方式。您可以在与KeyEventTranslations.tr 文件相同的位置找到它(即在“SystemFiles/FrontEnd/TextResources/platform”下的安装中)。在MenuSetup.tr 中,在Edit 菜单的定义下找到以下行:

MenuItem["Check &Balance", "Balance", MenuKey["B", Modifiers->"Control", "Shift"]],

在该行的正下方,插入以下内容:

MenuItem["Un/C&omment Selection", KernelExecute[FE`toggleComment[]], MenuKey["/", Modifiers->"Command"], MenuEvaluator -> Automatic, Method -> "Queued"],

Un/Comment Selection 命令现在可以在 Edit 菜单下使用,键盘快捷键 Cmd-/ kbd> 或 Alt-/ 取决于您的平台——就像在 Mathematica 8 中预安装了此命令一样。

请阅读有关破解 Mathematica 安装文件的常见免责声明 - 不提供任何保证 :)

我不知道有什么方法可以将此功能映射到一些涉及 Menu 键的快捷方式。

快捷键,无菜单

前面的步骤通过安装一个新的菜单项来模拟 Mathematica 8 所做的事情。如果您希望保持菜单不变,则可以在KeyEventTranslations.tr 中安装快捷方式。添加以下行:

Item[KeyEvent["/", Modifiers->Command], KernelExecute[ToExpression["FE`toggleComment[]"]], MenuEvaluator -> Automatic, Method -> "Queued"]

如果该行不是列表中的最后一项,则需要在该行末尾添加一个逗号。

【讨论】:

这是有道理的。另外,你能解释一下为什么这可以从MenuSetup.tr 而不是KeyEventTranslations.tr 完成吗? +1 这对我有用。对于其他尝试它的人,您需要关闭并重新启动mathematica 才能使用该命令。 @Mr 它将在KeyEventTranslations.tr 中工作,但您必须将命令包装在ToExpression 中,就像在ContextMenus.tr 中一样。 谢谢,我学到了很多东西。你能告诉我MenuEvaluator -> Automatic, Method -> "Queued" 吗? @Mr MenuEvaluatorMethod 的功能似乎与 ButtonEvaluatorMethod 选项类似。与Button 不同,这些映射文件上下文中的默认评估器似乎是前端,因此MenuEvaluator -> Automatic 似乎将表达式推送到内核。 Method -> “排队”似乎是一种防御措施,以防注释掉一大块代码需要很长时间。我经常说“似乎”,因为这都是猜测。【参考方案2】:

选择代码并按以下选项之一:

Alt+/ Alt-E-O Alt+E+O

注意事项:

仅在 Windows 上使用 Mathematica 8 测试。 在我的非美式键盘(ABNT 巴西)上,快捷键 Alt+/ 不起作用,我使用 Alt+E+O。

【讨论】:

【参考方案3】:

这是您的 KeyEventTranslations.tr 文件的代码,它将注释掉代码。另一半我还在努力。

Item[KeyEvent["/", Modifiers -> Command],
    FrontEndExecute[
        NotebookApply[FrontEnd`InputNotebook[],
            "(*\[SelectionPlaceholder]*)"
        ]
    ]
], 

这会将它绑定到 Alt+/,就像在 Mathematica 8 中一样。

【讨论】:

是否可以(或不建议)在“[用户目录]\AppData\Roaming\Mathematica\SystemFiles\FrontEnd”下创建此文件/方向,因此我不必为每个文件都更改文件新版本? @Phab 是的,事实上它应该在那里被复制和编辑。请参阅我最近的答案,例如:mathematica.stackexchange.com/a/880/121、mathematica.stackexchange.com/a/57492/121。

以上是关于在 Mathematica 7 中取消/注释掉代码的键盘快捷键?的主要内容,如果未能解决你的问题,请参考以下文章

在 Vim 中注释/取消注释 ruby​​ 代码块的最优雅的方式是啥?

Android studio怎么注释掉代码

以编程方式取消注释代码

在 Atom 中注释掉代码块

XCode:注释掉javascript文件中的代码

在 Spyder 中注释掉 Python 代码行的快捷键