如何解决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为我解决了这个问题。
关闭。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。