Pergunta

A partir de uma pergunta Como substituir um personagem para uma nova linha no Vim?.Você tem que usar quando a substituição de texto para uma nova linha, como este

:%s/%/\r/g

Mas, quando a substituição de final de linhas e quebras de linha para um personagem, você pode fazê-lo como:

:%s/\n/%/g 

O que a seção do manual, documentos estes comportamentos, e qual é a lógica por trás delas?

Foi útil?

Solução

A partir de vim docs em padrões:

\r jogos <CR>

\n jogos fim-de-linha - Quando a correspondência em uma seqüência de caracteres em vez de buffer de texto literal newline o caráter é correspondido.

Outras dicas

A partir de http://vim.wikia.com/wiki/Search_and_replace :

Quando A Pesquisa

...

\n é newline, \r é CR (cr = Ctrl-M = ^M)

Quando Da Substituição Da

...

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

Outro aspecto é que \0, que tradicionalmente é NULO, é levado em s//\0/ para significar "toda a correspondência por padrão".(Que, por sinal, é redundante, e mais do que, &).

  • Portanto, você não pode usar \0 para dizer NULL, para que você use \n
  • Portanto, você não pode usar \n para dizer \n, para que você use \r.
  • Portanto, você não pode usar \r para dizer \r, mas eu não sei quem gostaria de adicionar que o carácter de propósito.

—☈

:help NL-used-for-Nul

Detalhes técnicos:

<Nul> caracteres no arquivo são armazenados como <NL> na memória.Em exibição eles são mostrados como "^@".A tradução é feita quando a leitura e a escrita ficheiros.Para corresponder a um <Nul> com um padrão de busca você pode apenas entrar CTRL-@ ou "CTRL-V 000".Este é, provavelmente, apenas o que você espera.Internamente, o caractere é substituído por um <NL> no padrão de pesquisa.O que é incomum é que a digitação CTRL-V CTRL-J também insere uma <NL>, assim também procura por um <Nul> no arquivo.{Vi não consegue processar <Nul> caracteres no arquivo}


Primeiro de tudo, abra :h :s para ver a seção "4.2 Substituto" de documentação em "Alterar".Aqui está o que o comando aceita:

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

Observe a descrição sobre pattern e string

Para o {pattern} ver |pattern|.
{string} pode ser uma seqüência de caracteres literal, ou algo
especial;ver |sub-replace-special|.

Então agora você sabe que o padrão de procura e substituição de padrões seguem regras diferentes.Se você seguir o link para |pattern|, você leva para a seção que explica todo o regexp padrões utilizados no Vim.

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top