Mathematica编辑器:当左'['被删除时,自动删除正确的匹配']'?

时间:2011-05-26 11:25:49

标签: wolfram-mathematica

在Mathematica编辑器(即笔记本)中,我总能找到的最困难的事情之一就是当我想编辑一些长表达式时,在我有机会删除之前去除某个表达式的左端“[”正确的“]”,单元格中的代码会搞得一团糟,因为它不再平衡,因此很难追逐,现在悬挂,右端“]”因为它不再处于原始位置!

这是一个简单的例子,假设我们有这个

Text[Row[{PaddedForm[currentTime, {6, 3}, NumberSigns -> {"", ""}, NumberPadding -> {"0", "0"}]}]]

现在说我想删除外部Text []调用。所以我删除了“Text [”,在我有机会删除另一方“]之前,笔记本现在会把所有东西都放在一边,很难找到合适的”]“。对于长单元格(这是demonestrations工作的情况),代码可以大量移动,右边的“]”也可以不在视图范围内,必须向下滚动并向上查找它。

有没有办法通过选项等设置它,这样当我删除左边的“[”时,Mathematica会自动删除匹配的权限“]”?这也适用于“(”和“)”。

对我来说,使用笔记本编辑器确实是个大问题。不能告诉你我花了多少时间看着悬挂的“]”。

感谢 --Nasser

6 个答案:

答案 0 :(得分:11)

我会考虑一种自动方法,但我目前用以下方法处理:

  1. 将光标放在要删除的函数内的第一个标记上(在本例中为Row)

  2. Ctrl + 直到选中所有内容(在这种情况下为两次)

  3. 复制

  4. Ctrl + 一次,在选择中包含要删除的功能

  5. 粘贴

  6. 一旦你做了几次,它真的很快。


    Andrew Moylan建议这种鼠标变异:

      

    以下是我用于此常见操作的变体:

         
        
    • 三击“行”,按Ctrl + C,三击“文字”,按Ctrl + V,完成
    •   

答案 1 :(得分:4)

我刚刚在这里注册,我现在没有MMA,所以这只是建议解决方案的大纲。 这是我的第一个答案,请耐心等待。 顺便说一句......很高兴在这里看到许多mathgroupers。 : - )

纳赛尔的问题/问题非常普遍。 我个人使用安德鲁描述的相同技术。 然而,用按钮更优雅地解决这个问题并不困难。

使用操作按钮创建一个小按钮调色板。 它会像这样工作:

  1. 双击最外层 功能(你想要的那个) 删除)。既然你双击它 你将选择一切 最右边]。
  2. 点击操作按钮。该 按钮中的代码只会得到 选择和提取 []对中的参数,然后它 将参数粘贴到 在笔记本中选择。没有 当然要评估论点。
  3. 就是这样。几行代码。

    既然你在这里,你可以在调色板上添加几个按钮。 例如:

    • 评论/取消a的按钮 选择
    • 用于将{}或()包装到a的按钮 选择
    • 用于将fun []包装到a的按钮 选择(乐趣可以选择 所以以后可以用它覆盖 适当的功能)

    所以你最终会创建自己的编程调色板。

答案 2 :(得分:3)

如果要删除只有一个参数的函数,可以

  • 删除功能名称
  • 在内部函数上使用(Ctrl +。,Ctrl +。)来选择其范围
  • 转到该范围的末尾并删除]

本网站还提供了有关Mathematica中平衡括号的更多信息: http://reference.wolfram.com/mathematica/howto/BalanceBracketsAndBraces.html

(如果要删除具有多个参数的函数,自动平衡可能无论如何都没有帮助,因为您仍然需要追逐额外的参数。)

答案 3 :(得分:3)

我不知道如何自动执行此操作,但这里有一个建议,可以帮助您直观地跟踪括号/括号,并帮助您手动删除它们。

将代码分解为多行,以便每个功能块在单独的行上打开和关闭(有点像C,C ++)。例如,您的上述代码将如下所示

Text[
 Row[{
   PaddedForm[
    currentTime, {6, 3},
    NumberSigns -> {"", ""},
    NumberPadding -> {"0", "0"}
    ]
   }]
 ]

我在长于一行的代码块中使用它,特别是在绘图中,它可以很容易地跟踪你提供的选项。

答案 4 :(得分:3)

我在这里回答我自己的问题。 使用CODE作为单元格类型而不是INPUT为我解决了这个问题。 闭。

答案 5 :(得分:2)

以下将添加键盘快捷键 Shift + Backspace 以删除当前光标位置的最近的括号。它还会在编辑菜单中添加一个菜单项。

此功能获取当前剪贴板内容并删除第一个和最后一个“单词”。

cutClipboardBrackets:=Module[{nb},
 nb=CreateDocument[{},Visible->False,WindowSelected->False];
 NotebookWrite[nb,NotebookGet@ClipboardNotebook[]]
 SelectionMove[nb,All,CellContents];
 FrontEndExecute[FrontEndToken[nb,"MoveCellBeginning"]]          
 SelectionMove[nb,All,Word,1];
 NotebookDelete[nb];
 FrontEndExecute[FrontEndToken[nb,"MoveCellEnd"]];
 SelectionMove[nb,All,Word,1];
 NotebookDelete[nb];
 SelectionMove[nb,All,CellContents];
 FrontEndExecute[FrontEndToken[nb,"Copy"]];
];

这可用于删除括号,因为它们是复制FrontEndExecute[FrontEndToken[nb,"Balance"]]时的第一个和最后一个字。选择,剪切,删除其他括号和粘贴的功能是:

RemoveBrackets[nb_]:= ( 
 FrontEndExecute[FrontEndToken[nb,"Balance"]];
 FrontEndExecute[FrontEndToken[nb,"Cut"]];
 cutClipboardBrackets;
 FrontEndExecute[FrontEndToken[nb,"Paste"]];
);

最后,我们可以保护功能并添加键盘快捷键(like here):

 Protect[cutClipboardBrackets,ClipboardBrackets];

 FrontEndExecute[
  FrontEnd`AddMenuCommands[
   "SelectAll",{Delimiter,MenuItem["Delete Outer Brackets",
     FrontEnd`KernelExecute[nb=CreateDocument[Null,Visible->False,WindowSelected->True];
  NotebookWrite[nb,Cell[BoxData[RowBox[{"RemoveBrackets[SelectedNotebook[]]"}]],"Input"]];
  SelectionMove[nb,Previous,Cell];
  SelectionEvaluate[nb];
  NotebookClose[nb]],
  MenuKey["Backspace",Modifiers->{"Shift"}],System`MenuEvaluator->Automatic]}]]