![我如何才能有效地在 bash 命令行中移动?](https://linux22.com/image/1231848/%E6%88%91%E5%A6%82%E4%BD%95%E6%89%8D%E8%83%BD%E6%9C%89%E6%95%88%E5%9C%B0%E5%9C%A8%20bash%20%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B8%AD%E7%A7%BB%E5%8A%A8%EF%BC%9F.png)
所以我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.
这比 !! 或 !$ 好得多,因为您可以实际看到即将运行的内容,并且所需的击键次数更少。
编辑:严格来说它不是meta,alt所以它也可能与“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
滚动浏览所有搜索。j
k
更多帮助这里,该链接中还有一些内置的 bash 内容,可能更符合您的要求。
干杯,斯图。
答案4
在您给出的示例中,使用 !$ 来表示前一个命令的最后一个参数:
mkdir /某物/其他东西
光盘!$
您还可以使用编号变体来提取先前命令的特定参数。