在vim中启用鼠标滚动,但不启用鼠标视觉选择?

在vim中启用鼠标滚动,但不启用鼠标视觉选择?,vim,iterm2,Vim,Iterm2,我最近在vim中启用了鼠标模式: set mouse=a 我喜欢滚动,但对突出显示文本很糟糕。我在Mac上使用iTerm2中的vim。现在,当我选择文本时,高亮显示的速度非常慢(仅在高亮显示拖动完成后高亮显示),并且高亮显示的文本不会自动复制到我的剪贴板中,就像以前使用iTerm2进行选择时一样 是否有一种方法允许在vim中基于鼠标/轨迹板的滚动,而不使用鼠标进行视觉模式文本选择 我试过: set mouse=n 这可以防止在我尝试和选择时突出显示文本,但也可以防止iTerm2突出显示文本

我最近在vim中启用了鼠标模式:

set mouse=a
我喜欢滚动,但对突出显示文本很糟糕。我在Mac上使用iTerm2中的vim。现在,当我选择文本时,高亮显示的速度非常慢(仅在高亮显示拖动完成后高亮显示),并且高亮显示的文本不会自动复制到我的剪贴板中,就像以前使用iTerm2进行选择时一样

是否有一种方法允许在vim中基于鼠标/轨迹板的滚动,而不使用鼠标进行视觉模式文本选择

我试过:

set mouse=n
这可以防止在我尝试和选择时突出显示文本,但也可以防止iTerm2突出显示文本

更新:

多亏了,我意识到我几乎可以通过按住option键获得我想要的行为,但这相当乏味。我真的不想每次选择时都按住option键。想法

更新2:

多亏了评论中的建议,我才得以更进一步。我需要重新编译vim,以便启用
+剪贴板

brew install vim
现在,如果我愿意忍受没有看到我的突出显示作为一个选择文本,那么我至少可以在视觉模式选择后通过拖动它在剪贴板中得到它。如果我真的想要更好的选择人体工程学,我可以按住
alt/option
,获得原始的iTerm2选择行为


我希望我能改变这些模式。例如,默认为通过按住alt/option键来实现的行为,并在需要时使用键启用视觉模式行为……但是,这已经足够好了。

简短回答:我认为这是不可能的

但通常很难证明没有答案。因此,我将尝试给出我的想法,我希望你我错了。下面是一个很长的答案:

您的终端处于“正常”状态,处理鼠标,而命令行应用程序对此一无所知。但有时,应用程序请求控制终端功能,以便能够绑定鼠标事件来执行“任务”

这是当您设置mouse=a时发生的情况:您更改终端功能,以告知所有鼠标事件都指向正在运行的应用程序,因此由vim绑定或不绑定操作(如滚动、选择、粘贴等)

因此,当您使用选项键进行选择时,即使正在运行的应用程序可以控制光标,这也是对终端仿真器(在您的情况下是iTerm2)的攻击,以获得您实际期望的行为


我的建议是切换到macvim(
brew安装macvim
),它为vim安装gui前端。然后,您将有一个工作正常的选择,尽管它刚刚从终端出来。

通过更新,您可以说您几乎可以得到您想要的,但选择不会自动复制

为此,您只需要
set clipboard+=autoselect guioptions+=a


有关详细信息,请参见
:帮助剪贴板自动选择。

我发现最好的方法是为鼠标模式添加一个切换

将以下内容添加到
.vimrc
将从
mouse=a
切换到
mouse=
,然后在按下
键时再次切换:

noremap , :if &mouse == "" \| set mouse=a \| else \| set mouse=  \| endif<CR><CR>
noremap,:if&mouse==“set mouse=a\\\124; else\\124; set mouse=\\124; endif

为什么不使用
“+y
?@romainl,我该怎么做?
+
寄存器是系统剪贴板。如果在视觉模式下选择所需的文本,可以按
“+y
进行复制。