Rumah > Soal Jawab > teks badan
Dalam vim, untuk menggantikan aksara baris baharu anda perlu mencari n tetapi untuk menggantikannya dengan aksara baris baharu ia ialah r
Maksudnya
:s/\n/\r/
Tiada apa-apa yang berlaku. Secara teorinya, saya boleh menggantikan semua n dengan r dan kemudian mencari semula
/\r
Masih tiada, hanya
/\n
Ia mempunyai nilai, sila cari prinsipnya~~~
我想大声告诉你2017-05-16 16:44:44
Saya menulis nota sebelum ini, tetapi ia tidak didedahkan kepada umum. Saya menyiarkannya di sini untuk rujukan.
(Teks asal adalah dalam format markdown, yang tidak disokong sepenuhnya oleh SF, tetapi ia tidak menjejaskan bacaan)
Teks notaMasalah talian putus dalam Vim
===============
Jika anda ingin menggunakan s/n/n/g
dalam Vim, semua pemisah baris dalam fail akan digantikan dengan aksara ^@
mengikut pemahaman bersama, < code>s /n/n/g seharusnya tidak mempunyai sebarang kesan, tetapi dalam Vim, n
dikendalikan secara berbeza sedikit. s/n/n/g
会导致文件的换行全部被替换成 ^@
字符,按照通常的理解,s/n/n/g
不应该有任何的效果,但在 Vim 中,n
的处理略有不同。
:help NL-used-for-Nul
[<Nul>
](http://vimdoc.sourceforge.net/htmldoc...) characters in the file are stored as [<NL>
](http://vimdoc.sourceforge.net/htmldoc...) in memory. In the display they are shown as "^@
". The translation is done when reading and writing files. To match a [<Nul>
](http://vimdoc.sourceforge.net/htmldoc...) with a search pattern you can just enter [CTRL-@](http://www.vim.org/htmldoc/insert.htm...) or "[CTRL-V](http://www.vim.org/htmldoc/insert.htm...) 000". This is probably just what you expect. Internally the character is replaced with a [<NL>
](http://vimdoc.sourceforge.net/htmldoc...) in the search pattern. What is unusual is that typing [CTRL-V](http://www.vim.org/htmldoc/insert.htm...) [CTRL-J](http://www.vim.org/htmldoc/insert.htm...) also inserts a [<NL>
](http://vimdoc.sourceforge.net/htmldoc...), thus also searches for a [<Nul>
](http://vimdoc.sourceforge.net/htmldoc...) in the file. {Vi cannot handle [<Nul>
](http://vimdoc.sourceforge.net/htmldoc...) characters in the file at all}
从这段说明可以了解到在 Vim 中,空字符 <Nul>
(ASCII 0)在内存中是作为 <NL>
(newline) 进行处理的。
n matches an end-of-line
When matching in a string instead of buffer text a literal newline character is matched.
'n' 在搜索表达式中是在匹配一个字符串,所以字面意义的 'new line' 字符串会被匹配到,而不是 <Nul>
字符。在替换表达式中 'n' 会被解释为 <NL>
,于是在内部,<Nul>
会被输入,所以在替换的表达式中 'n' 不再表示 'new line' 或者 'end-of-line'。同样,在搜索表达式中,输入 "CTRL-@" 或者 "CTRL-V 000" 表示 <Nul>
字符,但是在内部,他们还是都被替换为 <NL>
进行处理的,这也就是为什么直接键入 CTRL-V CTRL-J(输入的是 <NL>
[🎜Daripada penerangan ini, anda boleh memahami bahawa dalam Vim, aksara null<Nul>
](http://vimdoc.sourceforge.net/htmldoc...) aksara dalam fail disimpan sebagai [<NL>
](http://vimdoc.sourceforge.net/htmldoc...) dalam ingatan, ia ditunjukkan sebagai "^@
". Untuk memadankan [<Nul>
](http://vimdoc.sourceforge.net/htmldoc...) dengan corak carian anda boleh masukkan sahaja [CTRL-@](http:// www.vim.org/htmldoc/insert.htm...) atau "[CTRL-V](http://www.vim.org/htmldoc/insert.htm...) 000". anda jangkakan. Secara dalaman watak itu digantikan dengan [<NL>
](http://vimdoc.sourceforge.net/htmldoc...) dalam corak carian yang luar biasa [CTRL-V](http://www.vim.org/htmldoc/insert.htm...) [CTRL-J](http://www.vim.org/htmldoc/insert.htm...) turut memasukkan [<NL>
](http://vimdoc.sourceforge.net/htmldoc...), dengan itu turut mencari [<Nul>
](http://vimdoc.sourceforge.net/htmldoc...) dalam fail {Vi tidak boleh mengendalikan [<Nul>
](http://vimdoc.sourceforge.net/htmldoc ...) aksara dalam fail sama sekali}
<Nul>
(ASCII 0) diproses dalam ingatan sebagai <NL>
(baris baharu) daripada . 🎜
n sepadan dengan hujung baris🎜Apabila memadankan dalam rentetan dan bukannya teks penimbal, aksara baris baharu literal dipadankan.🎜'n' memadankan rentetan dalam ungkapan carian, jadi rentetan 'baris baharu' literal akan dipadankan, bukan aksara
<Nul>
. 'n' dalam ungkapan gantian akan ditafsirkan sebagai <NL>
, jadi secara dalaman, <Nul>
akan dimasukkan, jadi dalam ungkapan gantian 'n' no lebih panjang bermaksud 'baris baharu' atau 'talian hujung'. Begitu juga, dalam ungkapan carian, memasukkan "CTRL-@" atau "CTRL-V 000" mewakili aksara <Nul>
, tetapi secara dalaman, ia masih digantikan dengan <
diproses, itulah sebabnya menaip CTRL-V CTRL-J secara langsung (input ialah aksara <NL>
itu sendiri) mempunyai kesan yang sama. 🎜Saya rasa sebab kekeliruan mungkin kerana Vi tidak menyokong aksara <Nul>
dan Vim telah dibangunkan daripada Vi Pengarang mungkin telah menggunakan < secara langsung untuk kemudahan ; NL>
digunakan untuk mewakili <Nul>
, iaitu maksud literal 'NL-used-for-Nul'. Pada masa yang sama, fungsi asal <NL>
digantikan dengan <CR>
, iaitu makna literal 'CR-used-for-NL' . <Nul>
字符,而 Vim 由 Vi 发展而来,作者可能为了方便,直接使用了 <NL>
用来表示 <Nul>
,这也就是 'NL-used-for-Nul' 的字面意思。与此同时,<NL>
原本的作用则使用 <CR>
来替代,这也就是 'CR-used-for-NL' 的字面意思。
:help CR-used-for-NL
When 'fileformat' is "mac", <NL> characters in the file are stored as <CR> characters internally. In the text they are shown as "^J". Otherwise this works similar to the usage of <NL> for a <Nul>.
When working with expression evaluation, a <NL> character in the pattern matches a <NL> in the string. The use of "n" (backslash n) to match a <NL> doesn't work there, it only works to match text in the buffer.
那么,我们如何在替换表达式里表示 <NL>
呢?答案就是 <CR>
,可以使用 CRTL-V CRTL-M(输入的是 <CR>
字符本身) 或者 'r',Vim 并不会在文件中直接输入 <CR>
字符,它会根据当前 ‘fileformat’ 的设置来决定使用 <CR>
(Mac),<NL>
(*nix) 还是 <CR><NL>
Apabila 'format fail' ialah "mac", <NL> aksara dalam fail disimpan sebagai <CR> dalam teks ia ditunjukkan sebagai "^J". <NL> untuk <Nul>.Jadi, bagaimanakah kita mewakili
Apabila bekerja dengan penilaian ekspresi, aksara <NL> padan dengan <NL> dalam rentetan <NL> tidak berfungsi di sana, ia hanya berfungsi untuk memadankan teks dalam penimbal.
<NL>
dalam ungkapan gantian? Jawapannya ialah <CR>
, anda boleh menggunakan CRTL-V CRTL-M (input ialah aksara <CR>
itu sendiri) atau 'r', Vim akan bukan Masukkan aksara <CR>
terus ke dalam fail, dan ia akan memutuskan untuk menggunakan <CR>
(Mac), <NL> mengikut arus tetapan 'format fail' ;
(*nix) atau <CR><NL>
(dos).