2

我想在 ISPF Edit 中添加一些快捷方式。

例如,我想为“TOP”输入 T,为“BOT”输入 B。我怎样才能做到这一点?我试图进入

define t alias top

在命令行中,但它不起作用:如果我使用快捷方式,我有“COMMAND TOP NOT FOUND”。

我怎样才能做到这一点?以及每次打开编辑时如何使用此快捷方式?

4

2 回答 2

3

TOP 和 BOTTOM 是 ISPF 命令表中的命令。它们不是 EDIT 命令。它们是 UP MAX 和 DOWN MAX 的别名。ISPF 命令的长度必须至少为 2 个字节,因此您不能使用 1 个字节的字符在 UP MAX 的命令表中创建新的 ALIAS。您可以定义一个名为 T 的编辑宏。该宏可以执行类似的操作

/* REXX */
address ISREDIT "MACRO"
address ISREDIT "LOCATE 0"
exit(0)

B for BOTTOM 可能是

/* REXX */
address ISREDIT "MACRO"
address ISREDIT "LOCATE .ZLAST"
exit(0)

请注意,B 会将您放在最后一行,而不是像 BOTTOM 那样的最后一页。对于 TOP 和 BOTTOM,我个人只会在命令行上使用 PF7 或 PF8 和 M 来进行最大滚动。它只有 1 个带有 PFKEY 的字符,而不是回车键。

于 2017-06-15T12:58:40.673 回答
3

一个灵活的解决方案是创建一个具有双重职责的初始编辑宏。在第一次作为初始编辑宏调用时,它定义命令,例如TB作为自身的别名。然后这些命令使 ISPF 调用相同的宏并执行适当的操作。为此,使用 ISPF 变量ZEDTMCMD作为主要逻辑驱动程序;它由编辑器使用调用宏的命令设置。

这是一个非常通用的 REXX 解决方案,称为MYMACRO

/* REXX */                                                               
address 'ISREDIT'                                                        
parse source . . s3 .                                                    
'MACRO'  /* You can specify optional arguments if you want */            

/* Easier to work with upper case and no leading or trailing blanks */   
address 'ISPEXEC' 'VGET (ZEDTMCMD)'                                      
invoke_cmd = translate(strip(zedtmcmd))                                  

select                                                                   
  when invoke_cmd == s3 then do /* first time call */                    
    'DEFINE T ALIAS' s3                                                  
    'DEFINE B ALIAS' s3                                                  
  end                                                                    
  when invoke_cmd == 'T' then 'UP MAX'                                   
  when invoke_cmd == 'B' then 'DOWN MAX'                                 
  otherwise nop                                                          
end                                                                      
exit 0                                                                   

接下来,指定MYMACRO为初始编辑宏。这可以在几个地方指定,但最简单的是在主编辑面板上(选项 2)。

带有初始宏字段突出显示的 ISPF 编辑条目面板

请注意,您的宏需要在标准查找中(DD SYSEXEC、SYSPROC 或 DD SYSUEXEC 或 SYSUPROC,如果 ALTLIB 处于活动状态,或 ISPCLIB)才能找到。

如果你决定编写一个程序,它会稍微复杂一些。你必须:

  • 在初始编辑宏字段的名称前加上一个感叹号,!以便 ISPF 知道将其作为程序而不是脚本调用(这意味着名称最多 7 个字符);
  • SELECT在执行;之前删除前导感叹号
  • 并在第一次调用逻辑中添加'DEFINE MYMACRO MACRO PGM'为第一行,这样 ISPF 就知道它是一个程序,而不是一个脚本。

在这种情况下,当作为初始编辑宏执行时,ZEDTMCMD将有前导感叹号。

通过创建一个宏,您可以更轻松地在将来添加新命令。

ISPF 安装 SAMPLIB(通常命名为ISP.SISPSAMP,但在您的安装中可能有所不同)有几个示例宏,都以 ISR* 开头。有 REXX 脚本、CLIST、COBOL 和 PL/I 示例。(没有汇编程序,但创建一个是一项微不足道的练习。)

于 2017-06-15T16:06:08.543 回答