SAS增强编辑器:提交代码块而无需手动突出显示

时间:2016-08-09 17:37:30

标签: sas

我很少需要提交整个.sas文件。相反,我一次提交一个步骤。这意味着我不断突出代码。

问题:有没有办法让SAS提交一段代码而无需手动突出显示?

从事工作:

Emacs ESS有"评估此段落和步骤"命令C-c C-p。一种解决方案是使用ESS而不是增强编辑器。但是,我正在使用SAS for Windows,它目前似乎没有与ESS的交互功能。

SUBTOP命令可用于提交第一行 n 代码行。但是,SUBTOP似乎无法在整个文档中的任意位置提交代码。

通过空行分隔步骤似乎是SAS标准做法。这意味着代码块可以定义为两个非连续空行之间的文本。

3 个答案:

答案 0 :(得分:1)

我不知道直接这样做的方法。但是,有一些有用的选择。

首先,如果您在增强编辑器中,则可以使用密钥使用代码折叠功能扩展/收缩代码块。

Alt +连字符(Alt - )折叠当前块。然后,Shift +(向下箭头)突出显示整个块(现在是一行),F8(或您指定的功能键,如果不同)提交该块。

其次,如果您使用程序编辑器,请启用从窗口中删除已执行代码的功能;那么你可以有效地使用SUBTOP。

第三,您可能会考虑以不同方式构建程序。如果您通常需要将它分块运行,则每个部分都可以是一个单独的程序。企业指南使这一点特别容易管理;每个程序都有自己的输出选项卡和日志,甚至。一个流程=一个旧的'程序,每个实质步骤都是一个单独的实际程序文件(但是你喜欢运行);然后右键单击要运行的步骤并选择提交。

答案 1 :(得分:1)

在EMACS中识别和提交代码需要多少次击键和手部动作。你必须将右手从鼠标上移开。

以下内容仅适用于旧文本编辑器

我很确定你可以写一个命令宏,但你需要将光标移动到一个段落的开头并点击一个功能键或鼠标按钮

您需要在功能键或鼠标按钮上放置如下所示的宏

macro 
 mark;find <empty line> unmark;store;submit past buffer

我可以提交一段代码而无需快速触摸键盘

我的权利通常在鼠标上 我的食指是鼠标左键,鼠标右键是第二根手指 使用食指提交代码突出显示代码,而无需移动食指 使用右手按钮上方的第二根手指。

提交应该是人民币

答案 2 :(得分:0)

简短的回答是否定的,没有办法使用一次击键在SAS中提交代码块。

让我解释原因。

文本区域由光标,点和标记的两个方面决定。 Point是光标相对于文件开头的当前位置。 Mark是一个包含光标可能位置的变量。区域是点和标记之间的文本。

提交代码块可视为两个步骤:

  1. 选择一个地区。
  2. 将所选区域提交给编译器。
  3. 要将此流程绑定到单个密钥,需要能够使用代码选择区域process将如下所示。

    1. 创建一个首先选择区域的命令式宏 使用FIND command找到块的结尾(搜索 回车,换行,&#34;跑;&#34;声明等。)。
    2. 设置标记。
    3. 将该点移动到该区域的开头。
    4. 选择区域。
    5. 使用SUBMITGSUBMITEND命令执行区域。
    6. 使用KEYS菜单编译宏并将其绑定到功能键。
    7. 这有两个问题。

      首先,无法使用代码在增强编辑器(EE)中设置标记。如果没有标记,则无法定义区域,并且上述过程失败。 @guest引用的MARK命令仅适用于程序编辑器。要查看此内容,请尝试按下Ctrl+M或从EE中的命令行发出MARK命令。您将收到以下消息:

      ERROR: The MARK command is not supported by the Enhanced Editor. 
      

      其次,目前还不清楚如何使用代码选择区域。所有这些的documentation是完全不同的。如果没有办法设置标记,我没有花太多时间调查如何选择。

      然而,很明显,能够使用keyboard macro在EE中设置标记。这与MARK命令的区别或原因超出了我的范围。也可以选择一个区域。虽然看似缺少设置标记和选择的代码命令会阻止我们创建单个击键提交,但键盘宏使我们能够开发出两个关键的触发方法。

      提交代码

      Tools > Options > Preferences > Results下,我已检查过&#34;查看生成的结果&#34;。这会强制结果窗口在提交代码后占据前景。

      在KEYS屏幕中,我有以下内容:

      Key  Definition
      ---  ----------
      F3   clear log; end; log; wpgm;
      F4   clear log; end;
      

      当我按F3时,

      • 清除日志(clear log;
      • 提交所选区域(end;
      • 选择了日志窗口(log;
      • 选择了最新的程序窗口(wpgm;

      这意味着结果不会立即显示给我,请在上面设置首选项设置。如果我想查看结果,请改为F4。这会清除日志并提交代码,但不会选择任何其他窗口。

      要打开KEYS屏幕,请在EE界面左上角的命令行中键入KEYS或提交dm 'KEYS';。必须先保存对KEYS菜单的更改,然后才能生效。

      键盘宏

      关于创建键盘宏的instructions

      选择单行代码

      创建一个键盘宏,执行以下操作。

      1. 将光标移动到行首
      2. 将选择范围扩展到行尾
      3. 我将此限制为Ctrl+Enter。然后我可以使用Ctrl+Enter > F3执行一行代码。

        手动代码选择/折叠

        此方法需要启用可折叠代码部分。为此,请转到Tools > Options > Enhanced Editor > General,然后查看“折叠代码”部分&#39;复选框。

        在Keyboad宏中,

        1. 指定一个命令以标记当前位置&#39; (Ctrl+Space)。
        2. 分配&#39;切换展开当​​前行&#39; (Alt+P
        3. 分配&#39;扩展选择标记&#39; (Alt+L
        4. 完成此操作后,将光标放在折叠块的末尾,例如run;语句中的分号右侧。执行序列:

          1. 标记当前位置
          2. 切换展开当​​前行
          3. 切换展开当​​前行
          4. 从标记
          5. 扩展选择

            &#39; Toggle的副作用扩展当前行&#39;是折叠代码块时,该点移动到折叠块的开头。由于我们在块的末尾设置了标记,因此我们可以定义和选择区域。

            就我指定的密钥而言,这是Ctrl+Space > Alt+P > Alt+P > Alt+L。请注意,Alt可能会在此序列的最后三个步骤中保持按下状态,以使其变为Ctrl+Space > Alt (P-P-L)。因此,要使用键盘手动提交折叠块,请将光标放在块的末尾并发出Ctrl+Space > Alt (P-P-L) > F3

            自动代码选择/折叠

            此自动过程依赖于“切换扩展当前行”的副作用。键盘宏,在上一节中描述。使用搜索功能自动手动代码折叠/选择过程。

            整个过程可分为两部分:

            1. 找到折叠块的末尾。
            2. 选择折叠块。
            3. 折叠块由以下定义。

              块的开头:

              • proc <name/options> ;
              • data <name/options> ;
              • %macro <name/options> ;

              块结束:

              • run;
              • quit;
              • %mend;

              分号在EE中切换块边界。 EE天真地寻找关键字对。因此,即使编译器无意义,也可以定义data-%mend折叠块。

              以下给出了每个部件需要由键盘宏发出的命令。

              <强>予。找到块结束语句

              1. 将光标移动到行首(这可确保折叠块边界包含在步骤3中的前向搜索集中)。
              2. 重置搜索。
              3. 将搜索方向设置为转发。
              4. 将搜索设置为不区分大小写。
              5. 将搜索设置为忽略评论中的文字。
              6. 将搜索设置为代码。
              7. 启用正则表达式模式进行搜索。
              8. 将搜索设置为字符串\<[rqm][ue][ni][dt]*\>;
              9. 使用当前设置查找下一次出现。
              10. 向右移动光标(当找到块结束语句时,整个单词都会突出显示。向右移动光标会将折叠块末尾的点放在分号右侧。 )。
              11. <强> II。选择折叠块

                1. 标记当前位置。
                2. 切换展开当​​前行。 (折叠带有将光标移动到块开头的副作用的部分。)
                3. 切换展开当​​前行。 (展开选择以允许突出显示。光标保留在块的开头)。
                4. 将选择范围扩展为标记。
                5. 我将此序列绑定到Ctrl+Shift+Enter

                  请注意,宏中更改的搜索设置不会全局扩展。也就是说,如果您点击Ctrl+F并进行正则表达式搜索&#39;取消选中,如果您在运行此宏后再次打开Ctrl+F,您会看到&#39;正则表达式搜索&#39;仍然没有检查。

                  让我解释一下步骤8中的正则表达式,因为它不是很明显。

                  Ctrl+F对话框不使用Perl正则表达式。它使用了其他东西,可能是在Perl被集成到SAS之前的任何正则表达式语法。要查看可用的选项,请单击&#34;查找文本旁边的箭头:&#34; “查找”对话框中的文本框。我们使用的选项如下:

                  • \<匹配单词的开头
                  • \>匹配单词的结尾
                  • []匹配一组字符(通过异或)
                  • *强制出现前一个字符的0次或更多次

                  正则表达式\<[rqm][ue][ni][dt]*\>;表示该单词必须以rqm开头。第二个字符只能是ue。第三个字符只能是ni。如果存在第四个字符,则必须为dt。最后一个字符必须是;。因此,只会找到关键字run;quit;mend;。会跳过包含完整或部分匹配的字词,例如ammendtreatment

                  此方法的缺点

                  1. 不支持run;quit;mend;以外的关键字。
                  2. 不支持折叠块内的折叠块。这种方法并不“聪明”。因为它无法辨别哪个关键字对定义了外部块。
                  3. 不支持希望将其宏名称放在mend语句中的人。由于正则表达式在结尾处需要使用分号,因此将跳过%mend MacroName;形式的语句。
                  4. 根据几个月的研究,这似乎是可以开发的完整解决方案。所需的密钥引脚是基于代码的能力,用于设置标记并在增强编辑器中选择区域。如果有人知道如何做到这一点,请告诉我,我将实施本答案第一部分概述的单键提交流程。