Смещение позиции курсора Codemirror

Я использую зеркало кода для отображения, выделения и редактирования xml на веб-странице, но у меня проблема с позицией курсора, смещенной относительно позиции вставки, так что если вы удалите символ из того места, где находится мигающий курсор, символ перед тот, который вы ожидаете, будет удален. Я предполагаю, что это конфликт css с моей текущей страницей, потому что он хорошо работает за пределами моей страницы, но нигде не могу найти конфликт. У кого-нибудь были подобные проблемы или знает что делать?


person chrisp_68    schedule 22.10.2011    source источник


Ответы (6)


Дальнейшее расследование показывает, что на странице было задано заполнение для всех div, встроенных в наборы полей, что и было причиной проблемы.

person chrisp_68    schedule 22.10.2011

Следующие строки исправили проблему для меня:

.CodeMirror pre {
    white-space: pre-wrap;
    word-break: break-all;
    word-wrap: break-word;
}

Я использую lineWrapping: true в своей конфигурации CodeMirror. Установка этого значения на false также работает.

person rebagliatte    schedule 14.03.2013

Будьте осторожны при увеличении CSS с помощью CodeMirror.

Я использовал увеличение тела и удаление, которое у меня сработало.

person kanarifugl    schedule 20.03.2014

Эта проблема часто возникала у меня после изменения размера родительского контейнера. Что помогло:

editor.setSize("100%", "100%");
editor.focus();

в конце обработчика события изменения размера.

person Lumic    schedule 05.01.2020

Иногда, также, ниже курсивных или жирных строк (в зависимости от вашей ОС и браузера) курсор имеет неправильное вертикальное положение до 90% строки. Это легко исправить, установив, например,

.CodeMirror pre {
    height:15px;
}

в любом месте ваших таблиц стилей CSS. Это также дает вам возможность контролировать высоту строки, если вы обнаружите, что строки кода расположены слишком близко друг к другу.

person Alex Pakka    schedule 20.11.2011

По какой-то причине пробелы при включенном отступе некорректно обрабатывались при вычислении размера строки. Замена функции measureLine следующей в codemirror.js дала мне трюк:

function measureLine(cm, line) {
    // First look in the cache
    var cached = findCachedMeasurement(cm, line);
    if (cached) return cached.measure;

    // Failing that, recompute and store result in cache
    var measure = measureLineInner(cm, line);

    var origL;
    var origR;
    var lastR ="";
    for (var mes in measure) {
        origL = measure[mes].left;
        origR = measure[mes].right;

        if (lastR != "") {
            measure[mes].left = lastR;
            measure[mes].right = lastR + (origR - origL);
        }

        if (origL == origR) {
            measure[mes].right = measure[mes].right + 8;
        }
        lastR = measure[mes].right;
    }

    var cache = cm.display.measureLineCache;
    var memo = {
        text: line.text, 
        width: cm.display.scroller.clientWidth,
        markedSpans: line.markedSpans,
        measure: measure,
        classes: line.textClass + "|" + line.bgClass + "|" + line.wrapClass
    };

    if (cache.length == 16) cache[++cm.display.measureLineCachePos % 16] = memo;
    else cache.push(memo);
    return measure;
}
person user2755518    schedule 06.09.2013