背景
ghqとpecoを組み合わせて使うようになって、Windowsエクスプローラーのマウス操作が億劫になりました。とは言え、まだまだシェル力が足りないのでエクスプローラーを併用するのですが、ディレクトリのパス形式がLinuxとWindowsで違うために目的のディレクトリをすぐ開けなくてちょっと困っていました。(´・ω・`)
使用環境
- Windows 10
- bash(Git for Windows 同梱のもの)
やったこと
そこで、以下のようなことをやってみました。
-
bashのカレントディレクトリパスをWindows形式に変換 - Windows標準のクリップボードにコピーするツール
clipに上記パス情報を渡す
あとは、エクスプローラーや好みのファイラーにパスを貼り付けて移動できます。
bashのカレントディレクトリパスをWindows形式に変換
cygpathでやってみた
# 日本語を含むパスで文字化けします
$ cygpath -w `pwd` | tr -d '\n' | clip
はじめは、上記のようにcygpathツール(Git for Windowsに同梱)を使った方法を試したのですが、残念ながらclipツールがShift-JIS形式の文字列しか扱えないため日本語を含むパスで文字化けしてしまいます。それじゃあパイプのどこかでiconv使って文字コードをUTF-8からShift-JISに変換してみよう!と思ってやってみたのですが以下のようになりました。
-
cygpathで変換したWindows形式のパスに対してiconvで変換を試みたが、「:」や「\」が含まれていて変換できない -
iconvで変換した文字列をcygpathに渡してみたが、なんだか化けた文字列が返ってきた
素直にsedに入門した
はい、素直に正規表現使って変換することにしました。本当にすみませんでした(´・ω・`)
pwd | tr -d '\n' | iconv -f UTF-8 -t SJIS | sed -e 's/\//\\/g' -e 's/\(^\\.\)/\1:/' -e 's/\(^\\\)//' | clip
きっと半年後ぐらいに自分で見直して、「いったいこれは何をやっているんだ・・・!( ・`ω・´)」ってなると思うので簡単に処理をメモします。(ここは本当に自分用です。低レベルです。すみません、すみません。。)
-
pwdでカレントディレクトリ(Linux形式)を取得 -
trで末尾の改行コード除去 -
iconvでUTF-8からShift-JISに文字コード変換(後述のclipツールに渡すための準備) -
sedで/を\に置換したり、冒頭の\(任意の文字)の後に:入れたり、冒頭の\(任意の文字)の\消したり -
clipツールに渡してクリップボードへ
sedさんは本当に素晴らしいですね。
参考
とても助けていただいた記事の皆様です。ありがとうございますm(_ _)m