Pada tingkat paling dasar, sudah ada asimetri antara pencarian dan penggantian bagian :substitute
karena yang pertama adalah ekspresi reguler dan yang terakhir adalah teks, dengan urutan pelarian tambahan khusus . Ini hanya disorot oleh intuisi yang Anda miliki tentang apa \n
artinya.
Misalnya, pertimbangkan bahwa \n
dalam pencarian tidak cocok dengan literal \n
. Cocok dengan akhir baris (EOL) urut byte, yang mungkin \r
, \r\n
atau hanya \n
tergantung pada 'fileformat'
buffer.
Sejauh mengapa \r
digunakan untuk berarti "memasukkan EOL", ada beberapa sejarah di balik itu. Vi tidak punya cara untuk menangani byte NUL dalam file. Vim meningkatkannya dengan mengganti byte NUL dengan byte NL secara internal (karena string C dibatasi NUL).
Detail implementasi ini bocor ke dalam perilaku :substitute
sejak \n
dalam penggantian hanya dimasukkan ke representasi internal dari garis itu, yang digunakan untuk menunjukkan byte NUL. \r
menyisipkan EOL, memecah garis internal menjadi dua. Vim sebenarnya tidak menyimpan byte EOL dalam memori, sebagai gantinya (de) membuat cerita bersambung saat membaca / menulis buffer.
Itu tidak dapat diubah sekarang tanpa melanggar banyak skrip dan memori otot banyak pengguna. Untungnya, ini sudah didokumentasikan :help sub-replace-special
.
\r
ada<CR>
dan tidak\n
ada<LF>
. Itu tidak membahas pertanyaan aktual mengapa\n\r
berperilaku berbeda dalam konteks yang berbeda.