vim剪切和粘贴无法在Stretch / Debian 9中使用


33

这里将一些VM服务器升级到Debian 9。

现在使用时ssh,我们无法在远程终端之间复制和粘贴。

光标似乎在进行移动并标记文本,尽管以一种比平时更有趣/不同的方式进行,但是在执行Command-C / Command-V或复制并粘贴到相应菜单中时,没有任何东西被复制到剪贴板中。

我们还尝试使用Shift和其他键盘组合进行鼠标移动,但没有得到积极的结果。

这在OS / X(即Sierra和El Capitan)以及Windows中也使用mobaXterm终端发生。

这种情况是由于vim意识到拥有鼠标的缘故。

在堆栈溢出中的其他问题之后,我/etc/vim/vimrc.localset mouse="r"和创建了set mouse="v;效果不佳。

最终set mouse=""在同一文件中进行设置,取得了一定程度的成功。

但是,它也不能100%地正常工作。还有什么可以做的?


您为什么要关闭鼠标支持?在Windows上,我可以在腻子会话中进行复制和粘贴。您在Mac上使用哪种终端模拟器?
Alexej Magura

3
常规的Terminal +缺省的ssh二进制文件;另外2个同事抱怨...它们是无头的虚拟服务器,所有这些服务器都是文本模式。没有剪切和粘贴正常工作对我们来说很重要。
Rui F Ribeiro

我建议使用类似iTerm2的东西,我认为这是我唯一可以使用的终端仿真器,除了在苹果商店中可以买到的复古术语外,但我不记得该模拟器是否支持通过ssh复制和粘贴。但是,您仍然应该能够复制屏幕选择。但是,我确实记得在尝试将废话从终端复制到系统时遇到问题,我在.zshrc中编写了很多函数来帮助简化它,但是我不确定这是否是您真正想要的对于。
Alexej Magura

2
也许有人可以提出请求以还原此更改(使用debian?)以恢复该mouse=模式。
steffen

Answers:


37

解决方案实际上是将选项设置mouse=amouse=r

/usr/share/vim/vim80/defaults.vim如已接受的答案所述,将其设置为一个问题是,它将在每次更新时被覆盖。我搜索了很长时间,最后找到了这个:https : //bugs.debian.org/cgi-bin/bugreport.cgi?bug=864074

第一种解决方案是使用本地.vmrc文件并在此处进行设置。 因此,您可以~/.vimrc为每个用户创建一个本地.vimrc()并在那里设置选项。或创建一个,/etc/skel以便为您创建的每个新用户自动创建一个。

但是,当您使用本地.vmrc文件时,必须在此处设置所有选项,因为如果存在本地.vimrc,则defaults.vim根本不会加载!如果没有本地.vimrc设置,所有设置都将被覆盖defaults.vim

我确实希望为所有用户提供全局配置,该配置会加载默认选项,然后使用我的个人设置添加或覆盖默认设置。幸运的是,在Debian中有一个选项:/etc/vim/vimrc.local将在之后加载/etc/vim/vimrc。因此,您可以创建此文件,并让默认设置被加载,阻止它们再次加载(最后),然后添加您的个人选项:

请创建以下文件: /etc/vim/vimrc.local

" This file loads the default vim options at the beginning and prevents
" that they are being loaded again later. All other options that will be set,
" are added, or overwrite the default settings. Add as many options as you
" whish at the end of this file.

" Load the defaults
source $VIMRUNTIME/defaults.vim

" Prevent the defaults from being loaded again later, if the user doesn't
" have a local vimrc (~/.vimrc)
let skip_defaults_vim = 1


" Set more options (overwrites settings from /usr/share/vim/vim80/defaults.vim)
" Add as many options as you whish

" Set the mouse mode to 'r'
if has('mouse')
  set mouse=r
endif

(请注意,$VIMRUNTIME以上代码段中使用的值类似/usr/share/vim/vim80/defaults.vim。)

如果您还想启用“旧的复制/粘贴行为”,请在该文件的末尾添加以下行:

" Toggle paste/nopaste automatically when copy/paste with right click in insert mode:
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

4
这应该是公认的答案。同样,从您的链接的错误报告中,我认为我们可以摆脱source $VIMRUNTIME/defaults.vim
Alasdair

1
终于成功部署了这项出色的出色工作!+1
Rui F Ribeiro

2
仍在Debian 10中工作,仅使用源/usr/share/vim/vim81/defaults.vim
Rui F Ribeiro

26

降低鼠标感知力的一种方法似乎是注释掉鼠标的配置。

/usr/share/vim/vim80/defaults.vim我注释掉鼠标特定的检测,如:

" In many terminal emulators the mouse works just fine.  By enabling it you
" can position the cursor, Visually select and scroll with the mouse.
"if has('mouse')
"  set mouse=r
"endif

(在那些vim配置文件中,“正在启动注释)。

所做的更改使我们能够再次复制并粘贴,没有任何问题。

我确实同意这不是理想的解决方案,因为除非配置文件受到保护(或转移),否则实际上它会被覆盖到任何更新中。当时,由于软件包的版本或我以前工作过的服务器配置的特定性,它是唯一起作用的版本。因此,我将这个答案留在这里,它只能用作万不得已的解决方案


2
IMO这是一个错误的答案!鼓励用户编辑由程序包管理处理的文件,将来可能会意外中断。@ I-GaLaXy-I答案为佳。
杰里米·戴维斯

1
@JeremyDavis我同意你的观点,这不是最好的解决方案。当时,由于某些未知原因,它是唯一起作用的,我确实尝试了几种替代方法。但是,如今,不止一个人告诉我另一种解决方案有效,我认为它是正确的答案。当时我使用了转移功能,配置文件没有被覆盖,但这也不是理想的解决方案。
Rui F Ribeiro '18年


3

您可以通过创建/etc/vimrc.local并插入以下内容来禁用此功能,而无需更改系统文件:

set mouse=

在测试版时间内,它不能始终如一地工作,请再次查看它,谢谢。
Rui F Ribeiro

2
这是行不通的。
LtWorf

请参阅上方的I-GaLaXy-I答案。您需要显式导入defaults.vim并阻止其导入。
理查德

尽管我将其与@ I-GaLaXy-I的答案(即编辑/创建的/etc/vim/vimrc.local)结合使用,但对我来说也很好用
Jeremy Davis

在debian 9容器中时,对我来说工作正常……只是将其放入〜/ .vimrc
Scott Stensland

1

很多人建议,:set mouse=a但我发现只能:set mouse=r在Debian 9上启用Vim的复制和粘贴。祝您好运!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.