Сталкивался с этим.
Проблема вот в чем.
Вам нужно разделить понятие выводимого текста и редактируемого текста.
То есть вот тут:

Код AS1/AS2:
slv.onData = function(src:String) {
if (src != undefined) {
txt.text = src.toString().split('\r').join('');
}
}
закидывайте текст одновременно и в поле для отображение и в строковую переменную, которая уже и будет редактироваться:

Код AS1/AS2:
slv.onData = function(src:String) {
if (src != undefined) {
txtSrc = src;
txt.text = src.toString().split('\r').join('');
}
}
Дальнейшая работа по редактированию производится с txtSrc!

Код AS1/AS2:
txtSrc = function edit (txtSrc)
Здесь function edit - это неизвестный мне ваш алгоритм редактирования, мне для объяснения она не важна.
Но когда либо результаты работы по редактированию нужно вывести в текстовое поле, после события, означающего окончание редактирования (т.е. внутри function edit, в конце) используете

Код AS1/AS2:
txt.text = txtSrc.toString().split('\r').join('');
При сохранении ни в коем случае также нельзя теперь брать данные из текстового поля, берите тоже из

Код AS1/AS2:
sender.vess = txtSrc;
Что все это означает? Это означает, что структура исходного файла в части, касающейся "переносов" строк останется без изменений.
А в тестовое поле для обозрение польователем выводится строка, уже обработанная сплит-джойном.