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

mac terminal.app恼人的bug-如何修复?

  •  9
  • TraderJoeChicago  · 技术社区  · 15 年前

    显示问题的视频: http://www.mentaframework.org/download/TerminalBug.mov

    当我在terminal.app上输入并到达行尾时,下一行从第一行的顶部开始,覆盖所有内容。然后如果我使用删除键,所有的东西都会混乱消失。

    我在同一个终端上对不同的主机做了一个ssh,它工作得很好,所以我的shell配置会有问题吗?

    看电影看看会发生什么:

    谢谢,

    -塞吉奥

    2 回复  |  直到 8 年前
        1
  •  18
  •   Carl Norum    15 年前

    您需要在设置彩色提示的PS1变量中标记转义码。shell需要知道它们不可打印,然后它将正确计算换行。

    下面是一个解释和一些例子的链接:

    http://www.artemfrolov.com/articles/coloured-bash-prompt

    快速提示:

    \[     begins a sequence of non-printing characters
    \]     ends a sequence of non-printing characters
    
        2
  •  1
  •   Johnny Utahh    13 年前

    http://www.artemfrolov.com/articles/coloured-bash-prompt 当前为空(如中所示,在chrome/firefox/opera中访问,只看到空白,没有内容)。所以在研究了这个例子之后 here ,我发现转换:

    export PS1='\e[0;32m\u@\h\e[m \D{%b %d} \t $ '
    

    哪个坏了,到

    export PS1='\[\e[0;32m\]\u@\h\[\e[m\] \D{%b %d} \t $ '
    

    似乎对我有用(作为一个额外的,具体的例子)。

    另外,稍微偏离主题,但很有用(至少我可以参考):要用有用的“压缩路径”和提示中加粗的绿色user@host来升级上面的内容:

    export MYPS='$(echo -n "${PWD/#$HOME/~}" | awk -F "/" '"'"'{if (length($0) > 14) { if (NF>4) print $1 "/" $2 "/.../" $(NF-1) "/" $NF; else if (NF>3) print $1 "/" $2 "/.../" $NF; else print $1 "/.../" $NF; } else print $0;}'"'"')'
    export PS1='\[\e[1;32m\]\u@\h\[\e[m\] \D{%b %d} \t $(eval "echo ${MYPS}")$ '
    

    **编辑**:此PS1分配(第2行),IMO,更容易阅读:

    export MYPS='$(echo -n "${PWD/#$HOME/~}" | awk -F "/" '"'"'{if (length($0) > 14) { if (NF>4) print $1 "/" $2 "/.../" $(NF-1) "/" $NF; else if (NF>3) print $1 "/" $2 "/.../" $NF; else print $1 "/.../" $NF; } else print $0;}'"'"')'
    export PS1='$USER@\[$(tput bold)\]$(hostname -s)\[$(tput sgr0)\] \D{%b %d} \t $(eval "echo ${MYPS}")$ '
    
    推荐文章