如何在vim中启用鼠标滚动但不启用鼠标可视化选择?

10

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

set mouse=a

我喜欢用滚动条浏览文本,但选择文本则很糟糕。我在Mac上使用iTerm2中的vim。现在,当我选择文本时,选取文本非常缓慢(只有在拖拽完毕后才会高亮显示),而且高亮文本没有自动复制到我的剪贴板中,这在使用iTerm2选择文本时是可以实现的。

有没有一种方法可以允许基于鼠标/触摸板的滚动在vim中使用,而不需要使用鼠标进行可视化模式下的文本选择?

我尝试过:

set mouse=n

这个设置可以防止选中文本时文本被高亮显示,但也会阻止 iTerm2 高亮文本。

更新:

感谢这篇文章,我意识到通过按住 Option 键几乎可以达到我想要的行为,但这相当繁琐。我真的不想每次选择都需要按住 Option 键。有什么想法吗?

更新2:

感谢评论中的建议,我能够更接近目标了。我需要重新编译 vim 以启用+clipboard

brew install vim

现在,如果我愿意忍受不能在选择文本时看到我的高亮显示,那么我至少可以通过在可视模式选择后将其抓取到剪贴板中来获得它。如果我真的想要更好的选择人机工程学,我可以按住alt/option并获得iTerm2的原始选择行为。

我希望我能够反转这些模式。例如,通过默认情况下采用按住alt/option实现的行为,并在需要时使用键启用可视化模式行为...但是哦,这已经足够好了。


为什么不使用 "+y - romainl
@romainl,我应该怎么做? - Kevin Bullaughey
+ 寄存器是系统剪贴板。如果你在可视模式下选择想要复制的文本,按下 "+y" 即可将其复制。 - EvergreenTree
3个回答

4
我发现最好的方法是添加一个鼠标模式开关。将以下内容添加到 .vimrc 文件中,当按下 , 键时,将从 mouse=a 切换到 mouse=,然后再切换回来:
noremap , :if &mouse == "" \| set mouse=a \| else \| set mouse=  \| endif<CR><CR>

3

您在更新时说,您几乎可以得到想要的东西,但选择不会自动复制。

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

有关详细信息,请参阅:help clipboard-autoselect


1
短答案:我认为这是不可能的!但证明没有答案通常很困难。因此,我将尝试表达我的想法,并希望我错了。以下是长答案:
在“正常”条件下,您的终端处理鼠标,命令行应用程序对此一无所知。但有时,应用程序请求控制终端功能,以便能够绑定鼠标事件来执行“操作”。
当您设置mouse=a时,就会发生这种情况:您更改了终端功能,告诉所有鼠标事件都指向正在运行的应用程序,然后由vim绑定或不绑定操作(例如滚动、选择、粘贴等)。
因此,当您使用选项键进行选择时,即使运行的应用程序控制光标,这也是终端仿真器(在您的情况下为iTerm2)对其进行了修改,以获得您实际期望的行为。
我给你的建议是切换到macvim(brew install macvim),它安装了vim的GUI前端。然后,您将拥有完全正常的选择,尽管它只是在终端之外。

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