Dalam editor vim, saya ingin mengganti karakter baris baru (\ n) dengan dua karakter baris baru (\ n \ n) menggunakan mode perintah vim.
Masukkan konten file:
This is my first line.
This is second line.
Perintah yang saya coba:
:%s/\n/\n\n/g
itu menggantikan string dengan karakter yang tidak diinginkan sebagai
This is my first line.^@^@This is second line.^@^@
Kemudian saya mencoba perintah berikut
:%s/\n/\r\r/g
Ini berfungsi dengan baik. Bisakah Anda menjelaskan mengapa itu berfungsi dengan baik dengan perintah kedua?
vim
regular-expression
vi-mode
Raghvendra
sumber
sumber
/
sebagai pemisah. Ini lebih mudah dibaca::%s;\n;\n\n;g
\n
, ganti dengan\r\r
,:% s/\n/\r\r/g
: stackoverflow.com/a/71334/911945Jawaban:
Anehnya,
\n
dalam vim untuk penggantian tidak berarti baris baru, tetapi nol. Nomor ASCII adalah^@
( control@).Secara historis, vi menggantikan
^M
( controlM) sebagai akhiran baris, yang merupakan baris baru. vim menambahkan ekstensi\r
(seperti bahasa C) yang berarti sama dengan^M
, tetapi pengembang memilih untuk membuat\n
nol berarti ketika mengganti teks. Ini tidak konsisten dengan penggunaannya dalam pencarian , yang menemukan baris baru.Bacaan lebih lanjut:
sumber
Coba ini:
%s/$/^V^M/
(di mana^V
adaCtrl-V
dan^M
adalahCtrl-M
- ketika Anda mengetiknya^V
akan mencetak^
char kemudian mundur ruang di atasnya dan kemudian ketika Anda mengetiknya^M
akan muncul sebagai^M
... Ctrl-V adalah karakter standar tty literal berikutnya - jalankan perintahstty -a
untuk tunjukkan karakter spesial tty Anda).sumber
vim
gunakan\n
untuk mewakili karakter null\0
dalam memori, yang bagaimanavim
menangani file berisi karakter null (sementaravi
tidak bisa).Penggunaan
\n
hanya cocokkan ujung garis dalam buffer, bukan baris baru di string saat menggunakan dalam ekspresi.Lihat : h NL-used-for-Null dan : h CR-used-for-NL untuk detail lebih lanjut.
sumber
Diuji dengan Neovim (
nvim
) danVim
versiHapus baris baru:
Di sini,
\n
cocok dengan baris baru (untuk memasukkan baris baru, gunakan\r
):Tambahkan baris baru:
Nggak:
^@
adalah tanda diakritik untuk LF (umpan baris; lihat http://vimhelp.appspot.com/digraph.txt.html#digraphs-default )Iya nih:
Untuk menjawab pertanyaan OP (bagaimana cara mengganti satu
\n
dengan dua,\n\n
), cukup tambahkan yang lain\r
:... yaitu, cocokkan dengan baris baru asli (
\n
), dan ganti dengan dua baris baru / carriage return (\r\r
).sumber