【问题标题】:How to scroll back the terminal to where the last command was given?如何将终端回滚到最后一个命令的位置?
【发布时间】:2013-06-17 06:01:27
【问题描述】:

我有一个大量输出的程序。完成后,我经常想滚动回到运行的开头,以便在那里查看一些东西。由于输出很长,我看到自己无休止地使用 PageUp 滚动并试图将右侧的滚动条拖到可能开始的位置。过了一段时间,这开始变得很烦人,所以我想知道:

有没有办法让终端轻松地滚动回给出最后一个命令的部分?

【问题讨论】:

  • 对于使用 Windows 和 ConEmu 的任何人,您可以使用 Ctrl+Alt+RePag

标签: bash command-line scroll terminal


【解决方案1】:

如果您使用的是 GNOME 终端等终端,则可以向后搜索。例如,Ctrl+Shift+f 然后输入文字命令或正则表达式以匹配它(并确保“匹配为正则表达式”被相应地设置)。

解决方法是将输出发送到诸如less 之类的寻呼机,您可以在其中导航和检查输出,然后返回命令行,就好像没有打印任何内容一样。

【讨论】:

  • 这是唯一对 Linux 有用的答案。 less 命令在我的终端中很乱,所以我现在将使用 Ctrl Shift f 并搜索我的用户名。
【解决方案2】:

简单地将输出重定向到文件,从而保持终端窗口“干净”不是更容易吗?

类似:command >> output_file

【讨论】:

  • 是的,我以前做过。但是在 90% 的情况下,运行是无用的,因为我不需要进一步的结果。过了一会儿,那个文件夹就开始被无用的文件堵塞了。我当然可以覆盖相同的几个文件,但我仍然需要再次打开这些文件,即使我通常只需要几秒钟的时间查看然后再继续。
  • 您是否尝试过类似:command > /dev/null 2>&1。这应该将输出重定向到 /dev/null 的虚无,然后还将错误重定向到标准输出流
【解决方案3】:

如果您与screen 合作,我认为有办法。

  1. 使用screen 命令启动会话
  2. 执行您的命令(在屏幕上输出一些数据)
  3. 键入Ctrl+a,后跟[。屏幕进入复制模式。
  4. 您可以使用 ? 向后搜索命令提示符(就像 vi)

screen 也有很多优点。检查http://kb.iu.edu/data/acuy.html

【讨论】:

    【解决方案4】:

    我刚刚在 OSX 的终端中找到了这个:

    编辑 > 导航 > 跳转到上一个标记:cmd + UP。

    【讨论】:

    • 这个选项太棒了,希望我能在 Linux 终端中找到一个等效的选项。
    • 如果在运行上一个命令和跳转到上一个标记之间调整终端窗口的大小,它将不准确。我假设之前的标记是基于行的,所以跳转会回到那行,现在根据新的窗口宽度是不同的内容。
    【解决方案5】:

    我在 macOS 中使用iTerm2,我想出了一个方法。首先,您应该确保检查 iTerm2 首选项中的Unlimited scrollback

    在终端中运行命令并得到很长的输出后。

    Cmd+F(在windows中可能是ctrl+F)然后你可以像这样在终端中搜索:

    最后,只要搜索你的用户名,然后按Enter,一般会跳转到最后一条命令:

    【讨论】:

    • 这是一个 hack,但我确实喜欢你的想法
    【解决方案6】:

    一个简单的 Hack,如果需要一些时间才能打印出大部分输出(比如调用 make):

    在执行命令后立即向上滚动一点点(例如,一行)。 由于您不再处于底部,这可以防止大多数终端自动向下滚动。 一旦您认为输出已经打印(滚动条位置和感觉是很好的指标),您就可以向下滚动。 只是避免在打印时滚动到最后一行。

    【讨论】:

      【解决方案7】:

      我将输出传送到less,例如command | less,因为它有大量有用的键用于快速导航,而且它支持搜索。您还可以从输出的最开始自动开始。

      这里有一些有用的快速导航命令:

      • fSPACE 前进一页,b 后退一页。一页指的是终端窗口大小值得输出。
      • g 跳转到开头,G 跳转到结尾,[n]g 跳转到nth 行。例如5g 将跳转到第 5 行。
      • /pattern 搜索一个词,然后使用 n 导航下一个,N 导航上一个。支持正则表达式。
      • q 退出。

      如需更多信息,请联系man less。默认情况下,手册页也使用less,因此上述所有方法都有效。

      【讨论】:

        【解决方案8】:

        我们可以在运行命令之前清除终端,使用 Ctrl-L

        然后在运行命令后,一路返回Ctrl-Home

        【讨论】:

          【解决方案9】:

          在 LINUX 中实现它

          在提示符中添加一个标识符(例如在 .bashrc 的底部添加):

          promptCount=0
          PROMPT_COMMAND=promptCount=$((promptCount+1))
          PS1="/\$promptCount\\ $PS1"
          

          现在使用终端的搜索功能,也许 Ctrl + Shift + F,为提示行 你愿意。

          让它更方便:

          安装xdotool(命令行X11自动化工具)

          创建一个函数,该函数将按下您要按下的确切键 通过搜索功能找到N 提示行时 (在 .bashrc 的底部添加):

          gp () { xdotool key ctrl+shift+F; xdotool type /$1\\ ; xdotool key KP_Enter;sleep 0,2; xdotool key Alt+F4; }
          

          (至少这些是我要按下的确切键 Manjaro Xfce)

          现在:

          在出现小搜索窗口的 gif 中有一个未显示的小框架,写入 N 的标识符,按下键 Enter 然后关闭窗口。您可以尝试更快地更改为 sleep 命令提供的参数的值。就我而言,它在 0,11 左右之前都可以正常工作。

          【讨论】:

            【解决方案10】:

            在带有 iTerm2 的 MacOS 上:

            您必须安装 Shell 集成(iTerm -> 安装 Shell 集成),然后打开一个新选项卡。

            Cmd+Shift+Up 跳到最后一个标记。也可以在 Edit -> Marks and Annotations -> Next Mark 下找到。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-01-22
              • 2019-12-04
              • 2017-06-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多