Windowsのgvimに慣れなかったので、Cygwin + Teraterm + Vimで、Windows上のファイルを使い慣れたTeraterm+Vimで編集できるようにしてみた。
世の中Windows版gVimもあるし、こんな需要あるとは思えないけど……。
世の中Windows版gVimもあるし、こんな需要あるとは思えないけど……。
概要
以下の内容のバッチファイルを作成する。
cd C:\cygwin\home\hoge for /f "usebackq tokens=*" %%i in (`C:\cygwin\bin\cygpath %1`) do @set RESULT=%%i "C:\Program Files\teraterm\cygterm.exe" -t 'ttermpro.exe %%s %%d /E /KR=SJIS /KT=SJIS /VTICON=CygTerm /nossh' -s '/bin/vim "%RESULT%"'
すると、このバッチファイルにアイコンをドラッグするだけで、tertarmの上でvimが起動し、テキストを編集できる。
講釈
バッチファイルの説明つけとくよ。
::①一応ホームに移動しとく。.vimrcとか読めるように。いらんかもしれん。 cd C:\cygwin\home\hoge ::②Windows形式パス名をcygwin形式パス名に変換 :: cygpathというコマンドがある。 :: このコマンドはWindows形式パス名とCygwin形式パス名を相互に変換してくれる。 :: :: Windowsでファイルドラッグすると、Windows形式のパス名が渡されるのだが、VimはCygwin形式パス名を必要とする。 :: だから、cygpathを使って変換が必要になるというわけ。 :: :: bashでいうところの RESULT=`cygpath $1` が使えると便利なんだが、やり方がわからん。 :: 検索して出てきたのが以下の方法である。(末尾の参考文献を参照) :: 詳しくはわからんが、とにかく環境変数RESULTにcygpathの実行結果が代入される。 :: たとえば、%1にC:\tmp\aaa.txtというファイルパスが入ってくると :: cygpathが/cygdrive/c/tmp/aaa.txtに変換してくれて、それがRESULTに入る。 for /f "usebackq tokens=*" %%i in (`C:\cygwin\bin\cygpath %1`) do @set RESULT=%%i ::③cygtermでTeratermを起動 :: デフォルトのcygterm.cfgとTeratermヘルプを参考に書きました。 :: -sでシェルコマンドを指定できるが、ここで/bin/bashとかでなく、/bin/vimを直接起動している。 :: ここで、さきほど作り出したcygwin形式パス名を指定する。 "C:\Program Files\teraterm\cygterm.exe" -t 'ttermpro.exe %%s %%d /E /KR=SJIS /KT=SJIS /VTICON=CygTerm /nossh' -s '/bin/vim "%RESULT%"'
以上。これで、このバッチファイルにテキストファイルをドラッグすれば、vimで編集が始まるよ。
Windowsのバッチファイルは難しいぜ……。トライアンドエラーで書いたので、
%を二回重ねるとか、クォーテーションの使い方とか、理解できてません。
PowerShellならもっと簡単にできるのかな?
Windowsのバッチファイルは難しいぜ……。トライアンドエラーで書いたので、
%を二回重ねるとか、クォーテーションの使い方とか、理解できてません。
PowerShellならもっと簡単にできるのかな?
問題点
なんか、試行錯誤ですんげー長いパスを渡したとき、後ろの方が切れてたような。。。
パス名が長すぎるとうまく動かないかもしれんっす。
パス名が長すぎるとうまく動かないかもしれんっす。
参考文献
修正者コメンツ
DOSスクリプトの仕様に合わせてコメント記号いじったよ。
勝手にやっちゃったけどもし都合悪かったら戻すから言ってちょ。
勝手にやっちゃったけどもし都合悪かったら戻すから言ってちょ。