簡略化された端末ナビゲーション

簡略化された端末ナビゲーション

私はIDEが将来の波であることを知っていますが、常にvimLinux端末でコーディングしています。古い犬には新しい才能があります。

とにかく長いパッケージ名を処理すると、ナビゲーションが困難になります。たとえば、端末でプロンプトの一部として現在のパスを表示できます。時々私はここにいます:

/foo/bar/src/com/example/yomama/

私が到達したい場所:

/foo/bar

私はいくつかの素晴らしいエイリアスがあります:

alias 1down="cd .."
alias 2down="cd ..;cd .."
alias 3down="cd ..;cd ..;cd .."
alias 4down="cd ..;cd ..;cd ..;cd .."
alias 5down="cd ..;cd ..;cd ..;cd ..;cd .."

だから私がそれを入力すると4down、パン!私はここにいます/foo/bar

私の現在の作業ディレクトリは次のとおりです。

/foo/bar/src/com/example/yomama/

/up 2で/foo/barにアクセスすることもできます。

だから、上がる量を計算する方が簡単なので、2up機能を実装するのが良いでしょう。シェルスクリプトの作成を始める前に、よりエレガントなソリューションを提供できるシェルツールがあるかどうかを知りたいです。実装できる文章を知っている人がいればボーナスポイントですNup

PS:すでに持っています。

alias bar = "cd /foo/bar"

ここでは、より一般的な解決策を探しています。

$PWDPPS:私はいつもクリックできるコンテンツをプロンプトに追加するのが本当にクールだと思いました。だからbarcdとをクリックします/foo/bar。しかし、おそらくグラフィックIDEに移動して終了する必要があるようです;-)

編集する:

Nupの私の定義は少し混乱しています。

Nupは、PWDのルートから始まるN番目のパス位置に移動します。したがって、現在/a/b/c/d/e/f/g/h/iにある場合、4upは/a/b/c/dに移動します。同様に、5down は /a/b/c/d を取得します。

デフォルトでは、「cd ..」を複数回タフに入力したり、「cd /a/b/c/d」を指定しなくてもパスを移動できます。

答え1

ファイルの2つの機能を.bashrc使用すると、ディレクトリスタックを使用していくつかのナビゲーションを実行できます。

function down ()
{
  if [[ -z "$1" ]]
  then
   n=1
  else
   n=$1
  fi

  for ((i=0; i<$n; i++ ));
  do
      pushd .. > /dev/null
  done;
}
function up ()
{
  if [[ -z "$1" ]]
  then
   n=1
  else
   n=$1
  fi

  for ((i=0; i<$n; i++ ));
  do
      popd > /dev/null
  done;
#  dirs -c  # To clear directory on up motion
}

down Nとをそれぞれ使用できる場所ですup N

使用例:

~/tmp/bash/dir1/dir2/dir3$ down 4
~/tmp$ up 2
~/tmp/bash/dir1$ up 2
~/tmp/bash/dir1/dir2/dir3$ down 2
~/tmp/bash/dir1$ down 1
~/tmp/bash$ up 3
~/tmp/bash/dir1/dir2/dir3$

もちろん、up N使用する前には使用できませんdown N。予期しないことが発生したり、エラーメッセージが表示されることがあります。

答え2

前後に移動して以前にあったディレクトリに戻る方法は次のとおりです。これは、ファイルシステムの他の部分を前後に移動する場合に特に便利です(開発中に非常に一般的です)。

サポートする:

up # (go up any # of directories)
goback 
goback # (the # is optional to go back any #)
prev (go to the last dir you were in)

これにより、システムの任意のディレクトリにCDを挿入してから以前のディレクトリに戻すことができます。これは、最後のディレクトリの場所を保存するためです。

メモ:このコンテンツの超短いバージョンを表示するには、一番下までスクロールしてください。

ステップ1:(nano/vim) ~/.bashrc を編集し、一番下に以下を追加します。

declare -a DIR_STACK

cd() {
    DIR_STACK+=("$PWD")
    builtin cd "$@" && pwd || { unset 'DIR_STACK[-1]'; return 1; }
}

up() {
    local count=${1:-1}
    for _ in $(seq 1 $count); do
        [[ $PWD != / ]] && DIR_STACK+=("$PWD") && builtin cd .. || { echo "Error: Reached root directory."; return 1; }
    done
    pwd
}

goback() {
    local count=${1:-1}
    while [[ ${#DIR_STACK[@]} -gt 1 && count -gt 0 ]]; do
        builtin cd "${DIR_STACK[-2]}"
        unset 'DIR_STACK[-1]' && ((count--))
    done
    [[ $count -eq 0 ]] && pwd || echo "Error: Cannot go back any further."
}

prev() {
    [[ -n $OLDPWD ]] && builtin cd - > /dev/null && pwd || echo "Error: No previous directory stored."
}

ステップ2。ソース ~/.bashrc

ステップ3。仕組みは次のとおりです。

[root@agent colors]# pwd
/etc/xdg/colors
[root@agent colors]# cd /
/
[root@agent /]# goback
/etc/xdg/colors
[root@agent colors]# cd ..
/etc/xdg
[root@agent xdg]# goback
/etc/xdg/colors
[root@agent colors]# cd ../../
/etc
[root@agent etc]# goback
/etc/xdg/colors
[root@agent colors]# up 2
/etc
[root@agent etc]# goback
/etc/xdg/colors
[root@agent colors]# cd ..
/etc/xdg
[root@agent xdg]# prev
/etc/xdg/colors
[root@agent colors]# cd /
/
[root@agent /]# goback 3
/etc/xdg/colors
[root@agent colors]# up 3
/
[root@agent /]# goback 3
/etc/xdg/colors

.bashrcの単純なバージョン(読みやすさが低い):

declare -a DIR_STACK
cd() { DIR_STACK+=("$PWD"); builtin cd "$@" && pwd || { unset 'DIR_STACK[-1]'; return 1; }; }
up() { local count=${1:-1}; for _ in $(seq 1 $count); do [[ $PWD != / ]] && DIR_STACK+=("$PWD") && builtin cd .. || { echo "Error: Reached root directory."; return 1; }; done; pwd; }
goback() { local count=${1:-1}; while [[ ${#DIR_STACK[@]} -gt 1 && count -gt 0 ]]; do builtin cd "${DIR_STACK[-2]}"; unset 'DIR_STACK[-1]' && ((count--)); done; [[ $count -eq 0 ]] && pwd || echo "Error: Cannot go back any further."; }
prev() { [[ -n $OLDPWD ]] && builtin cd - > /dev/null && pwd || echo "Error: No previous directory stored."; }

答え3

これはまさにあなたが要求した答えではありませんが、次のことに興味があるかもしれません。ミッドナイトコマンダーファイルブラウザ、すべてのLinuxディストリビューションリポジトリで利用可能である必要があります。mcコンソールvimに似た呪いを使用してください。これは、2つのパネルで構成されるファイルナビゲーションインターフェイスを提供します。下部にコマンドプロンプトがあります;矢印キーを使用してディレクトリを参照し、コマンドを入力できます(コマンド履歴を参照するには、ctrl-nとctrl-pを使用します)。 Ctrl-o はインターフェイスを上下に切り替えます。インターフェイスが開くと、同じディレクトリの通常のサブシェルになります。ここでvimを起動することができ、EDITOR=vim環境のオプション - >設定で「内部編集を有効にする」を設定して選択を解除すると、ファイルがハイライトされた状態でF4を押すとvimが実行されます。私のお気に入りのソフトウェアの一つであり、使い方を学ぶ価値があります。

X 端末では、インターフェースをマウスと一緒に使用できます。これをインストールした場合は、VTでマウスを使用することもできますgpm

答え4

すべてのコメントと回答に感謝します。今朝麺と一緒にこんな気がしました。

alias 1up='cd /$(echo $PWD | cut -f 2 -d /)'
alias 2up='cd /$(echo $PWD | cut -f 2,3 -d /)'
alias 3up='cd /$(echo $PWD | cut -f 2,3,4 -d /)'
alias 4up='cd /$(echo $PWD | cut -f 2,3,4,5 -d /)'
alias 5up='cd /$(echo $PWD | cut -f 2,3,4,5,6 -d /)'

bashがエイリアスのパスワードを拡張しないように、単一引用符が必要です。これには関数を書くことができますが、5upと5downだけが必要です。

コメントありがとうございます。私はcutを使用する代わりに純粋なbashを使用してパス変数を解析したいのですが、実際にやるべきことがあります;-)

関連情報