「ツール(T)」→「ローカル設定(L)」→「もろもろ」から変更する。
[ キー操作から変更 ]
バッファの文字コードを変換 --- C-x C-k f (change-fileio-encoding)
バッファの改行コードを変換 --- C-x C-k n (change-eol-code)
change-eol-code は、crlf → cr → lf が、ぐるぐるまわる。
find-file でファイルを開いたとき、ファイルの文字コードが意図したものと違った場合に、 正しいコードに変更するには、C-u M-x revert-buffer して、 文字コード ( sjis, euc-jp, jis ... ) を指定する。
または、ESC ESC (revert-buffer *encoding-euc-jp*) とかする。 その他文字コードの指定は、*encoding-sjis*, *encoding-jis* とか。 詳しくは、encoding.l を参照するといいかも。
[xyzzy:04555](亀井さん)より。
(defun convert-encoding-directory (from to encoding) (setq from (namestring from)) (setq to (namestring to)) (or (and (path-equal from to) (not (yes-or-no-p "入力と出力が同じっぽいっすけどいいっすか?"))) (let (buffer) (unwind-protect (progn (do-events) (setq buffer (create-new-buffer "*foo*")) (set-buffer buffer) (set-buffer-fileio-encoding encoding) (mapc #'(lambda (f) (message "~a..." f) (erase-buffer buffer) (insert-file-contents (merge-pathnames f from)) (write-region (point-min) (point-max) (merge-pathnames f to))) (directory from :file-only t))) (and buffer (delete-buffer buffer))))) (message "done")) (defun sjis2utf (from to) (interactive "Dsjis2utf: \nDto: ") (convert-encoding-directory from to *encoding-utf8*)) (defun utf2sjis (from to) (interactive "Dutf2sjis: \nDto: ") (convert-encoding-directory from to *encoding-sjis*))
山本 真二さんのぺーじ を参考に。私がずいぶん触ってしまったので、かなりアヤしい。PHP のマニュアルを変換したくてつくった。
Dir: 変換するファイルのあるディレクトリ
Wild: *.txt とかする
Encoding: tab 押して適当に探す
with-subdir=t, without-subdir=nil: サブディレクトリを対象にするかしないか
(defun my-conv-fileio-and-eol-code-dir (dir wild encoding eol-code recursive) (interactive "DDir: \nsWild: \nZEncoding: \nnEOL-Code(LF=0, CRLF=1, CR=2): \nSwith-subdir=t, without-subdir=nil: ") (let ((files (directory dir :wild wild :absolute t :file-only t :recursive recursive))) (set-buffer (create-new-buffer "*WORK*")) (set-default-directory dir) (dolist (file files) (erase-buffer (selected-buffer)) (ed::insert-file-contents file t) (set-buffer-file-name file) (set-buffer-fileio-encoding encoding) (change-eol-code eol-code) (set-buffer-modified-p t) (save-buffer)) (delete-buffer (selected-buffer)) ))
xyzzy Part3 214 より。C-x C-f C:/tmp/euc-jp/hoge.txt とかで、ファイルを新規に作成すると、 文字コード euc-jp 、改行コード LF でファイルが作成される。ファイラから、 N で作成してもいいみたい。
(setq *eucjp-lf-directory* '( "C:/tmp/euc-jp/" "//server/home/" )) (defun set-eucjp-lf-hook () (let ((file (get-buffer-file-name)) dir dir-length) (when (and (zerop (point-max)) (string file)) (setq dir (directory-namestring file)) (dolist (eucjp-lf-dir *eucjp-lf-directory*) (setq dir-length (length eucjp-lf-dir)) (when (and (>= (length dir) dir-length) (string-equal eucjp-lf-dir (subseq dir 0 dir-length))) (set-buffer-fileio-encoding *encoding-euc-jp*) (set-buffer-eol-code 0) (return)))))) (add-hook '*find-file-hooks* 'set-eucjp-lf-hook)
上記は、サブディレクトリも効くようになっているが、指定ディレクトリ直下のみにしたい場合は、
(when (string-equal sjis-crlf-dir dir) ...
とのこと。xyzzy Part3 215 より。