在vim中如何实现鼠标跟随光标的功能

8
我知道mousefocus选项只能在gVim中使用。但我想知道,如果控制台Vim可以响应鼠标点击切换到不同的窗口,那么是否也可以轻松地添加以下鼠标移动呢?
我是xmonad用户,我喜欢指针跟随功能,我经常在Vim中写作时查看pdf和浏览网页,如果不必在两种不同的焦点之间来回切换,我会更加愉快。
如果完全不可能实现,那么打开新的Vim窗口(如:split)在新的终端实例中也不容易吗?

这就是我迁移到 neovim 的原因,其中分割窗格可以使用鼠标切换,并且在窗格内部进行鼠标滚动的操作也能够按预期工作。 - ccpizza
3个回答

10

这并不是一件简单的事情。在终端中使用鼠标的方式是vim向终端发送控制代码请求将鼠标操作作为输入流的一部分发送。由于终端仅报告点击,而不是指针位置的更改,因此vim无法知道鼠标的位置。

通过主要更改,可能可以使支持X的vim直接从X服务器获取指针活动,但那可能会按像素而不是按字符进行报告,所以还需要进一步的工作才能确定当前位于哪个vim窗口下的指针。


谢谢您的回答。我想我有一个丑陋的解决方法。如果我想到任何可用的东西,我会在这里发布它。 - Kamil S.
@ErcanErden 滚动有什么相关性吗?对我来说,它的工作方式与这个问题无关;使用滚轮会滚动选择的 Vim 窗口,而不是指针所在的窗口。 - qqx
2
@qqx:在我的机器上(Linux,urxvt-unicode),它可以在鼠标指针下滚动vim窗口(垂直或水平分割),但光标仍然停留在原始窗口中。 - Ercan Erden

8
set mouse=a

这个应该能解决问题,但具体情况可能取决于你使用的终端仿真器。请参见:help 'mouse'


1
仍然需要点击鼠标来选择窗口,问题是如何在不需要在窗口中单击的情况下选择指针下的窗口。 - qqx

0

这适用于Windows 7/Cygwin 32位mintty/vim 7.3:(我不使用gvim!)

安装了这个http://ehiti.de/katmouse/之后,我可以滚动光标下的窗口,而无需单击选择窗口,单击选择单个vim窗口也可以工作。如果您希望它不将vim窗口拉到前景,则不会在另一个窗口重叠时将其拉到前景。但仍然可以在未首先单击选择它的情况下滚动。

所以:
检查是否存在软件包,可以在操作系统级别上实现所需的鼠标行为。当这对我在cygwin中自编译的vim有效时,它很可能也适用于linux上的控制台vim。

此帖子作为证据,表明这是可能的,这就是为什么它没有成为评论的原因。当我再次使用Linux时,我将进一步调查并更新此帖子,但这可能需要一段时间。

关于set mouse=a:vim 帮助说明需要终端能够处理鼠标输入,可以在这里找到更多信息。:help ttymouse 也可能会有所帮助,例如如果您拥有符合 xterm 标准的控制台,但是 :help term 设置为其他方式。


更新: (全新安装的Fedora 19,没有自行编译的内容。)

Fedora 19 + se mouse=a = 在单个控制台vim窗口中独立打开多个缓冲区并进行滚动操作同样有效。使用的窗口管理器是LXDE。


你是说这适用于vim窗口(在单个操作系统级别的窗口中打开多个文件)还是仅适用于操作系统级别的窗口?如果一些任意程序能够使vim窗口工作,我会感到非常惊讶。 - qqx
@qqx,我所描述的行为仅适用于打开单个终端仿真器窗口(使用mintty.exe),并在其中运行控制台vim。控制台vim本身有几个并排打开的窗口。只要KatMouse正在运行,如果鼠标光标在相关的vim窗口范围内,我就可以滚动每个vim窗口。不使用类似于screen或tmux的东西。需要使用“se mouse=a”。 - sjas

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