Похоже, вы спрашиваете две вещи. Одна проблема - \r
против \n
, которую освещали другие.
Другая проблема - \n
справа от замены. Если вы посмотрите на :h s/\n
, это говорит о том, что \n
в заменяющей части замещения вставляет <NUL>
/ <NL>
, а НЕ перевод строки.
Если вы выполните :%s/\n/\n/
и сохраните и откроете файл в шестнадцатеричном редакторе, все символы ^@
будут ASCII 0 (NUL-символы). Почему разработчики Vim используют \n
слева для конца строки и \n
справа для NUL, мне не понятно. Но это специфическое поведение не имеет ничего общего с Windows против Unix.