【问题标题】:How to implement a 'back' and 'forward' in bash using alt-left and alt-right?如何使用 alt-left 和 alt-right 在 bash 中实现“后退”和“前进”?
【发布时间】:2020-04-16 23:18:56
【问题描述】:

问题基本上就是这样。尝试使用给定的组合键实现“后退”和“前进”功能。我认为最好的方法是创建一堆访问过的目录,一个用于前进,一个用于后退。这是最好的方法吗?是否有一个变量已经保存了我可以调用的这些信息?在我意识到我不能只保存最新的目录之前,我就有了这个。

previous_wd='~'
next_wd='~'
cd()
{
    previous_wd=$(pwd)
    builtin cd "$@"
}

back_to_previous_directory()
{
    next_wd=$(pwd)
    cd "$previous_wd"
}

forward_to_previous_directory()
{
    cd "$next_wd"
}

up_a_directory()
{
    cd ..
}

# \C-u clears the line
bind '"\e[1;3D":" \C-uback_to_previous_directory\n"'        # go back a directory on alt+left
bind '"\e[1;3A":" \C-uup_a_directory\n"'                    # go up a directory on alt+up
bind '"\e[1;3C":" \C-uforward_to_previous_directory\n"'     # go forward a directory on alt+right

【问题讨论】:

  • cd - 可能会做你想要实现的事情吗?
  • 不清楚您所说的“上一个”/“前进”/等是什么意思。给出一个具体的例子,说明 cwd 应该如何使用你的绑定来改变。如果您在不使用绑定的情况下键入 cd another_dirpopd 会发生什么?
  • @khansh :返回是微不足道的(使用 popd,如果你使用 pushd 而不是 cd 来更改目录),但 bash 不提供继续前进。在这种情况下,您确实必须编写自己的函数。您的方法还不错,但是您需要存储到目前为止访问过的目录的列表,而不是previous_wdnext_wd,以便您可以在列表中前进/后退。我建议您为此使用 bash 数组,并且您还需要一个指针(该数组的索引以指向您现在所在目录的位置。

标签: bash shell directory scripting stack


【解决方案1】:

您可能有兴趣使用pushdpopd 而不是cd

这两个命令应该一起使用 - pushd(推送目录)会将当前目录推送到堆栈上,并导航到新目录(作为参数提供)。 popd(弹出目录)会返回上一个目录,并从栈中移除

addison:~$ pushd /tmp
addison:/tmp$ pushd /etc
addison:/etc$ popd
addison:/tmp$ popd
addison:~$ popd

这些应该可以让您有效地来回导航。每次您通常使用cd 时只需使用pushd,然后使用popd 即可返回上一个位置!

【讨论】:

    猜你喜欢
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2017-11-29
    相关资源
    最近更新 更多