Mathematica编辑器:删除左侧的[[]后自动删除右侧匹配的\']\'吗?

问题描述

| 在Mathematica编辑器(即笔记本)中,我经常发现的最困难的事情之一是,我想编辑一些长表达式,然后去掉某些表达式的左端\“ [\”,然后才有机会删除它。右\“] \”,单元中的代码将被弄乱,因为它不再平衡,这使得追逐现在悬挂的右端\“] \”变得非常困难,因为它不再存在它原来的地方! 这是一个简单的例子,假设我们有这个
Text[Row[{PaddedForm[currentTime,{6,3},NumberSigns -> {\"\",\"\"},NumberPadding -> {\"0\",\"0\"}]}]]
现在说我想删除外部Text []调用。因此,我删除了\“ Text [\”,并且在我有机会删除另一面\“] \”之前,笔记本现在将在所有位置进行处理,从而很难找到正确的\“] \”。对于长单元格(演示工作就是这种情况),代码可能会大量移动,并且右\“] \”也可能会消失,必须上下滚动查找它。 是否可以通过选项等设置它,以便当我删除左侧的\“ [\”时,Mathematica会自动删除匹配的右侧的\“] \”?这也适用于\“(\”和\“)\”。 对于我来说,使用笔记本编辑器确实是一个大问题。我只看挂着的“] \”就不能告诉你多少时间。 谢谢 -纳赛尔     

解决方法

下面将添加键盘快捷键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,Word,1];
 NotebookDelete[nb];
 FrontEndExecute[FrontEndToken[nb,\"MoveCellEnd\"]];
 SelectionMove[nb,1];
 NotebookDelete[nb];
 SelectionMove[nb,\"Copy\"]];
];
由于括号是复制
FrontEndExecute[FrontEndToken[nb,\"Balance\"]]
的第一个和最后一个字,因此可用于删除括号。选择,剪切,删除其他括号和粘贴的功能是:
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,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]}]]
    ,我将考虑一种自动方法,但目前我使用以下方法处理该问题: 将光标放在要删除的函数内的第一个标记上(在本例中为“行”) 按Ctrl +。直到选中了所有内容(在这种情况下为两次) 复制 按Ctrl +。一次在选择中包含删除功能 糊 一旦几次,它确实非常快。 Andrew Moylan建议使用以下鼠标变体:   这是我用于此常见操作的变体:         三次单击“行”,Ctrl + C,三次单击“文本”,Ctrl + V,完成        ,我刚刚在这里注册,现在还没有MMA,所以这只是建议解决方案的概述。 这是我在这里的第一个答案,所以请多多包涵。 顺便说一句...很高兴在这里也看到许多数学小组成员。 :-) 纳赛尔的问题/问题非常普遍。 我个人使用了安德鲁描述的相同技术。 用按钮更优雅地解决该问题并不难。 使用操作按钮创建一个小的按钮选项板。 它将像这样工作: 您双击最外面的 功能(您要 删除)。由于您双击它 您将选择一切,直到 最右边]。 您单击操作按钮。的 按钮中的代码只会得到 选择并提取 []对中的参数,则它 将参数粘贴到 在笔记本中选择。不带 评估论点。 而已。几行代码。 既然可以了,您可以在面板上添加一些按钮。 例如: 评论/不推荐的按钮 选择 将{}或()包装到一个按钮的按钮 选择 将fun []包装到一个按钮 选择(可以选择乐趣) 所以以后可以用覆盖 适当的功能) 因此,您最终将创建自己的编程调色板。     ,如果要删除仅包含一个参数的函数,则可以 删除功能名称 使用内部函数上的(Ctrl +。,Ctrl +。)选择其范围 转到该范围的末尾并删除] 该网站还提供有关Mathematica中的平衡括号的更多信息: http://reference.wolfram.com/mathematica/howto/BalanceBracketsAndBraces.html (如果要删除一个带有多个参数的函数,则自动平衡可能仍然无济于事,因为您仍然必须追逐额外的参数。)     ,我不知道如何自动执行此操作,但这是一个建议,可以帮助您直观地了解括号/括号并帮助您手动删除它们。 将您的代码分成多行,以便每个功能块在单独的行上打开和关闭(有点像C,C ++)。例如,您上面的代码如下所示
Text[
 Row[{
   PaddedForm[
    currentTime,{6,3},NumberSigns -> {\"\",\"\"},NumberPadding -> {\"0\",\"0\"}
    ]
   }]
 ]
我在长于一行左右的代码块中使用此代码,尤其是在绘图中,在该代码块中很容易跟踪您提供的选项。     ,我在这里回答我自己的问题。 使用CODE作为单元格类型而不是INPUT为我解决了这个问题。 关闭。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...