Hexlモードを使用してテキストファイルからいくつかの特殊文字を手動で削除しようとしていますが、hexlモードで何かを削除する方法がわかりません。
私が本当に欲しいのは、キャリッジリターンを削除し、ラインフィード文字を保持することです。 Hexlモードはこれを行う正しい方法ですか?
これにはhexl-modeは必要ありません。 ^ J ^ Mを^ J Worksでグローバルに検索して置換するだけです。 :)次に、ファイルを保存し、バッファを強制終了してから、ファイルに再度アクセスして、ウィンドウに新しいファイルモードが表示されるようにします(UnixとDOS)。
交換を見つける必要はありません。ただ使う。
M-x delete-trailing-whitespace
を介してファイルのエンコーディングを設定することもできます
C-x RET f unix
おっとっと。その^ J ^ Mは、2つのリテラル文字として入力する必要があります。 c-q
c-j
、c-q
c-m
を使用し、置換文字列にはc-q
c-j
を使用します。
特に、行末を変換するために存在する nix2dos/dos2unix と呼ばれるコマンドラインツールもあります。
DOSエンコードされたファイルをUNIXエンコードに変更したい場合、M-x set-buffer-file-coding-system(C-x RET f)を使用してコーディングシステムを「unix」に設定し、ファイルを保存します。
キャリッジリターンを削除する場合(通常は^M
)と改行します。変換せずにファイルにアクセスするだけです。
M-x find-file-literally /path/to/file
キャリッジリターンのあるファイルは通常、DOSモードで表示されるためです(キャリッジリターンは非表示)。モードラインはおそらく(DOS)
左側にあります。
それが終わったら、^M
が表示され、他のキャラクターと同じように削除できます。
Hexl-modeを使用する必要はありません。代わりに:
重要なのは、置き換えようとしているものを入力する方法がなくても、いつでもそれを選択/コピーできるということです。
(hexlモードの場合)文字の削除ができるかわかりません。私はいつもそれらをスペースやその他の文字に変換し、通常のテキストエディターに切り替えて、そこで削除しました。
から 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))))))
これを.emacs
に追加してM-x xsteve-remove-control-M
経由で実行するか、簡単なキーにバインドします。任意のモードで^M
sを削除します。
私はこの関数を使用します:
(defun l/cr-sanitise ()
"Make sure current buffer uses unix-utf8 encoding.
If necessary remove superfluous ^M. Buffer will need to be saved
for changes to be permanent."
(interactive)
(set-buffer-file-coding-system 'utf-8-unix)
(delete-trailing-whitespace)
(message "Please save buffer to persist encoding changes."))