你如何在Komodo Edit中重复一个宏?

时间:2013-10-18 20:31:17

标签: komodoedit

在许多其他编辑器中,当您录制宏时,您可以重复运行该宏。但是,在Komodo Edit中,没有选项可以这样做。在Komodo Edit中,如何重复宏X次,或者将宏重复到文件末尾?

NotePad++ lets you repeat a macro

NotePad ++允许您重复宏

Komodo Edit doesn't have that option in the menu

Komodo Edit菜单中没有该选项

3 个答案:

答案 0 :(得分:2)

您可以使用“代码>重复下一击键N次”菜单项重复宏X次。在文件结束之前没有选项可以重复当前的宏,但是已经为此记录了一个增强请求(我刚刚碰到并希望在下一个主要版本中看到):http://bugs.activestate.com/show_bug.cgi?id=76022

答案 1 :(得分:1)

以下是如何在宏中执行此操作(我称之为“将当前宏运行到文件末尾”):

var currentMacro = ko.macros.recorder.currentMacro;
if (!currentMacro || !currentMacro.length) {
    alert("There is no current macro to execute");
    return;
}
var view = ko.views.manager.currentView;
var scimoz = view.scimoz;
var startingLine = scimoz.lineFromPosition(scimoz.currentPos);
var i = 1;
scimoz.beginUndoAction();
try {
    while (true) {
        ko.macros.recorder.executeLastMacro();
        let newPos = scimoz.currentPos;
        let newLine = scimoz.lineFromPosition(newPos);
        if (newLine <= startingLine) {
            newLine = startingLine + 1;
        }
        startingLine = newLine;
        if (startingLine >= scimoz.lineCount) {
            break;
        }
        scimoz.gotoPos(scimoz.positionFromLine(startingLine));
    }
} finally {
    scimoz.endUndoAction();
}

您也可以让宏调用其他宏,但这有点复杂。

答案 2 :(得分:0)

首先记录一个宏。 (单一动作)。
编辑宏的源代码(使用JavaScript或Python) 示例:文本文件
ABC
ABC
ABC
ABC
ABC
ABC
ABC
ABC
abc

录制的宏代码:

komodo.assertMacroVersion(3);
if (komodo.view) {
    komodo.view.setFocus();
}
    ko.commands.doCommand('cmd_home')
    ko.commands.doCommand('cmd_right')
    ko.commands.doCommand('cmd_right')
    komodo.view.selection = ' - ';
    ko.commands.doCommand('cmd_lineNext')
    ko.commands.doCommand('cmd_home')  

现在我们可以循环(在这种情况下为9次)或运行到文件末尾,如Eric所示,编辑代码,如下所示:

komodo.assertMacroVersion(3);
if (komodo.view) {
    komodo.view.setFocus();
}

for (i = 0; i < 9; i++) {
    ko.commands.doCommand('cmd_home')
    ko.commands.doCommand('cmd_right')
    ko.commands.doCommand('cmd_right')
    komodo.view.selection = ' - ';
    ko.commands.doCommand('cmd_lineNext')
    ko.commands.doCommand('cmd_home')    
}

供参考http://docs.activestate.com/komodo/4.4/macroapi.html