如何更改编辑中的主要命令
How to change primary command in Edit
我想在 ISPF Edit 中添加一些快捷方式。
例如,我想为 "TOP" 键入 T,为 "BOT" 键入 B。我怎样才能做到这一点?我试着输入
define t alias top
在命令行中,但它不起作用:如果我使用快捷方式,我有 "COMMAND TOP NOT FOUND"。
我怎样才能做到这一点?以及如何在每次打开编辑时都使用此快捷方式?
TOP和BOTTOM是ISPF命令中的命令table。它们不是 EDIT 命令。它们是 UP MAX 和 DOWN MAX 的别名。 ISPF 命令的长度必须至少为 2 个字节,因此您不能使用 1 个字节的字符在命令 table 中为 UP MAX 创建新的 ALIAS。
您可以定义一个名为 T 的编辑宏。该宏可以执行类似
的操作
/* REXX */
address ISREDIT "MACRO"
address ISREDIT "LOCATE 0"
exit(0)
BOTTOM 的 B 可以是
/* REXX */
address ISREDIT "MACRO"
address ISREDIT "LOCATE .ZLAST"
exit(0)
请注意,B 会将您放在最后一行,而不是像 BOTTOM 实际上那样放在最后一页。对于 TOP 和 BOTTOM,我个人只会在命令行上使用 PF7 或 PF8 和 M 来进行最大滚动。它只有 1 个带有 PFKEY 的字符,而不是回车键。
一个灵活的解决方案是创建一个执行双重任务的初始编辑宏。在作为初始编辑宏首次调用时,它将 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)。
请注意,您的宏需要在标准查找中(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 示例。 (没有汇编器,但创建一个是微不足道的练习。)
我想在 ISPF Edit 中添加一些快捷方式。
例如,我想为 "TOP" 键入 T,为 "BOT" 键入 B。我怎样才能做到这一点?我试着输入
define t alias top
在命令行中,但它不起作用:如果我使用快捷方式,我有 "COMMAND TOP NOT FOUND"。
我怎样才能做到这一点?以及如何在每次打开编辑时都使用此快捷方式?
TOP和BOTTOM是ISPF命令中的命令table。它们不是 EDIT 命令。它们是 UP MAX 和 DOWN MAX 的别名。 ISPF 命令的长度必须至少为 2 个字节,因此您不能使用 1 个字节的字符在命令 table 中为 UP MAX 创建新的 ALIAS。 您可以定义一个名为 T 的编辑宏。该宏可以执行类似
的操作/* REXX */
address ISREDIT "MACRO"
address ISREDIT "LOCATE 0"
exit(0)
BOTTOM 的 B 可以是
/* REXX */
address ISREDIT "MACRO"
address ISREDIT "LOCATE .ZLAST"
exit(0)
请注意,B 会将您放在最后一行,而不是像 BOTTOM 实际上那样放在最后一页。对于 TOP 和 BOTTOM,我个人只会在命令行上使用 PF7 或 PF8 和 M 来进行最大滚动。它只有 1 个带有 PFKEY 的字符,而不是回车键。
一个灵活的解决方案是创建一个执行双重任务的初始编辑宏。在作为初始编辑宏首次调用时,它将 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)。
请注意,您的宏需要在标准查找中(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 示例。 (没有汇编器,但创建一个是微不足道的练习。)