Se eu abrir arquivos criados no Windows, todas as linhas terminarão ^M
.
Como faço para excluir esses caracteres de uma só vez?
Se eu abrir arquivos criados no Windows, todas as linhas terminarão ^M
.
Como faço para excluir esses caracteres de uma só vez?
Respostas:
dos2unix é um utilitário de linha de comando que fará isso, ou :%s/^M//g
fará se você usar Ctrl- v Ctrl- mpara inserir o ^ M, ou poderá:set ff=unix
e o vim fará isso por você.
Os documentos sobre a configuração 'fileformat' estão aqui , e o wiki do vim tem uma página abrangente sobre conversões de final de linha .
Como alternativa, se você mover arquivos para frente e para trás, talvez não queira convertê-los, mas sim fazê- :set ff=dos
lo, para que o vim saiba que é um arquivo DOS e use as convenções do DOS para fins de linha.
:%s/^M//g
deve ser :%s/\r//g
, porque ^M
significa apenas "combinar capital" M "no início da linha".
:%s/\r//g
trabalhou para mim, aplausos @Bunyk
set ff=unix
não faz nada. Talvez ele converta o arquivo, mas todos os ^M
caracteres ainda estão lá.
Altere as terminações de linha na exibição:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Isso também pode ser usado como operação de salvamento (: w sozinho não salvará usando as terminações de linha que você vê na tela):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
E você pode usá-lo na linha de comando:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
:w +ff=unix
é muito melhor do que a maioria das outras coisas escritas aqui, e o script bash é um ótimo bônus.
:e
comandos não parecem fazer nada na minha instalação do Windows vim. Minha visão ainda mostra os ^M
códigos.
Eu normalmente uso
:%s/\r/\r/g
o que parece um pouco estranho, mas funciona devido à maneira como o vim corresponde aos feeds de linha. Também acho mais fácil lembrar :)
:set ff=unix
antes, mas o arquivo que abri hoje deve ter sido particularmente estranho. Vim disse que já era, fileformat=unix
mas todos os finais de linha eram ^M
. Esta solução funcionou para mim.
:%s/\r//g
em vez disso funciona para mim.
:%s/\r//g
é a única solução de uso geral - especialmente para arquivos de modo misto que contêm uma mistura heterogênea de novas linhas de estilo DOS e UNIX. As soluções canónicos (por exemplo, :set ff=unix
, :e ++ff=unix
) assumir cada linha das extremidades tampão circulante no mesmo estilo de nova linha. Às vezes eles fazem; às vezes não. Cue sadface.
Eu prefiro usar o seguinte comando:
:set fileformat=unix
Você também pode usar mac
ou dos
converter respectivamente seu arquivo para a convenção de arquivos para Macintosh ou MS-DOS / MS-Windows. E isso não faz nada se o arquivo já estiver no formato correto.
Para obter mais informações, consulte a ajuda do vim:
:help fileformat
^M
caracteres.
set fileformat=unix
ao meu arquivo .vimrc funcionou.
:set fileformat=unix
converter de dos para unix.
from: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
@ https://gist.github.com/sparkida/7773170
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
também, como mencionado acima ^ M = Ctrl+V+ Ctrl+M(não digite apenas o símbolo "^" e M)
dos2unix
pode modificar diretamente o conteúdo do arquivo.
Você pode usá-lo diretamente no arquivo, sem necessidade de redirecionamento temporário de arquivos.
dos2unix input.txt input.txt
O exemplo acima usa o teclado americano assumido. Use a -
opção 437 para usar o teclado do Reino Unido.
dos2unix -437 input.txt input.txt
tr -d '\15\32' < winfile.txt > unixfile.txt
(consulte: http://kb.iu.edu/data/acux.html )
As etapas a seguir podem converter o formato do dos para unix:
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]
:w Write buffer using unix (LF-only) line endings.
Referência: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
O comentário sobre como aparecer o ^ M é o que funcionou para mim. Apenas digitar "^ M" no meu vi não obteve nada (não encontrado). A sequência CTRL+ V CTRL+ Mfez perfeitamente embora.
Meu comando de substituição de trabalho foi
:%s/Ctrl-V Ctrl-M/\r/g
e ficou assim na minha tela:
:%s/^M/\r/g
:%s
vez do :1,$s
. %
é uma abreviação de 1,$
.
Encontrei uma maneira muito fácil: abra o arquivo com nano: nano file.txt
Pressione CTRL+ Opara salvar, mas antes de pressionar Enter, pressione: ALT+ Dpara alternar entre finais de linha DOS e Unix / Linux ou: ALT+ Mpara alternar entre finais de linha Mac e Unix / Linux e, em seguida, pressione Enterpara salvar e CTRL+ Xpara sair.
^M
finais. salve como dos para manter, salve como linux para remover. pode verificar usandocat -v
Você pode usar:
vim somefile.txt +"%s/\r/\r/g" +wq
ou dos2unix utility
.
No vim, digite:
:w !dos2unix %
Isso canalizará o conteúdo do seu buffer atual para o comando dos2unix e gravará os resultados sobre o conteúdo atual. O Vim solicitará que recarregue o arquivo após
Geralmente, existe um dos2unix
comando que você pode usar para isso, apenas certifique-se de ler o manual, pois as versões GNU e BSD diferem em como elas lidam com os argumentos.
Versão BSD:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
Versão GNU:
dos2unix $FILENAME
Como alternativa, você pode criar suas próprias dos2unix
com qualquer uma das respostas propostas aqui, por exemplo:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
Eu sabia que tinha visto isso em algum lugar. Aqui está a dica de login do FreeBSD:
Precisa remover todos esses caracteres ^ M de um arquivo DOS? Tentar
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
Embora esse tópico seja muito antigo, eu gostaria de colocar outro material da wikia:
%s/\r\+$//g
esse preenchimento encontra todos os sinais de retorno de carro (um e mais representantes) até o final da linha e exclui, portanto \n
, fica no eol.
Esse é meu jeito. Abri um arquivo no DOS EOL e quando eu salvar o arquivo que será automaticamente convertido em EOL unix
autocmd BufWrite * :set ff=unix
se você criar um arquivo no NotePad ou NotePad ++ no Windows e trazê-lo para o Linux e abri-lo pelo vim, verá ^ M no final de cada linha. Para remover isso,
No seu terminal Linux, digite
dos2unix filename.ext
Isso fará a mágica necessária.
Eu queria novas linhas no lugar dos ^ M's. Perl para o resgate:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
Ou escreva para stdout:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
hexdump -C badfile
e vê0x0d 0x0a
"\r\n"
que esse é o seu problema.