No editor do vim, desejo substituir um caractere de nova linha (\ n) por dois novos caracteres de linha (\ n \ n) usando o modo de comando vim.
Conteúdo do arquivo de entrada:
This is my first line.
This is second line.
Comando que eu tentei:
:%s/\n/\n\n/g
ele substitui a string por caracteres indesejados como
This is my first line.^@^@This is second line.^@^@
Então eu tentei o seguinte comando
:%s/\n/\r\r/g
Está funcionando corretamente. Você pode explicar por que está funcionando bem com o segundo comando?
vim
regular-expression
vi-mode
Raghvendra
fonte
fonte
/
como separador. Isto é mais legível::%s;\n;\n\n;g
\n
, substituir com\r\r
,:% s/\n/\r\r/g
: stackoverflow.com/a/71334/911945Respostas:
Curiosamente,
\n
no vim para substituição não significa nova linha, mas nulo. ASCII nul é^@
( control@).Historicamente, vi substitui
^M
( controlM) como o final da linha, que é a nova linha. O vim adicionou uma extensão\r
(como a linguagem C) para ter o mesmo significado^M
, mas os desenvolvedores optaram por tornar a\n
média nula ao substituir o texto. Isso é inconsistente com o uso nas pesquisas , que encontram uma nova linha.Leitura adicional:
fonte
Tente o seguinte:
%s/$/^V^M/
(onde^V
estáCtrl-V
e^M
estáCtrl-M
- quando você digita,^V
ele imprime um^
caractere e depois retrocede sobre ele e, quando você digita^M
, aparece como^M
... o Ctrl-V é o próximo caractere literal tty padrão - execute o comandostty -a
para mostrar os caracteres especiais do seu tty).fonte
vim
use\n
para representar um caractere nulo\0
na memória, que como ovim
arquivo de manipulação contém caracteres nulos (emboravi
não possa).O uso de
\n
apenas o final da linha correspondente no buffer, não a nova linha na string ao usar na expressão.Consulte : h NL usado para Nulo e : h CR usado para NL para obter mais detalhes.
fonte
Testado com Neovim (
nvim
) eVim
versõesRemova uma nova linha:
Aqui,
\n
corresponde às novas linhas (para inserir uma nova linha, no entanto, use\r
):Adicione uma nova linha:
Não:
^@
é uma marca diacrítica para LF (avanço de linha; consulte http://vimhelp.appspot.com/digraph.txt.html#digraphs-default )Sim:
Para responder à pergunta do OP (como substituir um
\n
por dois\n\n
), basta adicionar outro\r
:... ou seja, corresponda à nova linha original (
\n
) e substitua-a por duas novas linhas / retornos de carro (\r\r
).fonte