bashの「ブックマーク」


24

ネストされたディレクトリのいくつかのレイヤーをナビゲートすることは、しばしば苦痛です。Firefoxでは、ブックマークがあるため簡単です。ファイルをブックマークするために私がしたいことは、次のように入力することです。

$ go --add classes "repo/www/public/util/classes"

次に、このディレクトリに移動するには、次のように入力します。

$ go classes

以前は、シンボリックリンクを使用して同様のことを実現しましたが、ホームディレクトリを整理したくありません。他にも便利な機能がたくさんあります。たとえば、入力を開始go clしてからTabキーを押してオートコンプリートできるようにします。時々、チェックアウトされたリポジトリの複数のコピーがあるため、プログラムが複数のコンテキストを作成し、コンテキストベースディレクトリに関連してブックマークを設定できるようにすると便利です。

それで、私自身のスクリプトのセットを一緒にまとめることを始める前に、すでにこのような何かがありますか?



4
bashをfirefoxと比較し続けると、誰かがbashの素晴らしいバーを作成します:(
hhaamu

回答:


12

シェルブックマークツールを長い間探していましたが、見つけた解決策に満足していません。

しかし、最終的に私は素晴らしい、普遍的なツールに出くわしました:コマンドラインファジーファインダー

主にファイルを「ファジー検索」できます(上記のリンクでリッチGIFアニメーションを確認してください)が、任意のテキストデータをフィードに送り、このデータをフィルタリングすることもできます。したがって、ショートカットのアイデアは簡単です。必要なのは、パス(ショートカット)を持つファイルを維持し、このファイルをファジーフィルター処理することだけです。外観は次のとおりです。cdgコマンドを入力し(必要に応じて「cd global」から)、ブックマークのリストを取得し、数回のキーストロークで必要なものを選択してEnterキーを押します。作業ディレクトリは、選択したアイテムに変更されます。

cdg

これは非常に高速で便利です。通常、必要な項目の3〜4文字を入力するだけで、他のすべての項目は既に除外されています。また、もちろん、矢印キーまたはCtrl+j/を使用してリスト内を移動できますCtrl+k

このショートカット/ブックマークソリューションに関する詳細記事はこちらです:あなたのシェルのファジィショートカット


19

オートジャンプのようなものを探していると思います。特定のディレクトリで費やされた時間と相関する「キーの重み」のセットを作成するには、少しCDを作成する必要があります。次に、その「クラス」ディレクトリで多くの時間を費やしたと仮定すると、次のように入力してそこに直接ジャンプできます

j cl

「キーの重み」を表示するには

jumpstat

私は最近、少しはより複雑見つけましたが、面白い、と関連、というツールfgithub.com/clvv/f
tcdyl

14

saeednが述べているように、エイリアスは良いメカニズムです。bashシェルには、場所に直接ジャンプするための組み込みメカニズムもありますCDPATH。のようPATHに設定しますが、cdプログラムを検索する代わりに使用されます。

$ CDPATH=:~/repo/www/public/util
$ cd classes
/home/casebash/repo/www/public/util/classes

マンページから:

   CDPATH The search path for the cd command.  This is  a  colon-separated
          list  of  directories  in  which the shell looks for destination
          directories specified by the cd  command.   A  sample  value  is
          ".:~:/usr".

私自身は、これを行きたい場所へのシンボリックリンクがあるディレクトリと組み合わせました:

$ mkdir ~/cdshortcut
$ ln -s ~/repo/www/public/util/classes ~/cdshortcut/classes
$ CDPATH=:~/cdshortcut
/home/casebash/cdshortcut/classes

これには、ディレクトリが完全に正しいようには見えないという欠点がありますが、cd -Pまたはsetting を使用して修正できますset -P


CDPATHは面白いですが、動作は常に予測可能であるように、それは別のgoコマンドを使用して、おそらく価値がある
Casebash

1
セット-Pの場合は+1。私のシンボリックリンクのいくつかは、本当にどこに行ったのか思い出せず、その情報を表示するコマンドを覚えていなかったので、私を夢中にさせました。
ジョー

@Joe、システムシンボリックリンクの場合はシンボリックリンクディレクトリにいることを気にしないので、alias C='cd -P .'ではなく、追加しset -Pます。
ワイルドカード

@Wildcard-興味深い-これがあなたに違いをもたらす例を挙げていただけますか?私は走りましたがhelp cd、それでも-Pオプションが何をするのか理解していません。
ジョー

@ジョーmkdir test; ln -s test linktotest; cd linktotest; pwd; cd -P .; pwd
ワイルドカード

9

Bashの既存の履歴と履歴検索機能を組み合わせることができます。を押しCtrl-Rてインクリメンタル逆検索を開始し、パスの中で一意である可能性が最も高い部分の入力を開始します。

cdそのディレクトリに関連する最新のコマンドに戻るまで文字を入力し続けることができます。または、Ctrl-Rもう一度押すと、過去に入力したものと一致する次の最新のコマンドに戻ることができます。

私はいつもこれをしています。

実際、私はそれをさらに一歩進めます。履歴を保持する価値があるがシェルスクリプトにコミットする価値がないコマンドのシーケンスを発見し始めたら、それらのチェーン&&;コンビネータをチェーン化して、その長いコマンドのサブストリングを逆検索し、Enterシーケンス全体をヒットして実行できるようにします一度。

たとえば、開発中にプログラムの1つをビルドして実行する方法は次のとおりです。

$ ( cd .. ; make install ) && ./start_my_program

これは、最上位のソースディレクトリの下にあるインストールディレクトリから行います。サブシェルcdでビルド、インストール、パーツをラップすることにより、このプロセス中に何が起こっても、変更なしで通常のシェルに戻ることができます。それが成功した場合のみ(&&)ビルドおよびインストールされたプログラムを開始します。私は、このコマンドシーケンスを一意に見つけるために通常必要なのCtrl-Rsta、その当時の履歴で見つけることができます。

私がこれをどのように使用するかの別の例は、この同じプログラムのRPMを構築するシーケンスです。面倒な作業のほとんどはシェルスクリプトですが、ビルドされたRPMのビルドと展開のすべての作業を行うために通常入力する必要のあるコマンドがいくつかあります。私にとっては歴史の中で。

これらすべてをexport HISTSIZE=bignumand shopt histappendと組み合わせると、エレファンティンコマンドメモリが構築されました。

私が一度コーディングした別の解決策は、別の質問への私の答えです。目的に合わせて調整する必要がcdあり、コマンドのみを処理しますが、履歴検索オプションはどこでもすべてのコマンドで機能します。


6

私自身はalias、頻繁に訪れる長い道のりを短くするために使用しています。aliasesのセットをに入れて、bashrcログインするたびにbashがそれらを記憶できるようにします。そして幸いなことに、bashはエイリアスを自動補完に追加します。

私はあなたの場合のためにこのような何かを書くでしょう: alias go-classes="cd ~/repo/www/public/util/classes"


6

(githubで)bashmarksを探しているかもしれません。
READMEから:

Bashmarksは、一般的に使用されるディレクトリを保存してジャンプできるシェルスクリプトです。タブ補完をサポートするようになりました。


4

これは決して完全なものでも、誰でもできるものではなく、最初の草案にすぎません。以下~/.bashrcを追加すると、ディレクトリブックマークの削除とリストの追加を行う3つのコマンドがあります(シェルエイリアスに基づいているため、オートコンプリートも取得できます)。

BMFILE=~/.bash.bookmarks
[ -f "$BMFILE" ] && . "$BMFILE"

bmadd() {
    local abm
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    abm="alias $bm='cd \"$(pwd)\"'"

    if grep -q " $bm=" "$BMFILE"; then
        echo "Overwriting existing bookmark $bm"
        bmdel "$bm"
    fi
    echo "$abm" >> "$BMFILE"
    eval "$abm"
    #source "$BMFILE"
}

bmdel() {
    local bms
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    #sed -i.bak "/ $bm=/d" "$BMFILE"
    bms=$(grep -v " $bm=" "$BMFILE")
    echo "$bms" > "$BMFILE"
    unalias "$bm" 2> /dev/null
}

bmlist() {
    sed 's/alias \(.*\)=.cd "\(.*\)".$/\1\t\2/' "$BMFILE" | sort
}

使い方はとても簡単です。bmadd引数を指定すると、引数にちなんだ名前のエイリアスが追加されます。このエイリアスは、設定されたディレクトリへのcdを作成します。引数なしでは、エイリアス名として現在のディレクトリ名を使用します。同様にbmdel、エイリアスが存在する場合は削除し、bmlist現在のブックマークをリストします。

例えば

u@h:~ $ cd /usr/share/doc
u@h:/usr/share/doc $ bmadd
u@h:/usr/share/doc $ cd /usr/local/share/
u@h:/usr/local/share $ bmadd lshare
u@h:/usr/local/share $ cd
u@h:~ $ bmlist
doc     /usr/share/doc
lshare  /usr/local/share
u@h:~ $ doc
u@h:/usr/share/doc $ bmdel lshare
u@h:/usr/share/doc $ bmlist
doc     /usr/share/doc
u@h:/usr/share/doc $

4

しばらく前に同じニーズに出くわし、絶対/相対パスをブックマークして、覚えやすい短い名前にマッピングできるように、いくつかのスクリプトをまとめることにしました。

このスクリプトは非常に使いやすく、ジャンプ先のディレクトリのエイリアスとして指定した短い名前の関数を作成するだけです。必要なことは、単にその短い名前を入力するだけで、ブックマークされたディレクトリに移動します。

以下に、ブックマークスクリプトのソースへのリンクを示します。ところで、私はそれをThe Bookmarkerと名付けました。

使用法

一度インストールすれば、使用するのは非常に簡単です。

ディレクトリをマークするには:

$ mark /this/is/a/very/very/looooong/path mydir

マークされたディレクトリに移動するには:

$ mydir

マークされているものを確認するには:

$ marks
bin     -> /Users/khafaji/bin
eBooks  -> /Users/khafaji/eBooks

マークされたディレクトリを削除するには:

$ umark myDir

その他の例、インストール手順などについては、非常に詳細なドキュメントを参照してください。


3

cdargs ディレクトリブックマークに最適なツールです。

使用例については、cdコマンドのブックマークを参照してください YouTubeのビデオの。

使用例

cdargsncurses GUIであるため、シェル内を視覚的にナビゲートできます。インストールしたら、シェルスクリプトを使用して、指定されたシェルにセットアップします。

$ source /etc/profile.d/cdargs.sh

これにより、シェルから呼び出すことができるいくつかの関数が有効になります。

GUIを呼び出す:

$ cv

このタイプのGUIは次のようになります。

   [.       ]  /home/saml/tst/88040
 0 [path0   ]  /home/saml/tst/88040/path0
 1 [path1   ]  /home/saml/tst/88040/path1
 2 [path2   ]  /home/saml/tst/88040/path2

リストをナビゲートするには、矢印キーを使用して上下に移動できます。左矢印()はディレクトリツリーのレベルを上に移動し、右矢印()はディレクトリにドリルダウンします。

ディレクトリのマーキング:

cナビゲートする現在のディレクトリに使用するか、現在aカーソルで強調表示しているディレクトリを追加するために使用できます。

動作モード:

cdargsこの点でvi / vimに少し似ていますがモードのこの概念があります。ブラウジング(B)とリスト(L)の2つがあります。シェルの下部にあるディスプレイを介して、現在のモードを確認できます。

リストモード:

L: /home/saml/tst/88038

閲覧モード:

B: /home/saml/tst/88038

タブキー(TAB)を押すと、モードを変更できます。

これは氷山の一角にすぎません。詳細については、manページ(man cdargs)および組み込みヘルプを参照してください。


2

これに最適なツールはwcdです。私は他の多くのツールをテストしましたが、これはあなたが求めている方法で正確に使用され、以前のすべてのソリューションよりも多くの意味で優れています。


1

他の答えは素晴らしく具体的です。別の見方をすれば、考えられるほとんどすべてのことを実行できるキーボードマクロプロセッサを使用することです。

AutoKeyを確認してください。ワードプロセッサの自動修正やbash履歴などのフレーズを置き換えることができます。また、定義したホットキーでPythonスクリプトを実行することもできます。

(この問題に関して)唯一の「欠点」は、実行するためにguiが必要なことです-gnomeまたはkde。他の回答にはこの要件はありません。

https://code.google.com/p/autokey/

1

zと呼ばれる別の選択肢があります。

ディレクトリが変更されるたびに学習します。

$ cd /tmp/
$ pwd
/tmp
$ cd
$ pwd
/home/user

その後、あいまい一致を使用して、後でそのディレクトリに変更できます。

$ z mp
$ pwd
/tmp

1

Apparixは、これを行う別のツールです。その便利な機能の1つは、マークのサブディレクトリに直接ジャンプし、それらのサブディレクトリでタブ補完を実行できることです。


0

私が信じる別の解決策は、でautojumpあり、zですfasd

どのディレクトリにアクセスしたかを追跡z dir-nameし、名前の付いたディレクトリに変更しますdir-name最も頻繁に使用するます。また、頻繁に使用されるファイル用の機能も備えています。

次からクローンを作成できますhttps : //github.com/clvv/fasd

インストールは簡単で、クローンを作成し、インストールしてから.bashrc(または.zshrcその他)変更します。


0

.bashrcまたはにエイリアスを追加する必要があります.bash_profile

## navigate to your home directory
$ cd ~
## list the contents of your home directory to see if you have `.bashrc` or `.bash_profile`
$ ls -a 
[`.bashrc` or `.bash_profile` should appear in the list]
## launch the text editor of your choice; I'll use vim here
## if no `~/.bashrc` or `~/.bash_profile`...
$ vim
## if, e.g., `~/.bash_profile` listed...
$ vim ~/.bash_profile

ここで、~/Desktop/Coding/Projectsを入力してを入力するためのショートカットが必要だとしましょうgoto_Projs。テキストエディタで開いたファイルに次の行を追加する必要があります。

alias goto_Projs='cd ~/Desktop/Coding/Projects'

テキストエディタで保存する(/User/<yourusername>/または~/もちろん)して終了するようにテキストエディターに実行してもらい、シェルプロンプトが返されたら

source ~/.bash_profile

これで、上記のようにエイリアスを呼び出すことができます。


0

コマンドの最後にコメントを追加し、コメントのctrl R逆検索を呼び出す方法を使用します。これには次の利点があります。

  • 自然言語でコマンドを検索する
  • その場でいつでもコメントを変更し、最新のアップデートを取得します ctrl R
  • 使用ctrl Rしてtabその場でしてコマンド自体を微調整し、コメントを同様のコマンドのファミリーへの一般的なショートカットのようにします
  • セットアップ、インストール、ブックキーピングは不要です:-)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.