Wolfram mathematica Mathematica编辑器:删除正确的匹配项';]';当左';[';是否已删除?

Wolfram mathematica Mathematica编辑器:删除正确的匹配项';]';当左';[';是否已删除?,wolfram-mathematica,Wolfram Mathematica,在Mathematica editor(即笔记本电脑)中,我经常发现的最困难的事情之一是,当我想编辑一些长表达式,并在我有机会删除右“]之前删除一些表达式的左端“[”,单元格中的代码将变得乱七八糟,因为它不再平衡,因此很难追逐现在悬空的右端“]”,因为它已不在原来的位置 这里有一个简单的例子,假设我们有 Text[Row[{PaddedForm[currentTime, {6, 3}, NumberSigns -> {"", ""}, NumberPadding -> {"0", "

在Mathematica editor(即笔记本电脑)中,我经常发现的最困难的事情之一是,当我想编辑一些长表达式,并在我有机会删除右“]之前删除一些表达式的左端“[”,单元格中的代码将变得乱七八糟,因为它不再平衡,因此很难追逐现在悬空的右端“]”,因为它已不在原来的位置

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

Text[Row[{PaddedForm[currentTime, {6, 3}, NumberSigns -> {"", ""}, NumberPadding -> {"0", "0"}]}]]
现在假设我想删除外部文本[]调用。所以我删除了“Text[”,在我有机会删除另一面“]”之前,笔记本现在会到处乱动,很难找到正确的“]”。对于长单元格(这是Demonestritions工作的情况),代码可能会大量移动,右边的“]”也可能会消失,必须上下滚动才能找到它

有没有办法通过一个选项或类似的方式来设置它,这样当我删除左边的“[”时,Mathematica会自动删除匹配的右边的“]”?这也适用于“和”

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

谢谢
--纳赛尔

我将考虑一种自动方法,但我目前正在使用:

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

  • 按Ctrl+。直到选择了内部的所有内容(本例中为两次)

  • 抄袭

  • 按Ctrl+。一次,在选择中包括要删除的函数

  • 粘贴

  • 一旦你做了几次,它真的很快


    Andrew Moylan提出了这种老鼠变异:


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

    • 三次单击“行”,Ctrl+C,三次单击“文本”,Ctrl+V,完成

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

    • 删除函数名
    • 在内部函数上使用(Ctrl+,Ctrl+)选择其范围
    • 转到该范围的末尾并删除]
    本网站还提供了有关Mathematica中平衡括号的更多信息:


    (如果您要删除一个包含多个参数的函数,自动平衡可能不会有任何帮助,因为您仍然需要跟踪额外的参数。)

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

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

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

    我在长度超过一行左右的代码块中使用它,特别是在绘图中,在绘图中很容易跟踪您提供的选项。

    我在这里回答我自己的问题。 使用代码作为单元格类型而不是输入解决了这个问题。
    结束。

    我刚在这里注册,现在没有MMA,所以这只是建议解决方案的概要。 这是我在这里的第一个答案,所以请容忍我。 顺便说一句……很高兴在这里看到很多数学爱好者。:-)

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

    创建一个带有操作按钮的小按钮调色板。 它的工作原理如下:

  • 双击最外层的 函数(您想要的函数) 删除)。因为你双击了它 您将选择最新版本的所有内容 最右边的]
  • 单击“操作”按钮。这个 按钮中的代码将简单地 选择并提取 []对中的参数,然后 将参数粘贴到 在笔记本中选择。没有 当然要评估论点
  • 就这样。几行代码

    由于您正在使用它,您可以向调色板添加更多的按钮。 例如:

    • 注释/取消注释的按钮 挑选
    • 将{}或()包装到 挑选
    • 将fun[]包装到 选择(乐趣可左选) 所以以后可以用 (适当的功能)

    因此,您将创建自己的编程调色板。

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

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

    这可用于删除括号,因为它们是复制
    FrontEndExecute[FrontEndToken[nb,“Balance”]]
    时的第一个和最后一个单词。选择、剪切、删除附加括号和粘贴的功能是:

    RemoveBrackets[nb_]:= ( 
     FrontEndExecute[FrontEndToken[nb,"Balance"]];
     FrontEndExecute[FrontEndToken[nb,"Cut"]];
     cutClipboardBrackets;
     FrontEndExecute[FrontEndToken[nb,"Paste"]];
    );
    
    最后,我们可以保护这些功能并添加键盘快捷键():


    这是使用
    f@x
    notation无论何时,只要初始表达式是平衡的,解决方案就应该有效,因为如果初始表达式不是平衡的,则可以删除错误的闭合器。@belisarius,是的,当我可以时,我使用f@但如果我想将第二个参数传递给f,则不能使用f@如f[x,3]。然后f@x不会起作用,至少我不知道在这种情况下会怎样。这就是你可以分开的时候:)好的,更新,有一种方法可以做到我想要的,所以这对我来说不再是问题,问题解决了。我要结束这个问题吗?不知道怎么做。无论如何,这是解决方案,感谢WReach,我发现当我把单元格的样式改成代码而不是输入时,现在Mathematica不再做自动格式化,因此当我删除左边的“[”]时,代码不会自动地在编辑中间改变我的布局。
    RemoveBrackets[nb_]:= ( 
     FrontEndExecute[FrontEndToken[nb,"Balance"]];
     FrontEndExecute[FrontEndToken[nb,"Cut"]];
     cutClipboardBrackets;
     FrontEndExecute[FrontEndToken[nb,"Paste"]];
    );
    
     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]}]]