Em EMACS, como retirar Cr (^m) e deixar os caracteres LF (^j)?
-
19-09-2019 - |
Pergunta
Estou tentando usar o modo Hexl para remover manualmente alguns caracteres especiais de um arquivo de texto e não vejo como excluir nada no modo hexieloso.
O que eu realmente quero é remover o retorno do carro e manter os caracteres de feed de linha. É o modo hexl da maneira certa de fazer isso?
Solução
Não há necessidade de modo hexieloso para isso. Basta fazer uma pesquisa global e reposição de ^j ^m com ^j funciona para mim. :) Então salve o arquivo, mate o buffer e revisite o arquivo para que a janela mostre o novo modo de arquivo (Unix vs DOS).
Outras dicas
Não há necessidade de encontrar substituir. Apenas use.
M-x delete-trailing-whitespace
Você também pode definir o arquivo que codifica
C-x RET f unix
Opa. Isso precisa ser inserido como dois caracteres literais. Usar c-q
c-j
, c-q
c-m
e para a sequência de substituição, use c-q
c-j
.
Há também uma ferramenta de linha de comando chamada Unix2DOS/DOS2UNIX Isso existe especificamente para converter finais de linha.
Supondo que você deseja que um arquivo codificado do DOS seja alterado na codificação do UNIX, use MX Set-Buffer-File-Coding-System (CX RET F) para definir o sistema de codificação como "Unix" e salve o arquivo.
Se você deseja remover um retorno de carro (geralmente exibido como ^M
) e deixe a linha feed. Você pode simplesmente visitar o arquivo sem qualquer conversão:
M-x find-file-literally /path/to/file
Porque um arquivo com retornos de transporte geralmente é exibido no modo DOS (ocultando as devoluções do carro). A linha de modo provavelmente será exibida (DOS)
no lado esquerdo.
Depois de fazer isso, o ^M
Vai aparecer e você pode excluí -los como faria com qualquer personagem.
Você não precisa usar o modo hexlido. Em vez de:
- Abra o arquivo de uma maneira que mostre esses ^m's. Consulte MX Find-File-File Literal/Path/to/Arquivo acima. Em Xemacs, você também pode fazer CU CX CF e selecionar a codificação binária.
- Selecione a string que você deseja substituir e copiá -la usando MW
- Faça m-% (Substitua de consulta) e cole o que você deseja copiar usando CY
- Presente entrar quando solicitado ao que o substitua por
- Pressione Pressione! agora para substituir todas as ocorrências
O ponto é que, mesmo que você não seja como inserir o que está tentando substituir, sempre pode selecioná -lo/copiá -lo.
(no modo hexieloso) Não tenho certeza se você pode excluir caracteres. Eu sempre os converti em espaços ou algum outro personagem, mudei para o editor de texto regular e os excluí lá.
A partir de http://www.xsteve.at/prg/emacs/xsteve-functions.el:
;02.02.2000
(defun xsteve-remove-control-M ()
"Remove ^M at end of line in the whole buffer."
(interactive)
(save-match-data
(save-excursion
(let ((remove-count 0))
(goto-char (point-min))
(while (re-search-forward (concat (char-to-string 13) "$") (point-max) t)
(setq remove-count (+ remove-count 1))
(replace-match "" nil nil))
(message (format "%d ^M removed from buffer." remove-count))))))
Adicione isso ao seu .emacs
e executá -lo via M-x xsteve-remove-control-M
ou vincule -a a uma chave mais fácil. Vai despir o ^M
s em AnyMode.