WindowsのVIMで開発しているスクリプトをリモートのLinuxで動作確認するために半自動でSCPする
というありがちなパターン。
WinSCPがインストールされている前提で、その keepuptodate コマンドでもいいんだけど、今回は反映タイミングは制御したかったので、初VIMスクリプトの練習として書いてみた。
といっても、パスセパレータのエスケープが面倒だったんで、この記事の隠れ主題として、VIMスクリプトの中でセパレータをどこで何個書けばよいかの備忘録というのがある。
下記スクリプト呼び出されている WinSCP スクリプト(sync.winscp)はリモートに接続して、syncしたりputしたりしてclose→exitするものであれば何でもよく、このVIMスクリプトと同じディレクトリに置いておくように記載している。
" Sync let s:winscp = 'C:\\Program Files (x86)\\WinSCP\\WinSCP.exe' let s:script_filepath = expand('%:h') . '\sync.winscp' function! Sync() let l:script_filepath = substitute(s:script_filepath, '\\', '\\\\', 'g') let l:command = \ printf('call system("\"%s\" /console /script=\"%s\"")', \ s:winscp, l:script_filepath) execute l:command endfunction command! Sync :call Sync()
んで、VIMを起動したときに最初にこのスクリプトを source しておくと、開発したスクリプトをリモートのLinuxに持っていきたいときに :Sync とするだけでそれができる。
(追記)
Windowsでも、Cygwinなどの scp.exe がインストールされていてパスが適切に設定されていれば、:edit scp://~ でリモートのファイルを透過的に編集できるらしい。まあいいや。VIMスクリプトのいい練習になったのでよしとする。