24007
特定のファイルがあって、そのファイルを開くときにはいつもとは違う encoding で開きたいとします。  
これを実現するには、どうしたらいいでしょうか。

具体的には、 vagrant 上の emacs で /vagrant/scratch.txt を開くときに、 windows
共用のファイルとしていつもこれを利用しているので、 `cp932-dos` で開いてほしい、と思っています。  
このファイルは、scratch 用の、中身はいわゆるなんでも書くメモ帳なので、たまに中身を空っぽにして保存したりなどしていて、そのたびに encoding
を指定しなおす、をやっているのでこれをどうにかしたいと考えています。
CC BY-SA 3.0
2016-04-14T02:01:02.913
23997
2016-04-15T07:27:32.453
754
question
emacs
特定のファイルを開く際に、いつもと encoding を替えるには？
`find-file-hook` を使う方法があります。

```

    (add-hook 'find-file-hook
              (lambda ()
                (and (string= (buffer-file-name) (expand-file-name "/vagrant/scratch.txt"))
                     (setq buffer-file-coding-system 'cp932-dos))))
    
```

`(expand-file-name "/vagrant/scratch.txt")` の `expand-file-name`
は無くても結果は同じですが、対象のファイルパスに `~` を使う場合を考慮して入れてあります。
CC BY-SA 3.0
2016-04-14T03:15:31.993
24000
2016-04-14T03:15:31.993
23997
answer
`file-coding-system-alist`に、ファイル名の正規表現とencodingとのマッピングが定義されています。変更するには`modify-
coding-system-alist`を使います

```

    (modify-coding-system-alist 'file "^/vagrant/scratch.txt$" 'cp932-dos)
    
```

第2引数は正規表現なので、上では完全一致するようなパターンにしていますが、他にもencodingを変えたいファイルがあればパターンをいじってください。

<https://www.gnu.org/software/emacs/manual/html_node/emacs/Recognize-
Coding.html>
CC BY-SA 3.0
2016-04-14T07:42:09.480
24007
2016-04-14T07:42:09.480
5258
23997
answer
下記をscratch.txtに書いておくというのは如何でしょうか。

```

    Local variables:
      buffer-file-coding-system: cp932-dos
    End:
    
```
CC BY-SA 3.0
2016-04-14T08:10:35.343
24009
2016-04-14T08:10:35.343
14006
23997
answer
C-x RET c cp932-dos C-x C-f すれば cp932-dos で開けます。

C-x RET c は universal-coding-system-argument と言うのだそうで、  
後続の I/O コマンドの文字コードを指定するコマンドだそうで。

ただし、いちど読み込んじゃっだファイルに対して文字コード指定して読み直すには  
C-x C-f では読み直しをやってくれません。代わりに M-x revert-buffer を使います。
CC BY-SA 3.0
2016-04-15T00:52:17.293
24030
2016-04-15T07:27:32.453
2016-04-15T07:27:32.453
14166
14166
23997
answer