Если у тебя гарантируется что весь код внутри текстареи будет отформатирован одинаково (без смеси табов и пробелов) то алгоритм решения такой:
- Взять текст из 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