在启用set mouse=a的情况下复制Vim外部的文本

启用set mouse=a后,在Vim内部复制的文本将不会粘贴到Vim外部。有人知道怎么解决这个问题吗?

在这里,用鼠标选择文本会打开可视模式,并禁用弹出菜单中的Copy选项:

enter image description here

135981 次浏览

在进行视觉选择后使用+y。无论如何,您都不应该使用终端的copy命令,因为它复制的是终端看到的内容,而不是实际的内容。下面是它的作用:

  • +告诉Vim使用名为+的寄存器进行下一次删除、删除或放入操作。命名为+的寄存器是一个特殊寄存器,它是X11剪贴板寄存器。(在其他系统上,你会使用*代替,我认为,参见:help clipboard:help x11-selection)
  • y是yank命令,它告诉Vim将选择放入前面命名的寄存器中。

你可以这样映射它:

:vmap <C-C> "+y

然后用鼠标突出显示某些内容并按control - c来复制它。

此特性仅在Vim已使用+xterm_clipboard选项编译时有效。运行vim --version来找出它是否存在。

用鼠标选择时按转变。这将使鼠标选择行为就像mouse=a未启用一样。

注意:这个技巧也适用于“中间按钮粘贴”:如果你想粘贴外部选择的vim文本,在单击中间按钮时按转变。只要确保插入模式是激活的,当你这样做(你可能还想:set paste,以避免意外的影响)。

OS X (mac): 按住alt/option,同时选择()

在Ubuntu中,可以使用X-Term复制&在VIM内粘贴绑定(Ctrl-Shift-C &在使用Shift键高亮的文本上按Ctrl-Shift-V)。

如果你正在使用,Putty会话,那么它会自动复制选择。 如果我们在vim中使用了“set mouse=a”选项,使用Shift+鼠标拖动选择自动选择文本。 需要检查x项。

在ESC模式下,当set mouse=a时,使用鼠标选择文本。这将启用vim中的可视模式。然后你可以按“y”键拉出选中的文本,按“p”键粘贴到任何你想要的地方。这只在vim中发生。

另一个OSX-Mac选项是取消选中View->Allow Mouse Reporting(或按⌘-R切换它)。这允许你在鼠标交互和鼠标选择之间切换,这在选择和复制/粘贴一些位时可能很有用,因为你不需要按住修改键来做这件事。

有行号的多行注意事项:

我通常启用行号,所以如果你选择多行,这也会复制行号。如果你想复制多行不带行号的行,用:set nonu禁用这些行号,然后你可以在复制完成后用:set nu重新启用它们。

在.vimrc中使用set mouse=r代替set mouse=a

在OSX上使用fn代替转变

您可以在vim命令行中使用:set mouse&来启用使用鼠标选择的文本的复制/粘贴。然后你可以简单地使用鼠标中间按钮或转变插入来粘贴它。

< p > em…… 继续按转变,然后单击鼠标右键

我不小心解释了如何关闭set mouse=a,当我重读问题时,发现OP一开始就不想关闭它。无论如何,对于任何搜索如何集中关闭鼠标(set mouse=)的人,我在这里留下了对我的答案的引用:https://unix.stackexchange.com/a/506723/194822

vim编译时使用的编译设置也是问题的一部分。vim --version显示这些。

在OSX中,默认的vim有-clipboard,但你需要+clipboard

在osx上,你可以而且显然应该使用macvim。你可以做brew cask install macvim那个有+clipboard

你会有两个vims。

~$ ls -l /usr/bin/vim   <--- default vim
-rwxr-xr-x  1 root  wheel  1745984 15 Jul  2017 /usr/bin/vim


~$ ls -l /usr/local/bin/vim   <-- macvim, installed recently via that mentioned brew line.
lrwxr-xr-x  1 apple  admin  42 16 May 23:32 /usr/local/bin/vim -> /Applications/MacVim.app/Contents/bin/mvim
~$

运行vim将运行macvim,因为路径中的/usr/local/bin应该在/usr/bin之前,尽管你可以使用which vim检查。

运行vim(运行macvim)是可以的,但是你可能需要将vi映射到macvim,否则运行vi将保持默认的vim!您可以重写或删除(使用rm),并使用ln重新创建vi sym链接。要做到这一点而不出现“操作不允许”错误,您必须(暂时)禁用SIL。https://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity-protection-sip-aka-rootless-on-macos-os-x

macvim具有+clipboard,如vim --version所示

这里是一个工作的~/.vim/vimrc,只有必需的行。

:set mouse=a
:map <leader>c "+y
:map <leader>v "+p

默认的领导键是反斜杠。

我读到一个建议说应该使用先导键。(当然,control已经有很多键在使用中,所以建议不要使用control。我不知道这是否适用于命令键,但无论如何)。

有了上面提到的映射,\c将执行"+y,它将从名为+的寄存器复制到剪贴板。\v将从名为+的寄存器粘贴。

这就是窗口间的复制/粘贴。

其他操作系统可能需要"*而不是"+

按住shift键复制粘贴选区对我很有用

set clipboard=unnamed添加到你的.vimrc。因此,它将使用剪贴板寄存器'*'而不是未命名的寄存器来进行所有的删除、删除、更改和放置操作(注意,它不仅影响鼠标)。

寄存器'*'的行为取决于你的平台和你的vim是如何编译的(或者你是否使用neovim)。

如果它不起作用,你可以尝试使用set clipboard=unnamedplus,但这个选项只在X11系统上有意义(因此gvim也是如此)。

同样值得一提的是,通过set mouse=nvi,当进行选择时,然后按: <ESC>,你将得到鼠标选择复制到主选择剪贴板(相当于"*y)。

参考:help mouse

该方法的主要优点是,如果您有多个垂直分割,它将只从当前缓冲区中选择。使用主答案中提到的<Shift>,在这种情况下,将同时从所有3个文件中复制,这并不完全是人们想要、期望或需要的。

有一个很好的变通方法值得补充:

GPM守护进程可以被使用,它是一个a cut and paste utility and mouse server for virtual consoles. c。它将提供跨所有虚拟控制台的功能!

复制粘贴操作可以通过<CTRL-C>/<CTRL-V>完成。

sudo apt-get install gpm

GPM的MAN page

在vi中设置set mouse=a,使用MobaXterm,在服务器上安装vm -gtk3后,用鼠标拖动和Ctrl + Insert工作,但似乎它只适用于MobaXterm

安装vim-gtk3后,vi会链接到它

lala@kubu:~$ sudo apt install gvim
[sudo] password for lala:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package gvim is a virtual package provided by:
vim-gtk3 2:8.2.2434-3ubuntu3.2
vim-athena 2:8.2.2434-3ubuntu3.2
You should explicitly select one to install.


E: Package 'gvim' has no installation candidate
lala@kubu:~$ which vi
/usr/bin/vi
lala@kubu:~$ file /usr/bin/vi
/usr/bin/vi: symbolic link to /etc/alternatives/vi
lala@kubu:~$ file /etc/alternatives/vi
/etc/alternatives/vi: symbolic link to /usr/bin/vim.gtk3
lala@kubu:~$