Text 在VI中编辑多部分case语句

Text 在VI中编辑多部分case语句,text,vi,textblock,Text,Vi,Textblock,因此,我们的报警平台基于SNMP MIB生成专有代码。如果您不熟悉SNMP,请不要担心,这个问题只与SNMP有切身关系。代码最终看起来像这样: case ".1.3.6.1.4.1.5555": ## This is the OID for that specific device type, this switch/case began in the main file. switch ($specific-trap): { case "10": ## The spec

因此,我们的报警平台基于SNMP MIB生成专有代码。如果您不熟悉SNMP,请不要担心,这个问题只与SNMP有切身关系。代码最终看起来像这样:

case ".1.3.6.1.4.1.5555": ## This is the OID for that specific device type, this switch/case began in the main file.
    switch ($specific-trap): {
        case "10": ## The specific alarm
            # Alarm-specific code
            @Identifier = $enterprise + "." + $specific-trap
        case "11": ## A different alarm
            # Alarm-specific code
            @Identifier = $enterprise + "." + $specific-trap
        case "12": ## A different alarm
            # Alarm-specific code
            @Identifier = $enterprise + "." + $specific-trap
        case "20": ## clears specific-trap 10
            # Alarm-specific code
            @Identifier = $enterprise + "." + $specific-trap
        case "21": ## clears 11
            # Alarm-specific code
            @Identifier = $enterprise + "." + $specific-trap
        case "22": ## clears 12
            # Alarm-specific code
            @Identifier = $enterprise + "." + $specific-trap
        default:
            ## what happens if the alarm isn't found
    }
    case "10": ## The specific alarm
        # Alarm-specific code
        @Identifier = $enterprise + ".10-20"
我需要做的是使用报警和清除作为@Identifier(唯一键),以便它们相互覆盖。例如,第一种情况应该是这样的:

case ".1.3.6.1.4.1.5555": ## This is the OID for that specific device type, this switch/case began in the main file.
    switch ($specific-trap): {
        case "10": ## The specific alarm
            # Alarm-specific code
            @Identifier = $enterprise + "." + $specific-trap
        case "11": ## A different alarm
            # Alarm-specific code
            @Identifier = $enterprise + "." + $specific-trap
        case "12": ## A different alarm
            # Alarm-specific code
            @Identifier = $enterprise + "." + $specific-trap
        case "20": ## clears specific-trap 10
            # Alarm-specific code
            @Identifier = $enterprise + "." + $specific-trap
        case "21": ## clears 11
            # Alarm-specific code
            @Identifier = $enterprise + "." + $specific-trap
        case "22": ## clears 12
            # Alarm-specific code
            @Identifier = $enterprise + "." + $specific-trap
        default:
            ## what happens if the alarm isn't found
    }
    case "10": ## The specific alarm
        # Alarm-specific code
        @Identifier = $enterprise + ".10-20"
而“20”的情况将被设置为相同

我通常只是浏览文件并手工编辑这些文件,但是如果有数百个陷阱,这可能会变得很乏味。我错过了一些简单的VI技巧,我可以这样做吗?我所想的一切都不起作用,因为$specific trap值与@Identifier不在同一行


我曾考虑过只编写一个Perl脚本来处理它,但我很懒。我想可能有一些VI魔术可以轻松做到这一点。

我不明白你从哪里得到
10-20
。对于
案例“11”
,数字是多少?11-21。见评论。20清除10,21清除11等等。啊,好的。还有一个问题。所有的
case…:
都是相同的,但正如您所指出的,它们后面的注释是相同的。您添加注释不是为了更清楚地显示此示例吗?程序应该检查每个注释的内容,以了解它是警报还是清除?每个警报都有什么清晰的内容?不,不,这些评论是我一个人写的。报警和清除可以相距任意距离,但它们可以是连续的(“10”表示报警,“11”表示清除),也可以通过增加10的某个幂来分隔,如上面的示例所示。我想我要找的是一个我可以使用的通用程序,因为我需要的字符串的特定陷阱在上面几行,而清除通常遵循一个可预测的模式。