在Mathematica编辑器(即笔记本)中,我总能找到的最困难的事情之一就是当我想编辑一些长表达式时,在我有机会删除之前去除某个表达式的左端“[”正确的“]”,单元格中的代码会搞得一团糟,因为它不再平衡,因此很难追逐,现在悬挂,右端“]”因为它不再处于原始位置!
这是一个简单的例子,假设我们有这个
Text[Row[{PaddedForm[currentTime, {6, 3}, NumberSigns -> {"", ""}, NumberPadding -> {"0", "0"}]}]]
现在说我想删除外部Text []调用。所以我删除了“Text [”,在我有机会删除另一方“]之前,笔记本现在会把所有东西都放在一边,很难找到合适的”]“。对于长单元格(这是demonestrations工作的情况),代码可以大量移动,右边的“]”也可以不在视图范围内,必须向下滚动并向上查找它。
有没有办法通过选项等设置它,这样当我删除左边的“[”时,Mathematica会自动删除匹配的权限“]”?这也适用于“(”和“)”。
对我来说,使用笔记本编辑器确实是个大问题。不能告诉你我花了多少时间看着悬挂的“]”。
感谢 --Nasser
答案 0 :(得分:11)
我会考虑一种自动方法,但我目前用以下方法处理:
将光标放在要删除的函数内的第一个标记上(在本例中为Row)
按 Ctrl + 。直到选中所有内容(在这种情况下为两次)
复制
按 Ctrl + 。一次,在选择中包含要删除的功能
粘贴
一旦你做了几次,它真的很快。
Andrew Moylan建议这种鼠标变异:
以下是我用于此常见操作的变体:
- 三击“行”,按Ctrl + C,三击“文字”,按Ctrl + V,完成
答案 1 :(得分:4)
我刚刚在这里注册,我现在没有MMA,所以这只是建议解决方案的大纲。 这是我的第一个答案,请耐心等待。 顺便说一句......很高兴在这里看到许多mathgroupers。 : - )
纳赛尔的问题/问题非常普遍。 我个人使用安德鲁描述的相同技术。 然而,用按钮更优雅地解决这个问题并不困难。
使用操作按钮创建一个小按钮调色板。 它会像这样工作:
就是这样。几行代码。
既然你在这里,你可以在调色板上添加几个按钮。 例如:
所以你最终会创建自己的编程调色板。
答案 2 :(得分:3)
如果要删除只有一个参数的函数,可以
本网站还提供了有关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]}]]