我粘贴到终端的文本中的标签被删除了。有什么建议吗?
我的用例示例是将 TSV 文件的各部分粘贴到远程 ssh 会话终端中,从而绕过繁琐的多跳 scp 过程。
这与使用其他编辑器/工具(例如 emacs/vi)无关,我已经知道如何通过 CTL-Tab 输入单个制表符。这些都不能满足需求。
答案1
这比较棘手,因为您不仅要考虑粘贴操作,还要考虑原始的复制步骤。
确实,在 OS X 中,似乎无法在终端应用中粘贴制表符。另一方面,将制表符粘贴到其他应用(例如 TextEdit)中却没有问题。
在 Linux 上,情况正好相反。粘贴标签很好用;但是复制首先,将它们复制到终端是一个问题。这取决于您尝试从哪里复制它们。如果您只是将文件内容转储到终端(例如cat
),则任何制表符都会被扩展:替换为一定数量的空格。如果您随后尝试选择文本并从终端输出中复制,那就太晚了。请注意,进行扩展的不是程序cat
本身,而是较低级别的设备驱动程序或终端仿真器。
再次考虑 OS X 是有益的。在 OS X 上,该stty
命令有一个选项来控制是否应在输出时展开选项卡。如果您运行stty oxtabs
然后尝试将一些文本转储到终端,您会看到选项卡会展开,就像它们在 Linux 上无条件展开一样,如果您尝试复制/粘贴该输出,选项卡将被替换。
答案2
如果您只需要插入一个制表符,您可以按 control-v 和 tab。
要暂时允许在 bash 中粘贴制表符,请运行:
bind '"\t":self-insert'
要重新启用制表符补全,请运行:
bind '"\C-i":complete'
如果要将文本粘贴到 emacs,则可以使用如下函数代替 command-v:
(defun pbpaste ()
(interactive)
(shell-command-on-region
(point)
(if mark-active (mark) (point))
"pbpaste" nil t))
答案3
在 Linux 和 OS/x 中似乎都没有办法将标签粘贴到终端中。如果有人(最终)想出了解决方案,请随时添加答案。
答案4
这是一种解决方法(至少在 Linux 中)
v=$(cat)
- 然后粘贴你的文本
- 然后按 ctrl-D 关闭“cat”命令
- 现在,您已经在 $v 中获得了带有制表符的文本,您可以使用它来输出
echo "$v"