Vim - как добиться правильного отступа, когда код имеет круглые скобки в литеральной строке

У меня есть следующий код javascript:

function abc(alpha) {
    if(alpha == undefined) { alpha='0.5' };
    var color='rgba(';
    for(var ii =0; ii < 3; ii++) {
       color += Math.round(Math.random()*255) + ",";
    }
    color += alpha;
    color += ')';
    return color;
}

Vim делает отступ над кодом следующим образом:

function abc(alpha) {
        if(alpha == undefined) { alpha='0.5' };
        var color='rgba(';
                        for(var ii =0; ii < 3; ii++) {
                        color += Math.round(Math.random()*255) + ",";
                        }
                        color += alpha;
                        color += ')';
                        return color;
                        }

Такое поведение происходит во многих языках программирования, когда мы имеем '(' или '{' как часть литеральной строки. Остальная часть файла также получает неправильный отступ. Как добиться правильного отступа в таких случаях?


person workwise    schedule 18.03.2015    source источник


Ответы (2)


Использование двойной кавычки, кажется, работает:

var color="rgba(";
person tivn    schedule 18.03.2015
comment
Это странно, если это то, что требует vim - по соглашению я использую одинарные кавычки для строк JS, поскольку это позволяет правильно использовать двойные кавычки для атрибутов HTML, встроенных в эти строки. - person Alnitak; 18.03.2015
comment
Я предполагаю, что средство форматирования по умолчанию для javascript просто обрабатывает ваш текст как исходный код C (см. $VIMRUNTIME/indent/javascript.vim, также stackoverflow.com/questions/1652765/ ответ @jamessan). Как вы знаете, строка C использует только двойные кавычки. Возможно, это причина того, что одинарная кавычка не работает. - person tivn; 18.03.2015

Попробуйте этот плагин:

Индентор JavaScript

person qiubix    schedule 18.03.2015