In Emacs, come spogliare Cr (^m) e lasciare i personaggi Lf (^J)?
-
19-09-2019 - |
Domanda
Sto cercando di usare la modalità hexl per rimuovere manualmente alcuni caratteri speciali da un file di testo e non vedo come eliminare nulla in modalità hexl.
Quello che voglio veramente è rimuovere il ritorno del trasporto e mantenere i caratteri di linefeed. È la modalità hexl il modo giusto per farlo?
Soluzione
Non c'è bisogno di modalità hexl per questo. Basta fare un campo di ricerca e-e-spot di ^j ^m con ^j Works per me. :) Salva il file, uccidi il buffer e rivisita il file in modo che la finestra mostri la nuova modalità file (UNIX vs DOS).
Altri suggerimenti
Non è necessario trovare sostituire. Basta usare.
M-x delete-trailing-whitespace
È inoltre possibile impostare la codifica del file
C-x RET f unix
Oops. Quello ^j ^m deve essere inserito come due personaggi letterali. Uso c-q
c-j
, c-q
c-m
e per la stringa di sostituzione, usa c-q
c-j
.
C'è anche uno strumento di comando chiamato UNIX2DOS/DOS2Unix esiste specificamente per convertire i termini della linea.
Supponendo che tu desideri che un file codificato DOS venga modificato in codifica UNIX, utilizzare il sistema di codifica set-buffer MX (CX RET F) per impostare il sistema di codifica su "UNIX" e salvare il file.
Se si desidera rimuovere un ritorno a carrello (di solito visualizzato come ^M
) e lasciare l'alimentazione della linea. Puoi semplicemente visitare il file senza conversione:
M-x find-file-literally /path/to/file
Perché un file con ritorni di trasporto viene generalmente visualizzato in modalità DOS (nascondendo i ritorni del trasporto). La linea della modalità probabilmente verrà visualizzata (DOS)
sul lato sinistro.
Una volta che l'hai fatto, il ^M
Verrà visualizzato e puoi eliminarli come faresti con qualsiasi personaggio.
Non è necessario usare la modalità hexl. Invece:
- Apri il file in un modo che ti mostra quelle ^m. Vedere MX TROVA-FILE-Literalmente/Path/To/File sopra. In Xemacs puoi anche fare Cu CX CF e selezionare la codifica binaria.
- Seleziona la stringa che si desidera sostituire e copiarla usando MW
- eseguire m-% (query sostituisci) e incolla ciò che si desidera copiare usando cy
- Presente Invio quando viene richiesto a ciò che lo sostituisce con
- Possibile stampa! ora per sostituire tutte le occorrenze
Il punto è che anche se non si inserisce ciò che stai cercando di sostituire, puoi sempre selezionarlo/copiarlo.
(in modalità hexl) Non sono sicuro di poterlo fare Elimina i personaggi. Li ho sempre convertiti in spazi o qualche altro personaggio, sono passato al normale editor di testo e li ho eliminati lì.
Da 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))))))
Aggiungi questo al tuo .emacs
e eseguilo via M-x xsteve-remove-control-M
o legalo a una chiave più semplice. Spoglia il ^M
s in qualsiasi modalità.