进一步阅读

进一步阅读

我不知道要搜索什么。 “终端线重叠”通常会带来所需行为的帖子。

让我演示一下我通过 SSH 到运行 Dietpi 的 Raspberry Pi 所经历的情况。jq -h这只是一个例子。

dietpi@tv22-rpi1:~$ jq -h
jq - commandline JSON processor [version 1.5-1-a5b5cbe]
Usage: jq [options] <jq filter> [file...]
jq - commandline JSON processor [version 1.5-1-a5b5cbe]
Usage: jq [options] <jq filter> [file...]inputs, applying the
        given filter to its JSON text inputs and producing the
        jq is a tool for processing JSON inputs, applying the
        given filter to its JSON text inputs and producing the,
        filter's results as JSON on standard output.(except for
        The simplest filter is ., which is the identity filter,
        copying jq's input to its output unmodified (except forq")
        formatting).://stedolan.github.io/jq
        For more advanced filters see the jq(1) manpage ("man jq")
        and/or https://stedolan.github.io/jq
         -c             compact instead of pretty-printed output;
jq - comSome of the options include:sion 1.5-1-a5b5cbe]value;
Usage: j -coptions] <jq compact instead of pretty-printed output;put;
         -n             use `null` as the single input value; output;filter to it;
         -eis a tool forset the exit status code based on the output;filter to it;
         -sen filter to read (slurp) all inputs into an array; apply filter to it;
         -rter's resultsoutput raw strings, not JSON texts;
         -R simplest filread raw strings, not JSON texts;ilter,
         -Cying jq's inpcolorize JSON;n't colorize JSON);pt for
         -Mmatting).tabsmonochrome (don't colorize JSON);
         -Stabreuse tabssort keys of objects on output; ("man jq")
         --tab ause tabs for indentation;o value <v>; <v>;
         --arg a v a v fset variable $a to value <v>; <v>;y of JSON texts read from <f>;
         --argjson a v fset variable $a to JSON value <v>;y of JSON texts read from <f>;
dietpi@t --slurpfile a ffor moreset variable $a to an array of JSON texts read from <f>;
dietpi@tSee the manpage for more options.
dietpi@tv22-rpi1:~$ 

旧线路没有得到应有的清理或提升。相反,新行只是与旧行交错,形成不可读的“汤”。

我想知道 Dietpi 上的 tmux 是否是罪魁祸首。我进行了快速检查,但在没有 tmux 的情况下无法重现该行为。

dietpi@tv22-rpi1:~$ tmux -V
tmux 2.8

许多其他帖子都围绕这些设置展开,因此我将它们包括在内。它们对我来说看起来没有问题。

dietpi@tv22-rpi1:~$ shopt | grep checkwinsize
checkwinsize    on
dietpi@tv22-rpi1:~$ echo $PS1
${debian_chroot:+($debian_chroot)}\u@\h:\w\$

按照评论中的建议,澄清 TERM 变量。

  1. 最外面的 TERM=xterm-256color (Linux 笔记本电脑 GNOME Terminal 3.18.3;注意 Windows 上的 putty 的行为类似)
  2. TERM=本地 tmux 中的屏幕
  3. TERM=通过 ssh 连接后的屏幕
  4. TERM=通过 ssh 进行 tmux 内的屏幕

答案1

tmux正在以该终端无法理解的方式(重新)在其渲染的终端上绘制显示。 tmux正在发出终端控制序列,以便在其(渲染的)终端显示向上滚动后重绘其显示,这与正在使用的实际终端不匹配。这是因为您tmux对终端上呈现的类型撒了谎。

TERM=xterm-256color(Linux 笔记本电脑 GNOME 终端 3.18.3 [...] putty [...]

这是错误的。

  • GNOME 终端和其他使用 VTE 小部件库(包括 GNOME Terminator)的终端模拟器的正确终端类型是vte或者vte-256color
  • PuTTY 的正确终端类型以及基于它的程序(例如 KiTTY 和(误导性命名的)MobaXTerm)同样是putty,putty-256color, 或者putty-sco
  • Kovid Goyal 的 kitty 的正确终端类型(不要与 PuTTY 衍生品 KiTTY 混淆)是kitty或者kitty-direct。 (kitty 本身以不同的名称提供 terminfo 记录,非常具有误导性的“ xterm-kitty”,不遵循长期建立的 terminfo 命名约定。 kitty并且kitty-direct是遵循这些命名约定的 Dickey terminfo 数据库中普通记录的名称。)
  • MacOS iTerm 的正确终端类型是iTerm.App对于 George Nachman 的 iTerm2 来说是iTerm2.App
  • MacOS 终端的正确终端类型是nsterm或者nsterm-256color,“ns”表示其传承为 NeXTSTEP 终端。
  • Terminator 的正确终端类型(Java 终端类型,而不是 GNOME 终端类型)是terminator
  • Linux、OpenBSD、NetBSD 和 FreeBSD 内核本身内置的终端仿真器的正确终端类型是linux,linux-16color,pccon,pcvt25, 和teken。 (我的 nosh 工具集提供了一个额外的teken-256colourtermcap 记录,因为它附带了一个终端仿真器,该仿真器有意表现得与 FreeBSD 内核的终端仿真器相同,但添加了索引和直接颜色功能。)

这些是TERM继承的环境变量tmux应该是什么,以便正确地描述呈现的终端。

正确的终端类型呈现(内部)终端,在TERM使用这些终端进行 I/O 的进程继承的环境变量中,是tmux,tmux-256color, 和tmux-direct,尽管人们可以逃脱screen

这是一种广泛传播的不正确假设终端仿真器都与 XTerm 兼容,并且terminfo 数据库中的xterm和条目正确地描述了它们。 xterm-256colorThomas Dickey 的 XTerm FAQ 指出了这种错误的想法,值得注意的是xtermxterm-256color条目甚至没有描述 XTerm 本身的所有版本,更不用说其他终端仿真器了。

唯一一次您应该将TERM环境变量设置为xtermxterm-256color或实际上“xterm-任何事物”,当终端仿真器实际上是 XTerm 程序时。

告诉全屏 TUI 程序,例如tmux,错误的终端类型可能会产生各种影响:从屏幕的某些部分没有刷新,到在错误的位置绘制内容和背景颜色出错,再到绘制方框字母字符。

进一步阅读

相关内容