Converter DOS finais de linha para fins de linha de Linux no vim
Pergunta
Se eu abrir arquivos que eu criei no Windows, as linhas de todos os finais ^M
.
Como faço para excluir esses personagens tudo de uma vez?
Solução
dos2unix é um utilitário de linha de comando que vai fazer isso, ou vontade :%s/^M//g
se você usar Ctrl - v Ctrl -. m para introduzir o ^ m, ou você pode :set ff=unix
e vim vai fazer isso por você
Documentos sobre a configuração 'fileformat' são aqui , e o vim wiki tem um href="http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix" na linha que termina conversões .
Como alternativa, se você mover arquivos e para trás muito, você não pode querer convertê-los, mas sim para fazer :set ff=dos
, por isso vim vai saber que é um arquivo DOS e usar convenções DOS para finais de linha.
Outras dicas
Alterar os fins de linha no modo de exibição:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Isto pode também ser usado como economia de operação (: w só não salvará utilizando os fins de linha que você vê na tela):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
E você pode usá-lo a partir da linha de comando:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
Eu normalmente uso
:%s/\r/\r/g
que parece um pouco estranho, mas funciona por causa da maneira que corresponda vim linefeeds. Também acho mais fácil de lembrar:)
Eu prefiro usar o seguinte comando:
:set fileformat=unix
Você também pode usar mac
ou dos
, respectivamente, converter o arquivo para Macintosh ou convenção arquivo MS-DOS / MS-Windows. E ele não faz nada se o arquivo já está no formato correto.
Para obter mais informações, consulte a ajuda vim:
:help fileformat
:%s/\r+//g
No vim, que retira todos os retornos de carro, e deixa apenas novas linhas.
:set fileformat=unix
converter de DOS para Unix.
De: http://vim.wikia.com/wiki/ Change_end-de-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
dos2unix
pode modificar diretamente o conteúdo do arquivo.
Você pode usá-lo diretamente no arquivo, sem a necessidade de redirecionamento de arquivo temporário.
dos2unix input.txt input.txt
Os usos acima dos assumiu teclado dos EUA. Use a opção -
437 usar o teclado do Reino Unido.
dos2unix -437 input.txt input.txt
diretório Convert de arquivos do DOS para o Unix
Usando linha de comando e sed, encontrar todos os arquivos no diretório atual com o ".ext" extensão e remover todos os '^ M'
@ 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, conforme mencionado acima
tr -d '\15\32' < winfile.txt > unixfile.txt
Os passos podem converter o formato de arquivo para 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-de-line_format_for_dos-mac-unix
Com o seguinte comando:
:%s/^M$//g
Obter o ^M
apareça tipo Ctrl V , em seguida, Ctrl M . Ctrl V diz ao Vim para dar o próximo caractere digitado literalmente.
Eu encontrei uma maneira muito fácil: Abra o arquivo com nano: nano file.txt
Pressione Ctrl + O para salvar, mas antes de pressionar Enter , pressione: ALT + D para alternar betwen DOS e Unix / Linux linha-finais, ou: ALT + M para alternar betwen Mac e Unix / Linux linha-finais, em seguida, pressione < kbd> Enter para salvar e Ctrl + X para sair.
:g/Ctrl-v Ctrl-m/s///
Ctrl M é o \r
caráter, ou retorno de carro, que finais de linha DOS adicionar. Ctrl V diz vim a inserção de um literal Ctrl M carácter na linha de comando.
Como um todo, este comando substitui todos \r
com nada, removendo-os das extremidades das linhas.
Você pode usar:
vim somefile.txt +"%s/\r/\r/g" +wq
ou dos2unix utility
.
O comentário sobre a obtenção do ^ M a aparecer é o que funcionou para mim. Apenas digitando "^ M" na minha vi nada tem (não encontrado). A CTRL + V CTRL + M sequência fez perfeitamente embora.
Meu comando de substituição de trabalho era
:%s/Ctrl-V Ctrl-M/\r/g
e parecia que esta na minha tela:
:%s/^M/\r/g
Você pode usar o seguinte comando:
:%s/^V^M//g
onde os meios '^' usar Ctrl chave.
abaixo comando é usado para formatar todos os arquivos .sh no diretório atual, eu testei no meu Fedora OS.
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
Normalmente, existe um comando dos2unix
você pode usar para isso, apenas certifique-se de ler o manual como o GNU e versões BSD divergem sobre como eles 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 seu próprio dos2unix
com qualquer uma das respostas aqui proposto, por exemplo:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
Eu sabia que eu tinha visto isso em algum lugar. Aqui é a ponta de login FreeBSD:
necessidade de remover todas essas ^ personagens M de um arquivo DOS? Tentar
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
No vim, digite:
:w !dos2unix %
Este tubo vontade o conteúdo do seu buffer corrente para o comando dos2unix e escrever os resultados sobre o conteúdo atual. Vim irá pedir para recarregar o arquivo depois
Para executar diretamente no console do Linux:
vim file.txt +"set ff=unix" +wq
Embora este tema é muito antiga, eu gostaria de colocar outro material da Wikia:
%s/\r\+$//g
que enchem encontrar todos os sinais de retorno de carro (uma e mais repetições) até o final da linha e excluir, por isso só \n
vai ficar em eol.
Esta é a minha maneira. Abri um arquivo no dos EOL e quando eu salvar o arquivo que irá converter automaticamente para unix EOL
autocmd BufWrite * :set ff=unix
Se você criar um arquivo no bloco de notas ou Notepad ++ no Windows e trazê-lo para o Linux e abra-o vim, você vai ver ^ M no final de cada linha. Para remover este,
No seu terminal Linux, digite
dos2unix filename.ext
Isso vai fazer a mágica necessária.
Eu queria novas linhas no lugar da ^ M de. Perl para o resgate:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
ou escrever na saída padrão:
perl -p -e 's/\x0d/\n/g' < excel_created.txt