当使用Screen粘贴时,为什么会在换行符后出现额外的空白?

9
我正在使用 screen 命令将 Vim 中的代码从一个窗口复制到另一个正在编辑文件的窗口。但是,当我将内容粘贴到第二个窗口时,每个换行符后面会出现越来越多的空白字符。这些空格是怎么进入我的缓冲区的呢?
我已经尝试关闭自动缩进,以防 Vim 添加额外的空格,但问题仍然存在。
以下是可能相关的信息:
- 操作系统为 OSx 10.6.8 - 两个文件都是 Unix 格式的 - Screen 版本为 4.00.03 - Vim 版本为 7.3 - 底层终端类型为 xterm-color
2个回答

22

你是用鼠标或其他非vim方式复制吗? 如果是的话,您必须在粘贴之前执行:set paste并在粘贴后执行:set nopaste。 可以查看:h pastetoggle进行快速映射。

如果您所有的vim会话都是本地的,并且Vim支持它(:echo has('clipboard')<CR>应该回显1),则应使用系统剪贴板:"+y进行复制,"+p进行粘贴,避免出现烦人的缩进。

或者更好的方法是,在同一个Vim会话中打开文件。


我不使用 Vim 来复制或粘贴。我使用 Screen 来完成这个操作。我可以通过在同一个 Vim 会话中打开文件来解决问题,但我觉得这个问题很有趣,想要深入了解一下。另外,你所说的“本地”是什么意思?是指同一台主机吗? - Daeden
1
问题出在粘贴模式上。在粘贴之前输入:set paste,问题就会消失。 - user80168
是的,在同一主机上。从 Vim 的角度来看,从屏幕或使用 Cmd+v 粘贴是相同的:文本逐个字符和逐行插入(但非常快),Vim 应用格式和缩进。使用 "+y"+p - romainl

0
问题出在 listcharseol 上。 Vim 在行末添加一个字符,有些用户会添加例如 ↲。
要删除这个额外的字符,您需要不在 listchars 中设置 eop,例如:
set listchars=tab:\ \ ,trail:-,extends:>,nbsp:\ ,precedes:<

制表符将被替换为空格,末尾的空格将以-显示,等等...

由于eol不存在,它不会被显示,这将解决您的问题。


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