Cygwin:CDからWindowsパスに簡単に移動する

Cygwin:CDからWindowsパスに簡単に移動する

Windowsでは、パスが(不合理に)非常に長いため、一部のリンクを端末にドラッグアンドドロップするか、ファイルマネージャからパスをコピーして貼り付けるのが一般的です。シェル初期化ファイルに同様の機能を置くことができます

cdw() { cd "`cygpath -u $1`"  }

これでWindowsバージョンがありますcd。 「C:\Program Files」がクリップにあると仮定すると、次のように入力できます。

cdw" CTRL+ V"

そしてそこにCDがあります。私はあなたの言葉に同意します。引用符は退屈です。 cdw CTRL+ V(二重引用符なし)はキラーになりますcd。示されているように、
Bashでこのコマンドを利用するのは簡単です。historyここ。しかし、私は使用していますzsh。ここで実行すると、 history最後のコマンド(つまりそれhistory自体)は返されません。試行錯誤を経て次のような機能を考え出しました。

cdw(){
  print -s 
  set $(fc -l -1 | tail -2 | head  -1)
  shift 2
  p=`cygpath -u "$*"`
  cd "$p"
}

動作しますが、複雑すぎるようです。あなたが私よりもエレガントな解決策を見つけることができるかどうか疑問に思います。

ベストアンサー1

履歴ハッキングはこの問題を解決する非常に奇妙な方法であり、非常に脆弱です。括弧などのWindowsファイル名の特定の有効な文字には機能しません。

貼り付けたWindowsパスを使用する簡単な方法があります。これを行エディタに貼り付けるのではなく、getclipユーティリティを呼び出します(例:cygutils-extra最新バージョンのCygwinから)。

cdw () {
  cd -- "$(getclip)"
}
cd -- "`getclip`"/../foo

$IFSdirパスに文字(デフォルトではスペース、タブ、改行、NUL)が含まれていない場合は、二重引用符を使用する必要はありません。

パスを編集できるようにするには、キーを次にバインドします。expand-or-complete-prefix、たとえば、次のように入力してタップし"`getclip`"ますEsc Tab

bindkey '\e\t' expand-or-complete-prefix

別のアプローチは、キーをバインドしてクリップボードの参照内容を挿入することです。

insert-quoted-clipboard-content () {
  LBUFFER+=${(q)$(getclip)}
}
zle -N insert-quoted-clipboard-content
bindkey '^X^V' insert-quoted-clipboard-content

おすすめ記事