在X11的终端窗口之间复制和粘贴选项卡


11

当我使用X11鼠标选择在两个终端窗口之间复制和粘贴文本时,选项卡通常但并非总是转换为空格。这似乎取决于所涉及的终端应用程序及其内部运行的程序。

这是我通过实验发现的:

  • 它仅取决于源(复制)端正在运行的内容。目标(粘贴)端将粘贴标签,无论运行什么,如果源保留了标签。
  • gnome-terminal在源端保留选项卡。 xterm而且konsole不要。
  • 仅当使用输出文件时,选项卡才会保留cat。其他应用,如lessvimemacs,或nano不保留选项卡。

这有什么解释?难道这些漏洞中konsolexterm,或对它们进行不同的配置?可以将less诸如此类的属性配置为在输出中保留制表符吗?

Answers:


3

是的,您的观察是正确的。复制粘贴时会发生什么,就是目标从源获取数据。显示选项卡时,xterm(和konsole)显然会将它们本身转换为空格(如果在终端内运行的应用程序尚未这样做)。因此,当请求选择文本时,他们所需要提供的只是空格。

我什至还模糊地记得几年前xterm-maintainer的回应,声称这将很难修复...

我不确定如何 gnome-terminal做对,但是我很高兴他们这样做:)另一种选择是使用gvim(的图形版本vim)-而不是vim在终端应用程序中运行-您可以安全地 gvim 复制粘贴,而不会丢失标签。


0

有时这可能是个问题,尤其是在Makefiles需要选项卡的情况下。不幸的是,不同程序的问题无关。每个人可能会有一个非常不同的解决方案。

对于vim,您必须在文件中执行:set noexpandtab或放置。如果您只希望设置某些文件类型,则可以在我的计算机中执行以下自动命令:set noexpandtab~/.vimrcnoexpandtab~/.vimrc

"indenting defaults: 4 spaces for an indent
set shiftwidth=4
set softtabstop=4
set expandtab

"exceptions to indenting for specific languages and files--------
"for shell scripts: 2 spaces for an indent
autocmd filetype sh setlocal shiftwidth=2
autocmd filetype sh setlocal softtabstop=2

"for Makefiles: use tabs for indents
autocmd filetype make setlocal tabstop=8
autocmd filetype make setlocal noexpandtab

这将为制表符中的标签设置默认的4个空格,vim并为Shell脚本和Makefile设置例外。

对于其他程序,如less,请尝试查看那里的手册页。他们可能具有所需的配置文件,环境变量或命令行选项。查看更少的手册页:

-xn,... or --tabs=n,...
       Sets tab stops.  If only one n is specified, tab stops  are  set
       at  multiples  of n.  If multiple values separated by commas are
       specified, tab stops are set at those positions, and  then  con-
       tinue  with  the  same  spacing  as  the last two.  For example,
       -x9,17 will set tabs at positions  9,  17,  25,  33,  etc.   The
       default for n is 8.

您注意到的不是错误。“这是一个功能。” 唯一的问题是您需要知道如何关闭它。


2
less -xn将其配置为使用n个空格而不是制表符。-U使它显示为^I。我还没有找到一种方法来使其发出原义的制表符,以便复制文本将粘贴制表符,但是我很想知道如何。
Matt McClure 2013年

值得注意的是,在Roff(troffnroff)中,制表符可以彼此独立设置,就像现代文字处理器(OpenOffice,Microsoft Word等)中的“统治者”工具栏一样。手册页实际上很​​少使用自定义制表位。

mandoc(1)还允许用户使用-O indent=N(默认为5列)从命令行覆盖默认的缩进宽度。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.