Vimでのエンコーディング関係のオプションは次の通り:

'encoding'
グローバルなオプション。Vimが内部で用いるエンコーディングを指定する。バッファやレジスタやVimスクリプトでの文字列の中身はこのオプションで指定されたエンコーディングが用いられる。また、他のエンコーディング関係のオプションが未設定ならばデフォルトの値としても用いられる。
基本的にvimrc以外で変更すべきではない。また、このオプションを変更しても既存のバッファやレジスタやVimスクリプトでの文字列の中身のエンコーディングは変化しない。
(なお、ヘルプでは明言されていないがsystem()の結果は常に'encoding'として扱われ、'fileencoding'への変換は行われない。変換を期待する場合は:read!を使う必要がある。このためにvcscommandは一部で不具合が出る。)
'fileencoding'
バッファローカルなオプション。バッファの保存時に用いるエンコーディングを指定する。このオプションと'encoding'の値が異なる場合、後者から前者へのエンコーディングの変換が行われる。特に設定されていない場合、'encoding'の値が用いられる。
現在のバッファの内容を異なるエンコーディングで保存したい場合は:setlocal fileencoding={encoding}として値を変更してからバッファを保存する(:setは副作用があるので基本的に:setlocalを使うべき)。
'fileencodings'
グローバルなオプション。Vimが既存のファイルを開く際、適切なエンコーディングを自動的に判定するために用いられる。値はエンコーディング名をコンマ区切りで並べたものである。判定方法は単純で、Vimが既存のファイルを開いた場合、このオプションで指定されている各エンコーディングから'encoding'への変換を試し、最初に変換に成功したエンコーディングが'fileencoding'として用いられる。
指定されている全てのエンコーディングで変換が失敗した場合、'encoding'の値が'fileencoding'として用いられる。また、'encoding'で指定された値は変換の成否にかかわらず無条件に'fileencoding'として用いられる。よって'encoding'で指定された値は'fileencodings'に含めるべきではない。いつのまにか「'encoding'と同じ値は変換の成否にかかわらず無条件に用いられる」はなくなっていた。ただ誤解釈を避けるためできるだけ後にしておいた方が良いことは確か(例えばiso-2022-jpは最初の方におかないと誤解釈され易い)。
基本的にvimrc以外で変更すべきではない。
エンコーディングが誤認された場合は:edit ++enc={encoding}としてファイルを開きなおす(入力が面倒なのでエンコーディング指定済みのコマンドを作成しておくと便利)。
'termencoding'
グローバルなオプション。端末の出力に用いられるエンコーディングを指定する。特に指定されていなければ'encoding'の値が用いられる。
例えばCygwinなマシンからLinuxなマシンにSSHで接続してVimを起動した場合、Linux側のVimで:set termencoding=cp932等とすればよい(GNU screen使用時はそちら側で対処するという方法もある)。

設定例: 基本的な値の設定(ベースは香り屋版Vimのもの) / ファイルを開いた際にその内容にマルチバイト文字が含まれていない場合の対処

なお、$ENV_WORKINGだの$ENV_ACCESSだので切り分けているのは複数環境で作業するケースを考えての対策です(これらの環境変数の値はシェル側で設定しています)。必要に応じて削除すれば流用可能なはずです。また、後者の設定の:autocmdについてはMyAutoCmdを削除すれば流用可能なはずです(これは自分で定義したautocmdをリセットし易くするための処置です。そうしないとvimrcのリロードがし難くなるのです)。