青の部隊 505小隊 ULZ

テキストファイルをCygterm+vimで編集

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集
Windowsのgvimに慣れなかったので、Cygwin + Teraterm + Vimで、Windows上のファイルを使い慣れたTeraterm+Vimで編集できるようにしてみた。
世の中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ならもっと簡単にできるのかな?

問題点

なんか、試行錯誤ですんげー長いパスを渡したとき、後ろの方が切れてたような。。。
パス名が長すぎるとうまく動かないかもしれんっす。

参考文献



修正者コメンツ

DOSスクリプトの仕様に合わせてコメント記号いじったよ。
勝手にやっちゃったけどもし都合悪かったら戻すから言ってちょ。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

目安箱バナー