usar - vim substituir/




Como substituir um personagem por uma nova linha no Vim? (8)

Use \r vez de \n .

Substituir por \n insere um caractere nulo no texto. Para obter uma nova linha, use \r . Ao procurar por uma nova linha, você ainda usaria \n , no entanto. Essa assimetria se deve ao fato de \n fazer coisas um pouco diferentes :

\n corresponde a um fim de linha (nova linha), enquanto \r corresponde a um retorno de carro. Por outro lado, em substituições \n insere um caractere nulo enquanto insere uma nova linha (mais precisamente, é tratado como a entrada <CR> ). Aqui está um pequeno exemplo não interativo para ilustrar isso, usando o recurso de linha de comando do Vim (em outras palavras, você pode copiar e colar o seguinte em um terminal para executá-lo). xxd mostra um hexdump do arquivo resultante.

echo bar > test
(echo 'Before:'; xxd test) > output.txt
vim test '+s/b/\n/' '+s/a/\r/' +wq
(echo 'After:'; xxd test) >> output.txt
more output.txt
Before:
0000000: 6261 720a                                bar.
After:
0000000: 000a 720a                                ..r.

Em outras palavras, \n inseriu o byte 0x00 no texto; \r inseriu o byte 0x0a.

Estou tentando substituir cada um , no arquivo atual por uma nova linha:

:%s/,/\n/g 

Mas ele insere o que parece ser um ^@ vez de uma nova linha real. O arquivo não está no modo DOS nem nada.

O que devo fazer?

Se você é curioso, como eu, verifique a pergunta Por que \ ra nova linha para o Vim? também.


Aqui está a resposta que funcionou para mim. Desse cara

---- citando http://jaysonlorenzen.wordpress.com/2009/04/28/use-vi-editor-to-insert-newline-char-in-replace/

Algo mais que tenho que fazer e não consigo lembrar e depois tenho que olhar para cima.

No vi para inserir um caractere de nova linha em uma pesquisa e substituição, faça o seguinte:

:% s / look_for / replace_with ^ M / g o comando acima substituiria todas as instâncias de "look_for" por "replace_with \ n" (com \ n significando nova linha)

para obter o “^ M”, insira a combinação de teclas “ctl-V” e depois disso (libere todas as teclas) pressione a tecla “enter”.


Com o Vim no Windows, use Ctrl + Q no lugar de Ctrl + V


Do eclipse, os caracteres ^M podem ser incorporados em uma linha e você deseja convertê-los em novas linhas.

:s/\r/\r/g

Mas se alguém tem que substituir então seguindo trabalhos de coisa

:%s/\n/\r\|\-\r/g

no acima, cada linha seguinte é substituída pela próxima linha e depois | - e novamente a próxima linha. Isso é usado em tabelas wiki. se o texto é o seguinte:

line1
line2
line3

é alterado para

line1
|-
line2
|-
line3

Na sintaxe s/foo/bar \r e \n têm diferentes significados, dependendo do contexto.

baixo:

Para foo :
\ n = nova linha (LF no linux / mac, CRLF no windows)
\ r = retorno de carro (CR)

Para bar :
\ r = é nova linha
\ n = byte nulo.

mais tempo: (com números ascii)

NUL = 0x00 = 0 = CTRL @
LF = 0x0A = 10 = CTRL J
CR = 0x0D = 13 = CTRL M

Aqui está uma lista dos caracteres de controle ASCII , insira-os no vim via CTRL v CTRL --- key --- .
No bash ou nos outros shells unix / linux, simplesmente digite CTRL --- key --- . Tente CTRL M no bash, é o mesmo que pressionar ENTER , pois o shell percebe o que se entende, mesmo que os sistemas Linux usem Line Feeds para delimitação de linha.

Para inserir literais no bash, prefixando-os com CTRL v também funcionará.

Tente no bash:

echo ^[[33;1mcolored.^[[0mnot colored.

Isso usa sequências de escape ANSI , insira os dois ^[ s via CTRL v ESC .

Você também pode tentar CTRL v CTRL m ENTER , que lhe dará isto:

bash: $'\r': command not found

Lembre-se de cima? :>

Esta lista de caracteres de controle ASCII é diferente de uma tabela de símbolos ASCII completa, em que os caracteres de controle, que são inseridos em um console / pseudoterminal / vim através da tecla CTRL (haha), podem ser encontrados lá. Enquanto que em C e na maioria das outras linguagens você costuma usar os códigos octal para representar esses 'caracteres'.

Se você realmente quer saber de onde tudo isso vem: http://www.linusakesson.net/programming/tty/ .
Este é o melhor link que você encontrará neste tópico, mas cuidado: existem dragões.

TL; DR

Geralmente foo = \n e bar = \r .


Você precisa usar

:%s/,/^M/g

Para obter o caractere ^M , pressione Ctrl v seguido de Enter


pode fazer o trabalho aqui para você.





vi