代码之家  ›  专栏  ›  技术社区  ›  JPLemme

在猛击时向后移动

  •  7
  • JPLemme  · 技术社区  · 16 年前

    我想在bash提示之后和Mac输出之前有一个空行。看起来应该是:

    echo; ls
    

    我可以在bash提示符中添加一个新行,然后返回一行等待用户输入吗?我有什么明显的缺失吗?

    7 回复  |  直到 16 年前
        1
  •  8
  •   Andrew Barber Eric Lafortune    12 年前

    我知道这是旧的,但像我这样的人谁遇到了这个,而谷歌为它。你就是这样做的。。。 其实很简单!

    查看此链接--> Cursor Movement

    基本上移N行:

    echo -e "\033[<N>A HELLO WORLD\n"
    

    只要换一个“ <N> “不管你想回多少行。。。 例如,向上移动5行

        2
  •  4
  •   Paul D. Eden    16 年前

    据我所知,这是不可能的,除非你深入研究更低级的东西,如全屏模拟器,如诅咒。

        3
  •  3
  •   HanClinto    16 年前

    这在黑暗中有点刺痛,但是你 可以 VT102 terminal codes 控制光标而不必使用光标。您感兴趣的相关VT102命令都包括发送ESC,然后发送[,然后发送特定的命令参数。

    例如,要将光标向上移动一行,需要输出:

    ESC  [    1    A
    0x1B 0x5B 0x31 0x41
    

    请注意,VT102文档通常使用八进制,因此请保持 ascii table 如果你用的是十六进制就很方便了。

    所有这些建议都是在没有经过测试的情况下给出的——我不知道VT102命令是否可以嵌入到bash提示符中,但我认为这可能值得一试。

    编辑:是的——看起来像 a lot of people 在bash提示中使用VT102格式化代码。把我上面的例子转化成Bash会认识到的东西,比如:

    \e[1A
    

    将光标向上移动一行。

        4
  •  2
  •   Pianosaurus    14 年前

    C-v 设置为readline quoted insert命令,只需将以下内容添加到 ~/.inputrc :

    RETURN: "\C-e\C-v\n\C-v\n\n"

    这将使bash(实际上是readline)在常规解释的换行符之前插入两个逐字换行符。默认情况下,只插入一个,这将导致在提示后的行上开始输出。

    C-v型 通过在bash中键入它,将其设置为带引号的insert(即 Ctrl+V )后面跟着一个向上的箭头。这个应该印出来 ^[[A 或者类似的东西。如果没有,你可以把它绑起来 ~/.inputc 也:

    C-v: quoted-insert
    RETURN: "\C-e\C-v\n\C-v\n\n"

    ~/.inputc 如果不存在,则可以创建。除非发出readline re read init file命令(默认情况下为 C-x C-r ). 不过要小心。如果您做错了什么,enter将不再发出命令,并且修复您的错误可能会被证明是困难的。如果你做错了什么, C-o 默认情况下也将接受该行。

    添加换行符,然后将光标移回常规提示(如您所述)是可能的,但不会产生您想要的效果。您插入的换行符将被应用程序输出覆盖,因为您将光标移回它前面。

        5
  •  2
  •   Dennis Williamson    12 年前

    这是有效的:

    trap echo DEBUG
    

    如果在空提示下单击return,则不会添加额外的换行符。

    上面的命令将为管道或多命令行的每个成员输出换行符,例如:

    $ echo foo; echo bar
    \n
    foo
    \n
    bar
    

    要防止出现这种情况,以便在所有命令输出之前只输出一个额外的换行符:

    PROMPT_COMMAND='_nl=true'; trap -- '$_nl && [[ $BASH_COMMAND != $PROMPT_COMMAND ]] && echo; _nl=false' DEBUG
    

    这个 DEBUG trap在每个命令之前执行,因此在第一个命令之前,它检查标志是否为true,如果为true,则输出换行符。然后它将标志设置为false,这样行上的每个命令都不会触发额外的换行符。

    的内容 $PROMPT_COMMAND 在提示输出之前执行,以便将标志设置为true,以便为下一个周期做好准备。

    因为在空命令行上按enter仍然会触发 $PROMPT_命令 陷阱中的测试还作为当前命令检查这些内容,而不执行 echo

        6
  •  1
  •   warren    16 年前

    我相信(但没试过)如果你 '\n\b' 在提示字符串中它会这样做。

        7
  •  0
  •   Jerry Penner    16 年前

    terminfo 手册页。

    在这种情况下 光标上移一行 代码可以通过以下方式确定:

    tput cuu1
    

    如果将tput输出重定向到文件,则可以看到使用了哪些控制字符。

    Bash还支持PROMPT_命令变量,允许您在发出每个提示之前运行任意命令。