Отступы в codemirror будут такими же какие они в коде между <textarea>. Я сталкивался с такой ситуацией, просто форматировал код внутри <textarea> по начале строки а не по уровню отступа <textaea>.
Чтобы получить код в codemirror отформатированный так:
Если у тебя гарантируется что весь код внутри текстареи будет отформатирован одинаково (без смеси табов и пробелов) то алгоритм решения такой:
Взять текст из textarea.
Разбить по строкам.
Взять количество табуляций в первой строке.
Для всех строк убрать это же количество табуляций.
Соединить все строки, вставить в textarea.
Илициализировать codemirror.
разбитие на строки-выкусывание выглядит примерно так:
const allStrs = textarea.value.split(/\n/) // разбиваем на строки
const firstStr = allStrs[0] // берем первую
const matchedSpaces = firstStr.match(/^\s+/) // пытаемся найти начальные пробельные символы,
let extraspaces = ''
if (matchedSpaces) { // пробельные символы найдены, заносим их в строку в переменную
extraspaces = matchedSpaces[0]
}
const unindentedLines = allStrs.map(str => str.replace(extraspaces, '')) // во всех строках заменяем пробельные символы на пустую строку. Заменится только 1 и только первое вхождение этих пробельных символов
const res = unindentedLines.join('\n') // собираем обратно строки в одну
//... заносим значение обратно в textarea, инициализируем codemirror