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

问题描述 投票:0回答:3

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

set mouse=a

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

有没有办法允许在 vim 中基于鼠标/触控板滚动,而不使用鼠标进行视觉模式文本选择?

我已经尝试过:

set mouse=n

这可以防止当我尝试选择时文本突出显示,但它也可以防止 iTerm2 突出显示文本。

更新:

感谢这篇文章我意识到我可以通过按住选项键来获得几乎我想要的行为,但这相当乏味。我真的不想每次选择时都需要按住选项键。想法?

更新2:

感谢评论中的建议,我能够更接近一些。我需要重新编译 vim 才能启用

+clipboard
:

brew install vim

现在,如果我愿意忍受看不到正在进行的突出显示作为选择文本,那么我至少仍然可以通过在视觉模式选择后将其拉动来将其放入剪贴板。如果我真的想要更好的选择人体工程学,我可以按住

alt/option
并获得原始的 iTerm2 选择行为。

我希望我能扭转这些模式。例如,默认为通过按住

alt/option
完成的行为,并在我需要用按键时启用视觉模式行为...但是哦,好吧,这已经足够好了。

vim iterm2
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 前端。然后你就会有一个可以正常工作的选择,尽管它只是在终端之外。

© www.soinside.com 2019 - 2024. All rights reserved.