Я использую зеркало кода для отображения, выделения и редактирования xml на веб-странице, но у меня проблема с позицией курсора, смещенной относительно позиции вставки, так что если вы удалите символ из того места, где находится мигающий курсор, символ перед тот, который вы ожидаете, будет удален. Я предполагаю, что это конфликт css с моей текущей страницей, потому что он хорошо работает за пределами моей страницы, но нигде не могу найти конфликт. У кого-нибудь были подобные проблемы или знает что делать?
Смещение позиции курсора Codemirror
Ответы (6)
Дальнейшее расследование показывает, что на странице было задано заполнение для всех div, встроенных в наборы полей, что и было причиной проблемы.
Следующие строки исправили проблему для меня:
.CodeMirror pre {
white-space: pre-wrap;
word-break: break-all;
word-wrap: break-word;
}
Я использую lineWrapping: true
в своей конфигурации CodeMirror. Установка этого значения на false также работает.
Будьте осторожны при увеличении CSS с помощью CodeMirror.
Я использовал увеличение тела и удаление, которое у меня сработало.
Эта проблема часто возникала у меня после изменения размера родительского контейнера. Что помогло:
editor.setSize("100%", "100%");
editor.focus();
в конце обработчика события изменения размера.
Иногда, также, ниже курсивных или жирных строк (в зависимости от вашей ОС и браузера) курсор имеет неправильное вертикальное положение до 90% строки. Это легко исправить, установив, например,
.CodeMirror pre {
height:15px;
}
в любом месте ваших таблиц стилей CSS. Это также дает вам возможность контролировать высоту строки, если вы обнаружите, что строки кода расположены слишком близко друг к другу.
По какой-то причине пробелы при включенном отступе некорректно обрабатывались при вычислении размера строки. Замена функции 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;
}