質問: sublime text2をWindows7やLinux(CentOS 6.5)上で使用しています。 Shift_JISに対応するためプラグイン 「ConvertToUTF8」を入れています。 Ctrl+Rで関数のリストを表示してジャンプした時に時々ですが、日本語が文字化けしてしまう時があります。 この場合、ファイルを保存すると元に戻せなくなり困るので、その時点で編集中のものを破棄して対応しており、使い勝手が悪いです。 こういう現象は他の方でもでてますでしょうか? 問題が出ない方法が知りたいと思います。 <2014/12/24追記> 文字化けとなる手順がわかりました。以下の順で実行すると確実に文字化けします (Windows7 Proで確認)。 1. ShiftJISの日本語を含むファイルをCtrl+Sにて保存する 2. Ctrl+Rを実行する Ctrl+Rを押して関数のリストが表示された段階で文字化けになっているようです。
回答: (12/26 新規) windows 8.1ですが、確かに再現しました。 で、ちょっと違うアプローチなのですが、`ctrl+r`にあたる機能を自前でプラグインにしてみたところ、 再発しなくなったので、もしよければ試してみてください。 おまけ程度のものですのでサポートなどはありません。 (ホントは `ctrl+p`と何か追加で`ctrl+r`相当にしようとなんとなくやり始めたら、なにもせずとも問題が起きなくなったという、若干腑に落ちない感じの一品です。) プラグイン作成経験がなくても簡単に作れると思います。 プラグイン本体の作成 メニューから `Tool` > `New Plugin` で、プラグインのひな形を作成します。 デフォルトは以下の様な感じですので、変更します。とくにクラス名はこれが呼び出すためのコマンド名に直結しますので注意してください。とりあえずクラス名は好みがあってもPascalケース(先頭大文字単語区切りごとに大文字)にします。 ``` import sublime, sublime_plugin class ExampleCommand(sublime_plugin.TextCommand): def run(self, edit): self.view.insert(edit, 0, "Hello, World!") ``` これを以下の様にします。 ``` import sublime, sublime_plugin import time class MyGotoSymbol(sublime_plugin.TextCommand): def run(self, edit): # time.sleep(0.1) self.view.window().run_command("show_overlay", {"overlay": "goto", "text": "@"}) ``` (run_commandの部分はデフォルトのキーマップ設定開いて ctrl+r を探してみればそれと同じ様な呼び出しであることがわかると思います)。 sleepはわざとコメントアウトしています。 pythonなのでインデントにも注意してください(インデントにタブとスペースの混在しない方がいいと思います)。 これを保存します。 多分、New Pluginで開いたタブのデフォルトの保存先は "~\Packages\User" だと思いますので、そのディレクトリに(サブディレクトリ作らず)そのまま名前を付けて保存します。ファイル名は何でも構いません。クラス名と同じ方がわかりやすいです。 もし、"~\Packages\User" ではない場合は、`Preferences` > `Browse Packages` で開かれたディレクトリの中にある”User”ディレクトリ直下に保存してください。 ※ もし動作しなかった場合は、エラーなどはコンソール(`ctrl+``)に表示されるのでヒントになるかもしれません。 Packagesディレクトリでも動作しますのでPackagesに置いて動作するようであればそれでも構いません(コメント参照)。ただし、区分けとしてはユーザーの領域ではない場所なので別途バックアップなど取っておく方が安心です(上書きされる事は無いと思いますが念のため) 動作確認 この状態でもSublimeのコマンド実行できるウィンドウ(`ctrl+``)で ``` view.window().run_command("my_goto_symbol") ``` とすると試してみることができます。 上記で指定しているように、コマンド名はクラス名をスネークケースにしたものになります。 gotoのTを大文字にしていたら、そこもアンダースコアで区切る必要があります。 ショートカットキーにバインド 確認までできたら、ショートカットキーにバインドします。 `Preferences` > `key bindings - user` で開きます。 まだ一度もユーザーショートカットキーを設定したことが無ければ `[]` が表示されていると思います。 以下の様にすれば、ctrl+r に 先ほど作成したプラグインが設定されます。 複数のキー設定がある場合はカンマで区切って追加します(defaultのキー設定が参考になります)。 ``` [ { "keys": ["ctrl+r"], "command": "my_goto_symbol" } ] ``` なお、もともとのctrl+rはこちらのユーザー設定で上書きされるのでそのままにしておいて問題ありません。 上書き保存して完了です。 最後に 再発しなかった原因がよくわからないですが、オーバーレイが表示されるまでに時間があればいいのかもしれないと思い、sleepを仕込んであります。私の環境&サイズの小さいファイルではコメントアウトしていても問題ありませんでしたが、もし上手くいかない場合はsleepのコメントを解除(先頭の # を削除)して調整してみてください。単位は秒です(0.1なら0.1秒)。