it-swarm-pt.tech

Por que é uma nova linha para o Vim?

Da pergunta Como substituir um caractere por uma nova linha no Vim?. Você tem que usar ao substituir o texto para uma nova linha, como este

:%s/%/\r/g

Mas ao substituir o final das linhas e novas linhas para um personagem, você pode fazer como:

:%s/\n/%/g 

Que seção do manual documenta esses comportamentos e qual é o raciocínio por trás deles?

241
Vinko Vrsalovic

De documentos do vim em padrões :

\r corresponde a <CR>

\n corresponde a um fim de linha - Ao corresponder em uma string em vez de texto em buffer, um caractere de nova linha literal é correspondido.

152
pjz

De http://vim.wikia.com/wiki/Search_and_replace :

ao pesquisar

...

\n é nova linha, \r é CR (carriage return = Ctrl-M = ^M)

ao substituir

...

\r é nova linha, \n é um byte nulo (0x00).

186
Limited Atonement

Outro aspecto é que \0, que é tradicionalmente NULL, é usado em s//\0/ para significar "o padrão inteiro". (Que, a propósito, é redundante e mais longo que &).

  • Então você não pode usar \0 para significar NULL, então você usa \n
  • Então você não pode usar \n para significar \n, então você usa \r.
  • Então você não pode usar \r para significar \r, mas eu não sei quem gostaria de adicionar esse caractere de propósito.

—☈

100
rking

:help NL-used-for-Nul

Detalhe técnico:

<Nul> caracteres no arquivo são armazenados como <NL> na memória. Na exibição, eles são mostrados como "^@". A tradução é feita ao ler e gravar arquivos. Para combinar um <Nul> com um padrão de pesquisa, basta digitar CTRL - @ ou " CTRL-V 000". Isso é provavelmente o que você espera. Internamente, o caractere é substituído por <NL> no padrão de pesquisa. O que é incomum é que digitar CTRL-VCTRL-J também insere um <NL>, portanto, também procura um <Nul> no arquivo. {Vi não consegue lidar com <Nul> caracteres no arquivo em todos}


47
Aristotle Pagaltzis

Primeiro de tudo, abra :h :s para ver a seção "4.2 Substituto" da documentação em "Change". Veja o que o comando aceita:

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

Observe a descrição sobre pattern e string

Para o {pattern} veja |pattern| .
{string} pode ser uma string literal, ou algo
especial; veja |sub-replace-special| .

Então agora você sabe que o padrão de busca e os padrões de substituição seguem regras diferentes. Se você seguir o link para |pattern|, levará você para a seção que explica todos os padrões regulares usados ​​no Vim.

Enquanto isso, |sub-replace-special| leva você à subseção "4.2 Substituto", que contém os padrões para substituição, entre os quais \r para quebra de linha/divisão.

(O atalho para esta parte do manual é :h :s% )

10
syockit