vim 剪切和粘贴在 Stretch / Debian 9 中不起作用

vim 剪切和粘贴在 Stretch / Debian 9 中不起作用

此处将一些 VM 服务器升级到 Debian 9。

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

光标似乎正在移动,并标记文本,尽管以比通常更有趣/不同的方式,但在执行命令 C / 命令 V 或复制并粘贴到相应菜单中时,没有任何内容被复制到剪贴板。

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

这种情况发生在 OS/X 中,即 Sierra 和 El Capitan,以及 Windows 中,也使用 mobaXterm 终端。

这种情况是由于 vim 对鼠标的感知造成的。

根据 Stack Overflow 中的其他问题,我使用/etc/vim/vimrc.local和创建set mouse="r"set mouse="v;效果并不好。

set mouse=""最后在同一个文件中进行设置,取得了一些成功。

然而,它也并不是 100% 的时候都能很好地工作。还可以做什么?

答案1

解决办法:改成mouse=amouse=r本地的.vimrc.

/usr/share/vim/vim80/defaults.vim正如已接受的答案所述,设置此选项的问题是它会在每次更新时被覆盖。我找了很久,最终找到了这个: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864074

本地解决方案(有缺陷):
第一个解决方案是使用本地 .vimrc 文件并将其设置在那里。 因此,您可以为每个用户创建一个本地 .vimrc ( ~/.vimrc) 并在那里设置您的选项。或者创建一个,/etc/skel以便为您创建的每个新用户自动创建它。

但是当您使用本地.vimrc文件时,您必须在那里设置所有选项,因为如果有本地文件.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

答案2

使 vim 脱离鼠标感知的一种方法似乎是注释掉有关鼠标的配置。

/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 配置文件中,“ 正在发起注释)。

这一更改使我们可以毫无问题地再次复制和粘贴。

我确实同意这些评论,这不是理想的解决方案,因为除非配置文件受到保护(或转移),否则确实会被覆盖到任何更新中。当时,由于软件包版本或我曾经工作的服务器配置的具体情况,它是唯一有效的。因此,我将这个答案留在这里,并且它只能用作最后的解决方案

答案3

mouse该选项的 Vim 文档

通过按住 Shift 键,仍然可以使用 xterm 对鼠标按钮的处理。

答案4

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

相关内容