2012-04-18

sudo.vim があるときの zsh 補完関数

先日、
てなことを思ったのですが、ついでなので補完関数書いてみよう、ということで書いてみました:
function _vimsudo {
  local LAST="${words[$#words[*]]}"
  case "${LAST}" in
    sudo:*)
      local BASEDIR="${LAST##sudo:}"
      BASEDIR="${~BASEDIR}"
      [ -d "${BASEDIR}" ] && BASEDIR="${BASEDIR%%/}/"
      compadd -P 'sudo:' -f $(print ${BASEDIR}*) \
      && return 0
      ;;
    *)
      _vim && return 0
      ;;
    esac

  return 1
}
ファイル名にワイルドカードを含めたとき(sudo:/etc/*conf とか)は上手く動きません。うーん
  • 2012-04-27:色々とミスっていたので修正。そもそも sudo: で始まるときだけやればいいのでした
  • 2012-04-30:ご指摘のとおり esac が抜けていました。
  • 2012-08-29:実は find いらないんですよね

1 件のコメント:

  1. ありがたく使わせてもらっています。
    上の例だとesacが足りなくないでしょうか?

    あと滅多に使わない場合ですが、~が入るとうまく補完できないようなので、findには${~D}を渡して、もう一個sedを追加して、$HOMEを~に置換するとなんとか動いているようです。もっと良いやり方があるのかもしれませんが、sudo:をつけて~を使うことが滅多にないでしょうから対応する意味もないかもしれません。

    返信削除