如何在 Komodo Edit 5 中清理(自动缩进)代码?

如何在 Komodo Edit 5 中清理(自动缩进)代码?

html.erb在 Komodo Edit 5 中有一个 Rails 文件,并且缩进有点疯狂。

是否有插件或函数可以自动缩进我的代码以使其更容易阅读?

答案1

我使用这个稍微修改过的其他已发布代码的版本。一段时间以来,各种版本一直在 Komodo 论坛上流传。我已经更新了 Komodo Edit 7.0 和 6.X 的宏,它通常运行良好。我更改了一些 tidy 和 csstidy 选项,添加了 XML 支持,并修改了未定义语法警报。我还必须创建一个非常丑陋的临时解决方案才能使 astyle 正常工作,因为 astyle 不接受标准输入。此时整个宏需要完全重做,因为它的局限性已经变得显而易见。

至于 Ruby 支持,请查看美化,我终于集成了对 Ruby 的支持,您必须在 PATH 中安装 rbeautify。我必须警告您,我没有安装 Ruby,因此无法进行全面测试。我还应该提到我的 JS 很糟糕,但我确实验证了我能验证的内容,并且宏有效。这应该最终回答了这个问题,也许是时候接受我的答案了。

格式语法.js

komodo.assertMacroVersion(3);
if (komodo.view.scintilla) {
    komodo.view.scintilla.focus();
} // bug 67103
var koDoc = (komodo.koDoc === undefined ? komodo.document : komodo.koDoc);
var formatter;
var language = koDoc.language;
var cannot_tidy_selection = false;

switch (language) {
case 'C#':
    cannot_tidy_selection = true;
    formatter = 'astyle --style=ansi --mode=cs --convert-tabs --indent=spaces=4 %F > /dev/null 2>&1; cat %F';
    break;
case 'C++':
    cannot_tidy_selection = true;
    formatter = 'astyle --style=linux --mode=c --convert-tabs --indent=spaces=4 %F > /dev/null 2>&1; cat %F';
    break;
case 'CSS':
    formatter = 'csstidy - --preserve_css=true --lowercase_s=true --case_properties=true --sort_properties=true --remove_bslash=false --silent=true --template=medium';
    break;
case 'HTML':
    cannot_tidy_selection = true;
    formatter = 'tidy -q -asxhtml -i -b -c -w 120 --show-warnings no --show-errors 0 --tidy-mark no --css-prefix block --drop-proprietary-attributes yes --anchor-as-name no --enclose-text yes';
    break;
case 'Java':
    cannot_tidy_selection = true;
    formatter = 'astyle --style=java --mode=java --convert-tabs --indent=spaces=4 %F > /dev/null 2>&1; cat %F';
    break;
case 'Perl':
    formatter = 'perltidy';
    break;
case 'PHP':
    formatter = 'php_beautifier -s4 -l"Pear()"';
    break;
case 'Ruby':
    formatter = 'rbeautify.rb -';
    break;
case 'XSLT':
    cannot_tidy_selection = true;
    formatter = 'tidy -q -xml -i -w 120 --show-warnings no --show-errors 0 --tidy-mark no';
    break;
case 'XML':
    cannot_tidy_selection = true;
    formatter = 'xmllint --format --recover -';
    break;
default:
    alert("Syntax Undefined, Add Case to Macro " + language);
    return null;
}

// Save Curser Position
var currentPos = komodo.editor.currentPos;
try {
    // Save the file, Check Changes with "File -> Show Unsaved Changes"
    //komodo.doCommand('cmd_save');
    // Group operations in a single undo
    komodo.editor.beginUndoAction();
    // Select Buffer, pipe it into formatter.
    var text_not_selected = cannot_tidy_selection || komodo.editor.selText == "";
    if (text_not_selected) {
        komodo.doCommand('cmd_selectAll');
    }
    Run_RunEncodedCommand(window, formatter + " {'insertOutput': True, 'operateOnSelection': True}");
    if (text_not_selected) {
        komodo.editor.gotoPos(currentPos);
    }
    // Restore Cursor Position
    komodo.editor.gotoPos(currentPos);
    // Clean Potential EOL Mismatches
    komodo.doCommand('cmd_cleanLineEndings');
}
catch (e) {
    alert(e);
}
finally {
    // End Undo Action to Avoid Edit Buffer Corruption
    // komodo.editor.endUndoAction();
    return true;
}

答案2

不是直接的。然而,“运行命令“系统(可能还有宏的使用)可用于帮助运行外部脚本,该脚本将处理当前缓冲区的内容。因此,如果您有一个可以执行良好 .html.erb 格式的脚本,那么您应该能够集成它。

补充:Komodo IDE(Komodo Edit 的商业版本)有一个将代码格式化程序集成到 Komodo 的框架。它附带一个“HTML Tidy”格式化程序,可以很好地完成 .html.erb 格式化。

答案3

要根据你的喜好重新格式化代码,请尝试阿斯泰尔

您可能能够找到它作为一个包,例如 ap

答案4

找到这个格式化脚本(宏)并使用最新的 Komodo Edit (v6.1.0) 将其改编为个人使用。它运行良好(假设您的系统上有 HTML Tidy),我包含了评论者提供的 JavaScript 格式化代码,但我认为它可能只适用于 Komodo IDE。这对我的目的来说并不重要。也许有人可以找到一种通用的改进方法(使用类似 html tidy 的东西)。

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

var formatter;
var language = komodo.document.language;
switch (language) {
    case 'Perl':
        formatter = 'perltidy -i=2 -pt=2 -l=0';
        break;
    case 'XML':
    case 'XUL':
    case 'XLST':
        formatter = 'tidy -q -xml -i -w 80';
        break;
    case 'HTML':
        formatter = 'tidy -q -asxhtml -i -w 120';
        break;
  //case 'JavaScript':
  //    ko.views.manager.currentView.scimoz.selectAll();
  //    ko.views.manager.currentView.scimoz.replaceSel(js_beautify(ko.views.manager.currentView.scimoz.text, {indent_size: 2}));
  //    return null;
  default:
        alert("I don't know how to tidy " + language);
        return null;
}

//save current cursor position
var currentPos = komodo.editor.currentPos;

try {
    // Save the file.  After the operation you can check what changes where made by
    // File -> Show Unsaved Changes
    komodo.doCommand('cmd_save');

    // Group operations into a single undo
    komodo.editor.beginUndoAction();

    // Select entire buffer & pipe it into formatter.
    komodo.doCommand('cmd_selectAll');
    Run_RunEncodedCommand(window, formatter + " {'insertOutput': True, 'operateOnSelection': True}");

     // Restore cursor.  It will be close to the where it started depending on how the text was modified.
     komodo.editor.gotoPos(currentPos);

    // On windows, when the output of a command is inserted into an edit buffer it has unix line ends.
    komodo.doCommand('cmd_cleanLineEndings');
}
catch (e) {
    alert(e);
}
finally {
    // Must end undo action or may corrupt edit buffer
    komodo.editor.endUndoAction();
}

相关内容