在基于 X 的终端上选择/粘贴自动换行

在基于 X 的终端上选择/粘贴自动换行

有没有一种可靠的方法可以在基于 X 的终端上剪切和粘贴自动换行?也就是说,如果我选择,然后通过按钮 3 粘贴,如果文本到达行尾并换行,则粘贴会采用回车符并将其插入。我宁愿:

if (endcolumn==non-space character) {
  assume wordwrap
}
else {
  insert carriage return after last non-space character
}

这让我发疯。特别是粘贴超过 80 列的代码时。有时它有效,但大多数时候无效。

答案1

Unix 终端不进行自动换行。这是在终端内运行的应用程序的一个功能。终端收到同样的指令后显示

|This is text formatted  |        |This is line 1.         |
|to 24 columns           |   or   |This is line 2.         |

如果可以的话,请告诉您的应用程序不要进行任何包装。这样终端就会换行,但总是在最后一列。

|This is a single long li|
|ne of text.             |

如果您三次单击它,您只会This is a single long line of text在末尾看到换行符(或者根本没有换行符,具体取决于终端模拟器)。

粘贴时,终端只是将文本发送到应用程序,就像您键入了文本一样。如果您观察到任何取决于终端宽度的行为(例如换行),则这是由应用程序引起的,而不是由终端引起的。

答案2

我同意这对可用性产生了巨大的影响。我发现能够三次单击并复制/粘贴已换行的行非常重要。有两种方法可以使其正常工作。三击(并单击拖动)可以选择行尾到下一条可见行,且不插入 CR。或者三击只选择一根可见线,但粘贴时却没有回车键。

错误的方法是,三击仅选择可见行,然后在粘贴时假定末尾有一个 CR。我已经看到 xterm 和 gnome 终端的不良行为。我在 Mac 终端应用程序和另一个 Mac 终端应用程序 iTerm 中看到了良好的行为。

除了尝试不同的终端程序之外,我没有任何提示可以将坏情况变成好情况。我确信这与终端程序是否确实记住了它看到的所有 CR 的位置,或者它是否只是解释了 CR 然后忘记了它有关。

相关内容