如何关闭vim
单击鼠标中键时自动进入编辑模式?
背景:我喜欢创建命令字符串,例如JJJj
连接三行,然后向下一行,用鼠标选择该命令字符串,然后vim
使用鼠标中键一次又一次地将其粘贴到其中。然而,最近,vim
单击鼠标中键自动进入插入模式,导致该程序无法正常工作。我不知道这是它vim
本身的变化还是我的发行版(Gentoo)的某些默认配置的变化,但我需要一种方法来再次关闭它。
澄清一件事:我没有set mouse=a
设置(无论是在我的~/.vimrc
还是其他地方。因此,例如,鼠标左键单击不会将光标移动到单击的位置。这可能就是为什么[cas]es提示的原因使用set mouse=
in 并~/.vimrc
不能解决这个问题。
另外,我说的是vim
(in xterm
),而不是gvim
。
系统详细信息:
- Gentoo Linux
- 普通 Linux 4.9.13
- X.Org X 服务器 1.19.3
- XTerm(327)
- vim 8.0.386(似乎是由 Gentoo 修改的)
答案1
这已经完全回答了这里。有关详细信息和替代解决方案,请参阅优秀的链接答案。
简短的回答:放入您的文件 :set t_BE=
中。.vimrc
答案2
尝试使用 禁用 vim 的鼠标模式:set mouse=
。将其添加到您的~/.vimrc
(不带:
)。您可能还需要注释掉任何现有set mouse=
行(如果有)。
这将禁用所有 vim 的鼠标处理,返回到鼠标的默认 X 处理 - 即左键单击开始选择,右键单击扩展选择,中键单击粘贴。特别要注意的是,在 vim 窗口中单击鼠标将会不是移动鼠标光标,或与 vim 的视觉选择模式交互。
:map
顺便说一句,您是否考虑过使用或 录制宏,而不是在鼠标上使用 vim 内置功能的次标准版本?
将命令序列映射到按键是很容易的,例如:map , JJJj
将它们映射到逗号键。
或者使用q
后跟字母或数字将宏记录到寄存器中。例如qaJJJjq
绑定JJJj
到@a
.然后,您只需键入 即可运行该宏@a
。您还可以记录大量宏并将它们映射到,
任何需要的地方,以在多个常用操作之间快速切换。例如:map , @a
我使用,
(逗号)键进行短期(即当前编辑会话)映射,因为它没有映射到我曾经使用过的任何内容。对于永久映射,我使用功能键并将它们设置在我的~/.vimrc
文件中。例如,map <F5> {!}par^V^M}
映射F5键将光标移动到当前段落的开头,通过par
段落重新格式化程序将其传递,然后将光标移过该段落(vim
具有内置的段落重新格式化功能,但我更喜欢par
)。
请注意,映射和宏可以根据需要任意复杂。使用 录制宏q
将记录您键入的任何内容,直到您q
再次键入。如果您想在命令中嵌入 ESC 或回车等控制字符:map
,您可以在输入地图时使用Ctrl-V
aka来“转义”它们 - 例如^V
:map , Do^V^[!!date -R^V^MkJ
该映射,
将当前行的剩余部分(从当前光标位置开始)替换为 RFC-2822 格式的当前日期和时间。
或者如果你想搜索一个模式,连接三行,然后再次搜索,你可以这样做:
:map , JJJn
然后使用 执行第一次搜索/pattern<enter>
,然后按,
进行连接并搜索下一个匹配项。此时,您可以选择是否加入并再次搜索(,
再次按)或仅再次搜索(按n
)或完全执行其他操作。当我不想进行简单的搜索和替换但想每次都做出决定时(例如,当可能有太多误报匹配并且花费的时间超过其值得的时间时),我通常会这样做制作完美的正则表达式搜索模式)
上面只是一个非常简单的示例,说明了它的用途 - 这与仅键入3J
然后交替n
按 find-next 和.
重复上一个命令没有太大区别......当然,您可以:map , .n
。当您需要重复一系列命令时,它确实变得有用不能重复.