Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash linux gnu更少:复制+粘贴时缓冲区中的长线中断_Bash_Gnu_Gnu Coreutils - Fatal编程技术网

Bash linux gnu更少:复制+粘贴时缓冲区中的长线中断

Bash linux gnu更少:复制+粘贴时缓冲区中的长线中断,bash,gnu,gnu-coreutils,Bash,Gnu,Gnu Coreutils,在我的一台Linux机器中,我创建了一条长线,并通过管道将其传输到gnu less,如下所示: seq -w 1 999 | xargs echo | less 如果我选择gnu less版本394中出现的文本,并将其复制并粘贴到其他地方,那么长行将被分解为多行,每行的长度与终端的宽度相同,这不是我所期望的 如果我在不同的Linux无框版本444中也这样做,我可以从gnu无缓冲区中进行选择,并将其复制+粘贴到其他地方,作为一个单独的长行,这是所需的行为。如图所示: 粘贴到emacs中的效果,首

在我的一台Linux机器中,我创建了一条长线,并通过管道将其传输到gnu less,如下所示:

seq -w 1 999 | xargs echo | less
如果我选择gnu less版本394中出现的文本,并将其复制并粘贴到其他地方,那么长行将被分解为多行,每行的长度与终端的宽度相同,这不是我所期望的

如果我在不同的Linux无框版本444中也这样做,我可以从gnu无缓冲区中进行选择,并将其复制+粘贴到其他地方,作为一个单独的长行,这是所需的行为。如图所示:

粘贴到emacs中的效果,首先是欠激励效果,下面是所需效果:

在这两个linux框中,如果我使用cat而不是less,并从终端的输出中选择,我还可以在一行中复制并粘贴所有内容:

seq -w 1 999 | xargs echo > /tmp/f
cat /tmp/f
相反,在两个linux框中,“更多”命令的行为方式相反,在选择“复制+粘贴”时,还会将长行分解为多行:

seq -w 1 999 | xargs echo > /tmp/f
more /tmp/f

你知道会发生什么吗?如何从gnu-less缓冲区复制+粘贴,并具有与执行cat时相同的一致行为?

less有一个-S选项,告诉它断开长行。默认情况下,它没有打开


幸运的是,即使在运行时,大多数较少的标志也可以更改。只需按-S键即可切换长线模式/断线模式

让我回答您问题中的“发生了什么”部分,而不回答“如何修复”部分。从终端角度来看,cat和less或more的主要区别在于操作模式。当您对某个内容进行cat时,终端会看到实际的字符,当它到达行的末尾时,终端仿真器负责导致断行。现代终端仿真器会记住它们是否为每一行执行了这样的换行操作,并且当您复制文本时,换行操作不会包含在复制缓冲区中

现在越来越多的人以完全不同的方式使用网络课程。这些工具知道终端的宽度,不会因线路溢出而导致断线。他们将自己发布一条断线。终端仿真器无法区分这样的换行符和有意义的换行符,因此当您复制文本时,这些换行符将包含在复制缓冲区中


实际上,您可以使用-f选项要求更多内容不包括这些换行符,但对于less,由于您可以向后滚动,因此没有相应的选项存在。

我编译了less的更新版本,现在它的行为与预期的一样。

这可以通过vim完成:

到vim的管道文本:

序列-w 1 999 | xargs回波| vim-

设置包装:

:设置包裹 :设置换行符 :set nolist list禁用换行符 :将非数字隐藏行号设置为不复制行号

复制粘贴


顺便说一句,唯一的缺点是vim打开大文件的速度比小于10兆字节慢。尽管这是可以解决的,请参见。

但您想实现什么?我怎样才能从一个gnu较少的缓冲区复制+粘贴,并具有与我执行cat时相同的一致行为?但为什么您要从较少的缓冲区复制粘贴,而不是简单地将输出重定向到某个文件?或者甚至将数据传输到xclip-selection剪贴板。假设我只想复制缓冲区的一部分,我用鼠标光标手动选择它,我希望输出为一行,即使它被截断到终端的宽度。我认为它是早期版本的less根据屏幕上的列数剪切输出。我知道-S,但我想要的是能够使用less显示环绕终端宽度的长线,然后选择这些多条端子线,并将它们复制并粘贴为其他地方的一条长线。