Dans vim, pour remplacer un caractère de nouvelle ligne, vous devez rechercher n mais pour le remplacer par un caractère de nouvelle ligne, c'est r
C'est à dire
:s/\n/\r/
Rien ne se passe. En théorie, je peux remplacer tous les n par des r, puis effectuer une nouvelle recherche
/\r
Toujours rien, seulement
/\n
Cela a de la valeur, veuillez trouver le principe~~~
J'ai déjà écrit une note, mais elle n'a pas été rendue publique. Je la publie ici pour référence.
(Le texte original est au format markdown, ce qui n'est pas entièrement pris en charge par SF, mais cela n'affecte pas la lecture)
Note de texteProblème de saut de ligne dans Vim
===============
Si vous souhaitez utiliser
s/n/n/g
dans Vim, tous les sauts de ligne du fichier seront remplacés par des caractères^@
. code>s /n/n/g ne devrait avoir aucun effet, mais dans Vim,n
est géré légèrement différemment.s/n/n/g
会导致文件的换行全部被替换成^@
字符,按照通常的理解,s/n/n/g
不应该有任何的效果,但在 Vim 中,n
的处理略有不同。:help NL-used-for-Nul
从这段说明可以了解到在 Vim 中,空字符
<Nul>
(ASCII 0)在内存中是作为<NL>
(newline) 进行处理的。'n' 在搜索表达式中是在匹配一个字符串,所以字面意义的 'new line' 字符串会被匹配到,而不是
: aide NL-utilisé-pour-Nul🎜 🎜À partir de cette description, vous pouvez comprendre que dans Vim, le caractère nul<Nul>
字符。在替换表达式中 'n' 会被解释为<NL>
,于是在内部,<Nul>
会被输入,所以在替换的表达式中 'n' 不再表示 'new line' 或者 'end-of-line'。同样,在搜索表达式中,输入 "CTRL-@" 或者 "CTRL-V 000" 表示<Nul>
字符,但是在内部,他们还是都被替换为<NL>
进行处理的,这也就是为什么直接键入 CTRL-V CTRL-J(输入的是<NL>
<Nul>
(ASCII 0) est traité en mémoire comme<NL>
(nouvelle ligne) de . 🎜 🎜'n' correspond à une chaîne dans l'expression de recherche, donc la chaîne littérale 'nouvelle ligne' sera mise en correspondance, et non le caractère<Nul>
. 'n' dans l'expression de remplacement sera interprété comme<NL>
, donc en interne,<Nul>
sera saisi, donc dans l'expression de remplacement 'n' non plus signifie « nouvelle ligne » ou « fin de ligne ». De même, dans l'expression de recherche, la saisie de "CTRL-@" ou "CTRL-V 000" représente le caractère<Nul>
, mais en interne, ils sont toujours remplacés par<NL>
est traité, c'est pourquoi taper directement CTRL-V CTRL-J (l'entrée est le caractère<NL>
lui-même) a le même effet. 🎜Je pense que la raison de la confusion peut être que Vi ne prend pas en charge le caractère
<Nul>
et que Vim a été développé à partir de Vi. L'auteur a peut-être utilisé< directement pour plus de commodité. NL>
est utilisé pour représenter<Nul>
, qui est la signification littérale de « NL-used-for-Nul ». Dans le même temps, la fonction originale de<NL>
est remplacée par<CR>
, qui est la signification littérale de « CR-used-for-NL ». .<Nul>
字符,而 Vim 由 Vi 发展而来,作者可能为了方便,直接使用了<NL>
用来表示<Nul>
,这也就是 'NL-used-for-Nul' 的字面意思。与此同时,<NL>
原本的作用则使用<CR>
来替代,这也就是 'CR-used-for-NL' 的字面意思。:help CR-used-for-NL
那么,我们如何在替换表达式里表示
: aide CR-utilisé-pour-NL<NL>
呢?答案就是<CR>
,可以使用 CRTL-V CRTL-M(输入的是<CR>
字符本身) 或者 'r',Vim 并不会在文件中直接输入<CR>
字符,它会根据当前 ‘fileformat’ 的设置来决定使用<CR>
(Mac),<NL>
(*nix) 还是<CR><NL>
<NL>
dans l'expression de remplacement ? La réponse est<CR>
, vous pouvez utiliser CRTL-V CRTL-M (l'entrée est le caractère<CR>
lui-même) ou 'r', Vim le fera ne saisissez pas les caractères<CR>
directement dans le fichier, et il décidera d'utiliser<CR>
(Mac),<NL> en fonction de la configuration actuelle. paramètre 'fileformat' ;
(*nix) ou<CR><NL>
(dos).