Как убрать табуляцию всего документа в textarea CodeMirror

Со стандартными табуляциями - https://i.stack.imgur.com/ig1IV.png
Результат - https://i.stack.imgur.com/rAXT0.png

Screenshot_1

Я не могу оставить ОСНОВНОЙ код без правильной табуляции.

В codemirror.css

white-space: nowrap;

Удаляет всю табуляцию.

Мне нужно, чтобы отображалась табуляция ТОЛЬКО блока textarea.
Как это реализовать с помощью JS?

Не совсем понятен вопрос.

Отступы в codemirror будут такими же какие они в коде между <textarea>. Я сталкивался с такой ситуацией, просто форматировал код внутри <textarea> по начале строки а не по уровню отступа <textaea>.

Чтобы получить код в codemirror отформатированный так:

export class OverlaysModule {
	constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) {
		this.languageHelper.language.subscribe((languageKey: string) => {
			if (languageKey) {
				this.languageService.changeLanguage(languageKey);
			}
		});
	}
}

я выравнивал его так:

<div>
	<div class="another">
		<textarea>
export class OverlaysModule {
	constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) {
		this.languageHelper.language.subscribe((languageKey: string) => {
			if (languageKey) {
				this.languageService.changeLanguage(languageKey);
			}
		});
	}
}
		</textarea>
	</div>
</div>

Мне нужно, чтобы была табуляция только блока textarea, а не всего документа

Если у тебя гарантируется что весь код внутри текстареи будет отформатирован одинаково (без смеси табов и пробелов) то алгоритм решения такой:

  1. Взять текст из textarea.
  2. Разбить по строкам.
  3. Взять количество табуляций в первой строке.
  4. Для всех строк убрать это же количество табуляций.
  5. Соединить все строки, вставить в textarea.
  6. Илициализировать 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
1 лайк

Спасибо за развернутый ответ!