如何将标签从剪贴板粘贴到 OS X 终端?

如何将标签从剪贴板粘贴到 OS X 终端?

我粘贴到终端的文本中的标签被删除了。有什么建议吗?

我的用例示例是将 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"

相关内容