【发布时间】:2016-09-07 14:14:23
【问题描述】:
我在带有来宾 64 位 Debian 7 的 64 位 Windows 7 主机上运行 VirtualBox 5.0.5。剪贴板是双向的。
当我从客户机上的 Sublime Text 2 复制文本并将其粘贴到主机上的任何编辑器时,每行都会添加一个额外的换行符。从其他来源复制时似乎不会发生这种情况。如果为了 Windows 的缘故添加回车,这在某种程度上是有意义的,即将“\n”更改为“\r\n”,但事实并非如此,它将“\n”更改为“\n\n”。
我通过将文本粘贴到 Notepad++ 然后使用搜索和替换将每个“\n\n”替换为“\n”来解决这个问题,但我最终决定我已经厌倦了这样做。
我能做些什么来避免额外的换行符吗?
更新
我编写了一个小型 Windows 程序来检查 Windows 剪贴板,看起来剪贴板实际上正在替换以“\r\r\n”结尾的每一行,无论 default_line_ending 设置为什么,并且没有无论源文档实际包含哪一行结尾。大多数 Windows 程序只是简单地将 "\r\r\n" 解释为两行,并放置两个预期的格式;我已将 Notepad++ 配置为默认使用 Unix 行尾,因此它将“\r\r\n”转换为“\n\n”。
更新 1.5
示例:从客户机中的 Sublime Text 2 复制此内容(以“\n”作为行尾)
cat
on
mat
成为 Windows 剪贴板(具有十六进制和十进制解释):
c 0x63 99
a 0x61 97
t 0x74 116
? 0x0D 13
? 0x0D 13
? 0x0A 10
o 0x6F 111
n 0x6E 110
? 0x0D 13
? 0x0D 13
? 0x0A 10
m 0x6D 109
a 0x61 97
t 0x74 116
更新 2
我写了一个 Sublime Text 2 插件来做类似的测试。在来宾中复制此文本
cat
on
mat
放入访客剪贴板(带十进制解释):
c 99
a 97
t 116
? 10
o 111
n 110
? 10
m 109
a 97
t 116
因此,根据 Sublime Text 2,没有任何问题,但是当 Windows 访问包含来自 Sublime Text 2 的文本的剪贴板时,会检索到混乱的结束行。当我从主机或访客的其他来源复制文本时,不会发生这种情况。
另一个现象是,如果我在客人的任何地方突出显示文本,如果我在客人或主机的任何地方按Ctrl+C,客人的突出显示就会消失。这可能与主要问题有关吗?或者这两者都是潜在问题的征兆?
更新 3
看起来 Sublime Text 2 总是将“\n”发送到剪贴板(在混乱之前),即使我将 default_line_ending 设置为 windows 并且我从包含“\r\ n" 表示行尾。我还注意到,在 Windows 样式的文本文件中,当我突出显示文本时,当 Sublime Text 2 报告“x 行,y 个字符已选择”时,每行结尾只计算 1 个字符而不是 2 个字符。我猜 Sublime Text 2 有一些激进的行尾管理,它不能与剪贴板正确通信。
我不知道这是否有用,但如果我查询 Windows 剪贴板的格式,它会报告
1 TEXT
7 OEMTEXT
13 UNICODETEXT
16 LOCALE
【问题讨论】:
标签: debian sublimetext2 virtualbox clipboard windows-7-x64