Sublime で FTP ができないゾ

sublimetext2こないだから格闘している Sublime Text だが、今度は SFTP プラグインでハマっている。こいつは編集中のファイルをセーブすると、あらかじめ設定した FTP サーバにアップロードしてくれるという、ありがたいものだ。

設定に関してはいろいろなサイトで説明されているので、そちらを参考にしてもらえば良い。

< しかし、こいつがどうやっても Connection Refused ではねられてしまう。接続先の vsftpd のログを読んでもよくわからない。xferlog_std_format = NO にしてみると、ログインには成功して、PASV モードに切り替えたところまでは記録されている。そういえば vsftpd の PASV ってクセがあったことを思い出した。

Sublime のフォーラムにヒントが載っていた。Sublime FTP plugin and Windows Server PASV モードを OFF にした!?

ものは試しでやってみた。大成功!

{
    // The tab key will cycle through the settings when first created
    // Visit http://wbond.net/sublime_packages/sftp/settings for help
    
    // sftp, ftp or ftps
    "type": "ftp",

    "save_before_upload": true,
    "upload_on_save": false,
    "sync_down_on_open": false,
    "sync_skip_deletes": false,
    "sync_same_age": true,
    "confirm_downloads": false,
    "confirm_sync": true,
    "confirm_overwrite_newer": false,
    
    "host": "ホストURL",
    "user": "ログインアカウント",
    "password": "パスワード",
    "port": "21",
    
    "remote_path": "リモートディレクトリ(絶対パス)",
    "ignore_regexes": [
        "\.sublime-(project|workspace)", "sftp-config(-alt\d?)?\.json",
        "sftp-settings\.json", "/venv/", "\.svn/", "\.hg/", "\.git/",
        "\.bzr", "_darcs", "CVS", "\.DS_Store", "Thumbs\.db", "desktop\.ini"
    ],
    //"file_permissions": "664",
    //"dir_permissions": "775",
    
    //"extra_list_connections": 0,

    "connect_timeout": 30,
    //"keepalive": 120,
    "ftp_passive_mode": false,     // <=== ココ
    //"ftp_obey_passive_host": false,
    //"ssh_key_file": "~/.ssh/id_rsa",
    //"sftp_flags": ["-F", "/path/to/ssh_config"],
    
    //"preserve_modification_times": false,
    //"remote_time_offset_in_hours": 0,
    //"remote_encoding": "utf-8",
    //"remote_locale": "C",
    //"allow_config_upload": false,

}


ftp_passive_modefalse にした結果、期待通りの動作をするようになった。ログでは依然として PASV にしているのに、設定上は false にしなければいけないのか、よくわからない。

sublimeで印刷できないゾ

sublimetext2最近お気に入りのテキストエディタは Sublime Text だ。各種プラットフォームに対応しているし、カスタマイズの自由度が高く、体に染み付いている WordStar ダイヤモンドカーソルも使える。そのためには後述のように Keybind / User を書き変えなければならないが。

この Sublime Text だが、デフォルトではプリント機能がない。どうするかというと、標準のプラグイン「Print to HTML」を使い、一旦ブラウザに出力してから、ブラウザの機能でプリントするのだそうだ。

ところがこれを使ってもブラウザに出力されない。Print to HTMLのソースを見ると、

def send_to_browser(html):
    """Create a temp file containing html and open it in the default web browser."""
    tmp_html = tempfile.NamedTemporaryFile(delete=False, suffix='.html')
    tmp_html.write(html)
    tmp_html.close()
    desktop.open(tmp_html.name)

なにやらテンポラリファイルを作っている。さてはと OS の環境変数を見たら、TMPTEMP が作られていなかった。こいつらを適切に設定し、Sublimeを再実行したところ、ちゃんと出力されるようになった。

Default (OSX).sublime-keymap

Sublime をダイヤモンドカーソル風にする定義ファイル。完全互換ではない。

/* diamond cursol definition
 * created by: azira@usagi-goten.com
 */
[
{ "keys": ["ctrl+d"], "command": "move", "args": {"by": "characters", "forward": true} },
{ "keys": ["ctrl+s"], "command": "move", "args": {"by": "characters", "forward": false} },
{ "keys": ["ctrl+e"], "command": "move", "args": {"by": "lines", "forward": false} },
{ "keys": ["ctrl+x"], "command": "move", "args": {"by": "lines", "forward": true} },
{ "keys": ["ctrl+a"], "command": "move", "args": {"by": "subwords", "forward": false} },
{ "keys": ["ctrl+f"], "command": "move", "args": {"by": "subwords", "forward": true} },
{ "keys": ["ctrl+r"], "command": "move", "args": {"by": "pages", "forward": false} },
{ "keys": ["ctrl+c"], "command": "move", "args": {"by": "pages", "forward": true} },

{ "keys": ["ctrl+t"], "command": "delete_word", "args": { "forward": true, "sub_words": true } },
{ "keys": ["ctrl+g"], "command": "right_delete" },
{ "keys": ["ctrl+y"], "command": "cut" },
{ "keys": ["ctrl+j"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} },

{ "keys": ["ctrl+shift+e"], "command": "select_lines", "args": {"forward": false} },
{ "keys": ["ctrl+shift+x"], "command": "select_lines", "args": {"forward": true} },

{ "keys": ["ctrl+q", "ctrl+d"], "command": "move_to", "args": {"to": "eol"} },
{ "keys": ["ctrl+q", "ctrl+s"], "command": "move_to", "args": {"to": "bol"} },
{ "keys": ["ctrl+q", "ctrl+r"], "command": "move_to", "args": {"to": "bof"} },
{ "keys": ["ctrl+q", "ctrl+c"], "command": "move_to", "args": {"to": "eof"} },
{ "keys": ["ctrl+q", "ctrl+e"], "command": "move", "args": {"by": "pages", "forward": false} },
{ "keys": ["ctrl+q", "ctrl+x"], "command": "move", "args": {"by": "pages", "forward": true} },

{ "keys": ["ctrl+q", "ctrl+f"], "command": "show_panel", "args": {"panel": "find"} },
{ "keys": ["ctrl+q", "ctrl+a"], "command": "show_panel", "args": {"panel": "replace"} },
{ "keys": ["ctrl+q", "ctrl+y"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete to Hard EOL.sublime-macro"} },

{ "keys": ["super+ctrl+alt+left"], "command": "navigation_history_back"},
{ "keys": ["super+ctrl+alt+right"], "command": "navigation_history_forward"}
]


追記

印刷できない原因だが、どうやら Syntax として PHP を選択した時に起きるようだ。編集中の PHP ファイルの Syntax を他のものにすると、ふつ〜にブラウザで開くことができる。

調べてみると Print to HTML というプラグインが PHP に対応していない という恐ろしい事実が発覚した。警告メッセージくらい出してほしいものだ。

とりあえずは、PHP を印刷するときは一時的に別の Syntax に切り替えるという技を使うことにした。Sublime Text 3 は大丈夫なのかな?