无法从终端复制制表符

14

我正在编写一个小程序,以制表符分隔的格式打印输出到终端。但是,每当我选择带有制表符的文本并复制它时,制表符就会被替换为一些空格。

我该怎么做才能使终端在尝试复制时不用空格替换制表符?


1
Kurru,我想这是没有办法的!在Stackoverflow和superuser论坛上有很多关于此的问题。但是没有解决方案... - Gilberto B. Terra Jr.
我进行了一些测试。无论您使用Python、Shell脚本还是其他语言在终端中打印文本,结果都是将其替换为空格。 - Gilberto B. Terra Jr.
1
我看到了超过10个关于它的问题...其中一些是:https://superuser.com/questions/687240/how-to-paste-a-tab-into-os-x-terminal-from-clipboard - https://dev59.com/Y2Ik5IYBdhLWcg3wbdrx - Gilberto B. Terra Jr.
3个回答

5

在Mac OS Sierra(或先前的版本)中,您可以执行以下操作:

Edit -> Copy Special -> Copy Plain Text

或者使用快捷键:alt+shift+⌘ cmd+C

常规复制对我来说可以使用。我使用的是MacOS Catalina 10.15.6。我还有“复制纯文本”选项。但是,任何less/more/git diff输出的复制都会将制表符转换为空格。 - Curtis Yallop

1
你最好的选择可能是在输出中替换制表符"\t",然后在将其复制粘贴到目标位置后进行搜索和替换。 当然,你可以使用任何字符或字符串作为替代,但使用"\t"使得在粘贴到命令行环境时可以使用echo -e轻松恢复制表符。 可以使用以下方式进行替换:|sed 's/\\/\\\\\\/g;s/\t/\\t/g'

1

我能在我的 Mac 终端上做到这一点。以下是一些好的测试:

printf '>\t<\n':正常工作(将其复制到 Sublime 中作为一个制表符;选中它只能选择整个制表符而不是单个空格)

printf '>\t<\n' | less:失败

printf '>\t<\n' | more:失败

printf '>\t<\n' | less | cat:正常工作(less 检测到输出是文件/管道而不是终端,因此不应用终端设置)

printf '>\t<\n' | less | cat -vet:输出 ">^I<$"(less 检测到管道输出,因此不应用终端设置)

printf '>\t<\n' | vi -:失败,但当我在 vi 中移动时,它可以在 1 次按键中跳过制表符,所以它知道它是一个制表符

reset:从现在开始,它总是失败

stty -tabs:从现在开始,它总是失败

stty tabs :修复了 reset/stty -tabs 问题,现在它可以正常工作了。

有个人通过更改源代码让 less 正常工作:https://unix.stackexchange.com/questions/412060/how-to-get-less-to-show-tabs-as-tabs

less 相关选项:'-U' 显示制表符为 '^I','-x4' 设置制表符大小

对于 git diff

git diff | head -40 可以正常工作(将制表符复制到 sublime 中)

git diff | cat 可以正常工作

git diff | less 无法正常工作(less 应用终端设置)

git diff 无法正常工作(我的 git 分页程序是 less)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接