2

У меня есть файл Rails html.erb в Komodo Edit 5, и отступ стал немного диким.

Есть ли плагин или функция, которая автоматически делает отступ для моего кода, чтобы его было легче читать?

4 ответа4

2

Я использую эту слегка отредактированную версию другого размещенного кода. В течение некоторого времени на форумах Komodo ходили разные варианты. Я обновил макрос для Komodo Edit 7.0 и 6.X, это обычно работает достаточно хорошо. Я изменил некоторые параметры tidy и csstidy, добавил поддержку XML и изменил предупреждение о неопределенном синтаксисе. Я также должен был создать очень уродливый ключ, чтобы заставить работать astyle, так как astyle не принимает stdin. На этом этапе весь макрос должен быть полностью переделан, так как его ограничения стали очевидными.

Что касается поддержки Ruby, ознакомьтесь с rbeautify, я наконец-то интегрировал поддержку Ruby, вы должны установить rbeautify в вашем PATH. Я должен предупредить вас, у меня не установлен Ruby, поэтому я не могу полностью протестировать. Я должен также упомянуть, что мой JS ужасен, но я проверил, что смог, и макрос сработал. Это должно наконец ответить на этот вопрос, может быть, пришло время принять мой ответ.

Format_Syntax.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;
}
1

Не напрямую. Тем не менее, система « Выполнить команды » (и, возможно, использование макросов) может использоваться для запуска внешнего сценария, который будет массировать содержимое текущего буфера. Итак, если у вас есть сценарий, который может выполнять хорошее форматирование .html.erb, то вы сможете интегрировать его.

Кроме того: Komodo IDE (коммерческий родственник Komodo Edit) имеет структуру для интеграции средств форматирования кода в Komodo. Он поставляется с форматером "HTML Tidy", который может хорошо выполнять форматирование .html.erb.

1

Чтобы переформатировать код на свой вкус, попробуйте astyle

Вы можете найти это как пакет, например, ap

0

Я нашел этот скрипт форматирования (макрос) и адаптировал его для личного использования с последней версией 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();
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .