web-dev-qa-db-ja.com

bashのディレクトリ履歴はありますか?

Bashの逆検索履歴(Ctrl-r)のようなものはありますか?

ジャンプしたい深いフォルダー階層がいくつかあるので、reverse-search-historyのようなものを使用したいのですが、フォルダー名のみを検索し、絶対パスを提供します。

基本的に、!?を使用した場合と同様の結果が得られますが、前にcdがあるコマンドのみが一致し、結果とフルパスをステップ実行できます。

これまでのところ、私が見つけた最良の解決策は bashmarks です。

26
idbrii

autojump を見てください:

最もよく使用されるシェルコマンドの1つは「cd」です。私の友人の間で簡単な調査を行ったところ、彼らが入力したすべてのコマンドの10〜20%が実際にはcdコマンドであることがわかりました残念ながら、cdを使用してシステムのある部分から別の部分にジャンプするには、ほぼ完全なパスを入力する必要があります。これはあまり実用的ではなく、多くのキーストロークを必要とします。

autojumpは、ファイルシステムをナビゲートするためのより高速な方法です。コマンドラインから最もよく使用するディレクトリのデータベースを維持することで機能します。 jumpstatコマンドは、データベースの現在の内容を表示します。データベースが使用可能になる前に、少し作業する必要があります。データベースが適切に完成したら、次のように入力して、一般に「cd」されたディレクトリに「ジャンプ」できます。
j dirspec

11
Graham

有る

cd -

これは、「cd [space] [hyphen]」コマンドです。これは、前のディレクトリに移動します。基本的に「履歴の深さ1」です。 「cd-」を繰り返すと、2つのディレクトリ間を行き来します。

マンページの引用:

次のオペランドがサポートされます:[...]

[ハイフン]がオペランドとして使用される場合、これはコマンドと同等です:

      cd "$OLDPWD" && pwd

残念ながら、実際の組み込みのディレクトリ履歴は知りません。

6
apurkrt

bashにはpushd/popd/dirsがあります。これを.bashrcに入れて、ディレクトリをbashのスタックに自動プッシュします。

#let cd also pushd directories into stack. Use popd to reverse stack
function cd ()
{
  if [ -e $1 ]; then 
    pushd $1 &> /dev/null   #dont display current stack 
  fi
}

popdを使用してこれらをポップし、dirsを使用してスタックを表示します

3
user3131651

私は z-jump で良い経験をしました。これは、パスをステップスルーするのではなく、最終的な宛先に対してのみですが、完了を許可します。ただし、タブの完了時にフルパスが表示されます。

2
ovid

ディレクトリ履歴をすばやく移動するためにltcdをお勧めします。

https://github.com/dczhu/ltcd

cd demo gif

生活を楽にする次の機能を提供します。

  • すべての端末タブ/ウィンドウから最近アクセスしたディレクトリを示すグローバルディレクトリリスト。
  • 現在のシェルセッションに対してローカルなローカルディレクトリリスト。
  • どちらのリストでも、j/k(下へ/上へ)、数字、およびWord検索を使用したクイックナビゲーションがサポートされています。
  • グローバルフリージャンプ(たとえば、「cd dir」または「cd ar」で/ path/to/foo/bar/directory /に移動)。
1
treulz

私自身の経験を活かすために、私はこの要件に対処するための簡単なスクリプトを少し前に書きました。これは、組み込みのcdコマンドを、履歴ファイルに新しいディレクトリの場所を追加する単純な関数でオーバーライドします。pythonスクリプトを使用して、bashの逆コマンド検索のように、検索語を入力するとディレクトリの順序付きリストを動的に更新するbashインターフェースを提供します。

好奇心旺盛な方は git-hub で入手できます。

1
Gearoid Murphy

script を作成しましたが、 oh-my-zshのdirs -v bashで動作するコマンド。 oh-my-zsh を使用したことがある場合は、コマンドdirs -vによって提供されるディレクトリ履歴が毎回リセットされることに気づいたかもしれませんターミナルを出るとき。ただし、この script を使用しても発生しません。

機能:

  • 最近使用した10個のディレクトリのリストをdで表示します。

  • リスト内のディレクトリの番号を入力して、リスト内の任意のディレクトリにジャンプします。 10番目のディレクトリにジャンプするには、10ではなく0を使用する必要があります。

  • vvim )を使用してファイルまたはoxdg-open )は、そのディレクトリからファイルを開きます。または、必要に応じて、ディレクトリにアクセスするたびに。

あなたはそれを実際に見ることができます ここ

1
M Imam Pratama

cdpushdpopd組み込みコマンドを使用して、独自のdirsコマンドを作成できます。

使用法

  • cd --(現在の履歴をリスト)

  • cd -num(numディレクトリに移動)

  • cd -(前のディレクトリに移動)


function cd()
{
    local hnum=16  # number of entries
    local new_dir index dir cnt
    if ! [ $# -eq 0 ]; then
        if [[ $# -eq 2 && $1 = "--" ]]; then
            shift
        else 
            if ! { [ $# -eq 1 ] && [[ $1 =~ ^(-[0-9]{,2}|-|--|[^-].*)$ ]] ;}
            then
                builtin cd "$@"
                return
            fi
        fi
    fi
    [ "$1" = "--" ] && { dirs -v;  return ;}
    new_dir=${1:-$HOME}
    if [[ "$new_dir" =~ ^(-[0-9]{,2}|-)$ ]]; then
        index=${new_dir:1}
        [ -z "$index" ] && index=1
        new_dir=$(dirs -l +$index) || return
    fi
    pushd -- "$new_dir" > /dev/null || return
    popd -n +$hnum &> /dev/null
    new_dir=$PWD cnt=1
    while dir=$(dirs -l +$cnt 2> /dev/null); do
        if [ "$dir" = "$new_dir" ]; then
            popd -n +$cnt > /dev/null
            continue
        fi
        let cnt++
    done
}

export -f cd
0
mug896

さて、あなたはあなたの~/.bashrcにこのコードスニペットを追加することができました、それは

  1. カスタムcdコマンドを提供します

        function cd ()
        {
            exists=false
            for dir in "${CDHIST[@]}"; do
                [ "$dir" == "$1" ] && {
                    exists == true
                    break
                }
            done
    
            $exists || {
                len=${#CDHIST[@]}
                ${CDHIST[$len]} = "$1"
            }
    
            builtin cd "$1"
        }
    
  2. cd履歴検索コマンドを提供します。

    function cdhist ()
    {
        #TODO: Make this magical.
    
        for dir in "${CDHIST[@]}"; do
            echo "$dir"
        done
    }
    

もちろん、私が提供したcdhistコマンドは非常に基本的なものであり、望んだものではありません。しかし、caseステートメントまたはパラメーター拡張を使用して、希望するものに似たものを実現することが考えられます。

cd /path/to/mydirの一意のサブストリングに基づいて完全な/path/to/unique/mydirコマンドを追加するために使用できる「プログラム可能な補完」関数を追加することもできますが、その方法ではcd unique/mydir<tab>を入力する必要があります。

0
jpaugh