我如何才能有效地在 bash 命令行中移动?

我如何才能有效地在 bash 命令行中移动?

所以我up在我的 shell 中使用(主要是 OSX 或 Ubuntu 上的 Bash),但有时我知道我想要的东西光标当前的位置。有没有办法让我所在的行完全的上面那行?打完up然后left就烦人了。

任何其他技巧也都很酷,除了tab,我们现在都知道:)

这是一个例子(根据~quack 的要求):

我输入mkdir /where/the/hell/is/that/thing完后想进入同一目录。但现在我知道了 meta-b :)

答案1

尝试这个:

mkdir /where/the/hell/is/that/thing

然后按alt+.

根据您的操作系统和终端,您可能需要 esc输入.

您也可以按 ++alt来选择特定的先前参数。1.

这比 !! 或 !$ 好得多,因为您可以实际看到即将运行的内容,并且所需的击键次数更少。

编辑:严格来说它不是metaalt所以它也可能与“windows”键一起使用,具体取决于您的键盘的设置方式。

答案2

你应该读一读男子猛击在您的系统上,特别是雷德莱恩,因为这是 bash 的交互式输入机制。gnu.org 上的 Bash 手册有很好的部分命令行编辑这将有助于填补一些空白。

默认情况下,您可以使用它们来四处走走在命令行上(这里只列出几个;请参阅链接以获取完整列表):

  • Ctrl+a移动到行首(或Home取决于终端设置)
  • Ctrl+e移至行尾(或End...)
  • Meta+f向前移动一个“单词”
  • Meta+b向后移动一个“单词”

您可以使用这些“kill”(又名“cut”)文本来自一行:

  • Ctrl+k删除(“剪切”)从当前光标位置到行尾的文本
  • Ctrl+y将最近删除的文本拉回到光标处的缓冲区中

因此,您可以组合这些来选择您想要重复的某些命令行块,将其删除,然后将其粘贴到下一个命令的末尾。


现在,为了让它更有趣,让我们考虑一下 bash 的历史扩展. 这就是!!那个Studer 的回答提到. 历史扩展分为事件指示符字指示符, 和修饰符

事件指示器看起来像这样(再次查看完整列表的链接):

  • !- 开始历史替换
  • !n- 这第 n 个bash 历史列表中的命令,用于表示某个整数n(对底片同样有效)
  • !!- 前一个命令;相当于!-1
  • !string- 最新命令以细绳

单词指示符从事件中选择某些部分。用于:将事件与单词指示符分开。单词从行首开始从 0 开始编号,并以单个空格分隔插入当前行。

  • $- 指定最后一个参数(例如,!!:$是最后一个命令的最后一个参数;可以缩写为!$
  • n- 指定第 n 个单词(例如,!str:2是最近命令的第二个参数,以字符串;!!:0是个命令最后一个命令)

因此,按照您的示例,如果您的最后一个命令是mkdir /some/really/long/path,则只需运行!!即可再次运行该命令。但是您想cd改为进入该路径:

$ cd !$

现在假设你执行了一些其他命令,然后想再次返回该路径。如果这是最后一个建立目录您运行的命令,可以使用它来重复该路径:

$ tar czf ~/foo.tgz !mkdir:$

答案3

如果您是 vi 用户,您可以通过键入 使 shell 进入 vi 模式set -o vi

然后,您可以在命令行上输入后执行各种强大的操作Esc + k

我最常用的是Esc+K斜杠/后输入的任何文本都将用于搜索命令行历史记录。

例如,将给出您输入的最后一个 smbclient 命令。您可以使用标准 vi 键(以及上下箭头,但我认为上下箭头也可以)Esc + k /smbclient 滚动浏览所有搜索。jk

更多帮助这里,该链接中还有一些内置的 bash 内容,可能更符合您的要求。

干杯,斯图。

答案4

在您给出的示例中,使用 !$ 来表示前一个命令的最后一个参数:

mkdir /某物/其他东西

光盘!$

您还可以使用编号变体来提取先前命令的特定参数。

相关内容