我在具有64位客户机Debian 7的64位Windows 7主机上运行VirtualBox 5.0.5。剪贴板是双向的。
当我从guest虚拟机上的Sublime Text 2复制文本并将其粘贴到主机上的任何编辑器中时,每行都会添加一个额外的换行符。从其他来源复制时似乎没有发生。如果出于Windows的考虑而添加回车符,即将“ \ n”更改为“ \ r \ n”,则在某种程度上有意义,但事实并非如此,而是将“ \ n”更改为“ \ n \ n”。
通过将文本粘贴到Notepad ++中,然后使用“搜索和替换”将每个“ \ n \ n”替换为“ \ n”,可以解决此问题,但是我最终决定对此感到厌倦。
我有什么办法可以避免多余的换行符吗?
更新
我写了一个小的Windows程序来检查Windows剪贴板,无论default_line_ending
设置什么,无论源代码是哪一行,剪贴板看起来实际上都是在替换以“ \ r \ r \ n”结尾的每一行。文件实际上包含。大多数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 9的全新虚拟机来宾。我在其上安装了Sublime Text 2,然后在其上安装了Sublime Text 3,并将它们配置为尽可能接近旧来宾上的Sublime Text 2。
从新来宾上的Sublime Text 3将文本复制到Windows 7主机上不会出现此问题,而在同一新来宾上从Sublime Text 2复制文本仍然会发生此问题。我将其归因于Sublime Text 2和Windows之间的一个错误,该错误已在Sublime Text 3的修订版本中得到解决。
解决方案:升级到Sublime Text 3。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句