“自动删除相应括号”的用户脚本

“自动删除相应括号”的用户脚本

首先我要说的是,我不是寻找如何禁用括号完成。事实上,当我尝试搜索我要问的问题时,这种信息是唯一不断出现的东西……

我正在寻找类似于典型编程编译器处理括号自动完成的方法。例如,我经常使用 Spyder 编写 Python 程序,当我意外打开任何类型的 ([{ 括号,尽管最初括号的另一侧会自动用 )]} 完成时,如果我删除该括号,它也会自动删除相应的括号。然而,在 TeXstudio 中,在意外的括号上按退格键会将“结束”括号留在文件中。

虽然发生这种情况时手动删除另一个括号本身并不是一项艰巨的任务,但在阅读了 50 页乳胶后,我开始认为一定有人比我聪明,已经想到了解决这个问题的方法。有什么想法吗?

答案1

截至撰写本文时,我认为没有自动删除相应括号的选项(真遗憾 :o)。有一种方法可以通过 TeXstudio 中的宏/用户脚本来实现这一点,但稍微复杂一些,所以我将逐步介绍。

“自动删除相应括号”的用户脚本

使用注意事项:以下脚本在以下情况下自动删除 , 中的两个括号:( ()i ) 光标位于{}[]介于打开和关闭括号以及 (ii)Backspace按下键。TeXstudio 中的这种情况最常出现在“自动完成括号”选项打开时。(见下面的 Gif 演示。)

  1. 从主工具栏转到Macros -> Edit Macros。单击Add +弹出窗口左下角以添加新用户脚本。将以下内容粘贴到LaTeX content弹出窗口右侧的大框中:

    %SCRIPT
    previousChar = function() {return String.fromCharCode(cursor.previousChar())};
    nextChar = function() {return String.fromCharCode(cursor.nextChar())};
    var Obrackets = ['(','[','{'];
    var Cbrackets = [')',']','}'];
    var Omatch = Obrackets.indexOf(previousChar());
    var Cmatch = Cbrackets.indexOf(nextChar());
    if(Omatch>=0 && Cmatch==Omatch){
        cursor.deleteChar();
    }
    if(cursor.hasSelection()){
        cursor.removeSelectedText();
    } else {
        cursor.deletePreviousChar();
    }
    

    如果您愿意,可以给它起一个名字(以便于在步骤 2 中轻松找到它)。关闭宏窗口。

图片1

  1. 从主工具栏转至Options -> Configure TeXstudio,然后导航至:

    Shortcuts -> Menus -> Macros
    

    找到您在第一步中创建的宏。将此Current shortcut宏的 更改为Backspace

图片2

您可能会收到有关替换当前键的功能的警告Backspace,但您可以忽略它(因为脚本已考虑到正常功能Backspace)。

[额外的]在任何时候,如果您想恢复原始功能,一个简单的方法是删除宏(或将其恢复为其默认快捷方式),然后:

    Shortcuts -> Editor -> Basic Key Mapping -> Delete left character

并将其改回Backspace

  1. 测试一下!(请注意,在 .gif 中,我已Adv. Editor打开选项中的“自动完成括号”)。

动态图

答案2

如果要同时删除的括号(或花括号)正在限定命令的范围,您可以将光标放在与该命令相关的单词上,然后按Alt+ Del

例如,

\textbf{text}

将输出

文本

我不知道是否有办法对其他类型的支架执行相同操作。

来源

相关内容