Macros 如何在编辑中更改主命令
我想在ISPF编辑中添加一些快捷方式 例如,我想键入T表示“TOP”,键入B表示“BOT”。我该怎么做?我试图进去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
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个字符)李> - 在执行
选择之前,删除前面的感叹号李>
- 并添加
作为第一次调用逻辑的第一行,以便ISPF知道它是一个程序,而不是一个脚本“DEFINE MYMACRO MACRO PGM”
- 并添加
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”不起作用时。我不明白为什么。。。