0

多くの場合、私のプロジェクトでは、ファイル システムの奥深くに SCSS+Compass ディレクトリがあります。

たとえば、私のプロジェクトはすべて下~/Web/com.example.subdomainにあり、時にはスタイル ディレクトリが~/Web/com.example.subdomain/trunk/docroot/_assets/locked/styles.

CD コマンド全体を 1 日に何度も入力するのは、明らかに少し反復的です。プロジェクトごとにエイリアスを作成することもできますが (例: alias cd-com.marketo.subdomain-scss="...")、25 以上のすべてのプロジェクトに対してエイリアスを追加して維持する必要があります。

では、効果的に入力できる関数を作成するにはどうすればよいでしょうか。

$ cd ~/Web/com.example
$ cd-compass

ここから、cd-compass は次のようになると思います。

  1. またはfind .を探す何らかの形式のコマンドを使用するconfig.rb.sass-cache/
  2. 両方が同じディレクトリに存在する場合は、それがコンパス ディレクトリであることがわかります...
  3. .sass-cache/が存在せず、存在する場合はconfig.rb、実行されますcompass stats /the/dir
    1. Nothing to compile. If you're trying to startコンパス ディレクトリでない場合、出力は...で始まります。
    2. コンパス ディレクトリの場合は、統計情報を吐き出し、.sass-cache/ディレクトリを作成します。
  4. ディレクトリが正常に検出されると、そのディレクトリに CD が挿入されます。

ボーナスポイント:

コンパス コマンドを含める機能を追加して、入力cd-compass compile --forceが上記のフローに従い (ディレクトリへの cd を含む)、実行するようにします。compass compile --force

おそらくこの場合、コマンドはcompass-door fcompassor lcompass(f = find; l = locate) になります。

スーパーボーナスポイント:

複数の Compass インストールが見つかった場合は、オプションの番号付きリストを表示します。数字の 1 つを入力して Enter キーを押すと、そのオプションが続行されます。

これにより、基本的に次のように入力するだけで済みます。

$ cd-compass

1. /home/user/Web/git/com.example/trunk/docroot/admin/styles/compass

2. /home/user/Web/git/com.example/trunk/docroot/styles/compass

3. /home/user/Web/svn/com.example.sub/trunk/docroot/_assets/locked/styles

Which one? > __

4

2 に答える 2

1

Zは、コマンドラインのディレクトリにすばやくジャンプするというより一般的な問題を解決します。これは、cd先のディレクトリのデータベースを構築し、それらを「頻度」(頻度と最新性に基づく合計スコア)でランク付けすることによって行われます。

いくつかのディレクトリにアクセスしたら、それらにジャンプし、zその後に1つ以上のサブストリングを続けます。たとえば、gitolite管理リポジトリにアクセスするには、と入力するだけですz gito

于 2013-03-08T00:45:27.290 に答える
1

これはあなたが望んでいたすべてを行うわけではありません - たとえば、.sass-cache が見つからない場合は構築しませんが、それを拡張するのは簡単なはずです (読者の演習:-)。また、ディレクトリ名にスペースが含まれていると機能しません。

実際、これはシェル エイリアスとしては少し大きいです。

まず、すべての潜在的なディレクトリを変数に入れる必要があります

dirs=$(find . -name config.rb -o \( -type d -name .sass-cache \) | sed -e 's,/.sass-cache$,,' -e 's,/config\.rb$,,' | sort | uniq -c | grep '^ *2 ' | sed -e 's/^ *2 //')

このビットは find を呼び出して、config.rb と呼ばれるファイルまたは .sass-cache と呼ばれるディレクトリを検索します。次に、パスの最後の部分を sed で削除してディレクトリ名を取得し、結果を並べ替えて、簡単な結果のパスの数をカウントします。次に、2 回出現するディレクトリだけを抽出し、ディレクトリの先頭からカウントを取り除きます... Compassディレクトリのリストがあります

次に、それらの数を数えます。

count=0 ; for i in $dirs ; do : ; count=$((count+1)) ; done

または、dirs 変数をエコーし​​て「wc -w」にパイプすることで、カウントを取得することもできます。

次に、カウントのさまざまな可能な値を処理します

if [ $count -eq 0 ] ; then echo no compass directory found; exit ; fi

if [ $count -eq 1 ] ; then cd $dirs ; exit ; fi

if [ $count -gt 1 ] ; then idx=1 ; for i in $dirs ; do echo $idx $i; idx=$((idx+1)) ; done ; fi

while true
do
    echo -n "enter directory number: "
    read choice
    if [ $choice -gt $count ]
    then
        echo "invalid choice"
    else
        idx=1
        for i in $dir
        do
            if [ $idx -eq $choice ]
            then
                cd $i ; exit
            fi
            idx=$((idx+1))
        done
    fi
done
于 2013-03-07T20:40:53.570 に答える