Macros 如何在编辑中更改主命令

Macros 如何在编辑中更改主命令,macros,edit,zos,mvs,ispf,Macros,Edit,Zos,Mvs,Ispf,我想在ISPF编辑中添加一些快捷方式 例如,我想键入T表示“TOP”,键入B表示“BOT”。我该怎么做?我试图进去 define t alias top 在命令行中,但它不起作用:如果使用快捷方式,我会出现“command TOP NOT FOUND” 我怎样才能做到这一点?以及如何在每次打开“编辑”时使用此快捷方式?顶部和底部是ISPF命令表中的命令。它们不是编辑命令。它们是UP MAX和DOWN MAX的别名。ISPF命令的长度必须至少为2字节,因此不能在命令表中使用1字节字符为UP MA

我想在ISPF编辑中添加一些快捷方式

例如,我想键入T表示“TOP”,键入B表示“BOT”。我该怎么做?我试图进去

define t alias top
在命令行中,但它不起作用:如果使用快捷方式,我会出现“command TOP NOT FOUND”


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

顶部和底部是ISPF命令表中的命令。它们不是编辑命令。它们是UP MAX和DOWN MAX的别名。ISPF命令的长度必须至少为2字节,因此不能在命令表中使用1字节字符为UP MAX创建新别名。 您可以定义一个名为T的编辑宏

/* REXX */
address ISREDIT "MACRO"
address ISREDIT "LOCATE 0"
exit(0)
B对于底部可能是

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

注意,B会把你放在最后一行,而不是像BOTTOM那样放在最后一整页。对于顶部和底部,我个人只需在命令行上使用带M的PF7或PF8来执行最大滚动。它只有1个字符带有PFKEY,而不是enter键。

一个灵活的解决方案是创建一个具有双重功能的初始编辑宏。在第一次作为初始编辑宏调用时,它将诸如
T
B
等命令定义为自身的别名。然后,这些命令使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)

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

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

  • 在初始编辑宏字段中的名称前面加一个感叹号
    以便ISPF知道将其作为程序而不是脚本调用(这意味着名称最多7个字符)
  • 在执行
    选择之前,删除前面的感叹号
    
  • 并添加
    “DEFINE MYMACRO MACRO PGM”
    作为第一次调用逻辑的第一行,以便ISPF知道它是一个程序,而不是一个脚本
在这种情况下,当作为初始编辑宏执行时,
ZEDTMCMD
将以感叹号开头

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


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

真是巧合。昨天我正在处理一个初始的编辑宏(虽然是一个程序而不是脚本,但概念是一样的)。谢谢你详细的回答。不幸的是,我似乎不能用SYSEXEC或SYSPROC编写,所以我假设这里没有可用的解决方案……您应该能够使用
ALTLIB
;每次登录时都必须这样做,但除了指向SYSUPROC和SYSUEXEC之外,还可以指向自己的库,例如,
ALTLIB-ACT-USER(*)DATASET(dsn)
。我只是在上面稍微提到了一下,但是如果你让我知道你可以发布
ALTLIB
,我会把它添加到答案中
ALTLIB
是有文档记录的,关于在ISPF下使用
ALTLIB
有很好的讨论。如果您有一个在登录时运行的exec,您可以向它添加
ALTLIB
。我自己也尝试过使用ALTLIB,但没有实现。。。您能指出正确的编写方法吗?请使用有关引号和高级限定符的TSO规则,尝试
ALTLIB-ACT-APPLICATION(EXEC)数据集名称
,其中name是您的REXX数据集的名称。如果您在ISPF中,请以
TSO
作为前缀。在具有多个屏幕的ISPF中,
ALTLIB
仅适用于当前屏幕。它不适用于我。我使用ALTLIB可以在Edit中使用宏。可以,但是宏没有做任何事情。似乎当INVOKE_CMD==“MYMACRO”不起作用时。我不明白为什么。。。