【问题标题】:unbinding mouse scrolling with keyboard arrow keys on Ubuntu 16.04在 Ubuntu 16.04 上使用键盘箭头键解除绑定鼠标滚动
【发布时间】:2017-08-18 21:21:54
【问题描述】:

我在 Ubuntu 16.04 上使用 vim,我的终端是 konsole。

让我痛苦的问题是: 每次当我试图在 vim 中使用鼠标中键粘贴一些东西时,我都会因为不小心滚动鼠标滚轮而感到不安。光标飞走了,我把内容粘贴到了错误的地方。

所以我试图在 vim 中禁用鼠标滚动。但是,我在网上找到的每个解决方案似乎都对我不起作用。最后我意识到我的 在系统范围内绑定到箭头键(↑ 和 ↓)。通过将箭头键重新映射到 ,鼠标滚动也被禁用。因此,除非我取消绑定,否则我无法在 vim 中禁用鼠标滚动。

不幸的是,我没有找到任何解决方案。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: ubuntu vim key-bindings


    【解决方案1】:

    我认为,您仍然可以在不使用鼠标的情况下将某些内容粘贴到 vim 中。所以,你不需要设置任何东西来解决你的问题。

    只需将 vim 光标放在要粘贴文本的位置,键入 Ctrl + v 或 Cmd + v。

    【讨论】:

    • 很抱歉 Ctrl + V 或 Cmd + V 不能在 vim 中粘贴东西。在 linux 终端中有粘贴内容的键盘快捷键,但它不是 Ctrl + V 或 Cmd + V 就像在 Windows 或 OSX 中那样。而且我不是在寻找键盘快捷键。我正在寻找一种精确的解决方案,以使鼠标中键粘贴在 vim 中完美运行。如果你有在 linux 上开发软件的经验,你应该明白我的意思。
    • 好的。但是,恕我直言,您应该考虑在使用 vim 时根本不使用鼠标。 vim 的真正强大之处在于键盘/键绑定。
    【解决方案2】:

    我终于找到了解决方案。
    我在这里发布我的解决方案,以防有人和我有同样的问题:

    似乎解除 到键盘 的绑定的唯一方法是重新编译您的终端。因为在大多数情况下,绑定是硬编码的。

    就我而言,我使用 konsole 作为终端。所以我所做的是:

    1. git clone konsole源代码 by
    git clone git://anongit.kde.org/konsole.git

    2.在源文件
                      konsole/src/TerminalDisplay.cpp
    在第2501行和第2522行之间有一段代码:

        if (_mouseMarks) {
           const bool canScroll = _scrollBar->maximum() > 0;
           if (canScroll) {
               _scrollBar->event(ev);
               _sessionController->setSearchStartToWindowCurrentLine();
               _scrollWheelState.clearAll();
           }
           else {
            // assume that each Up / Down key event will cause the terminal application
            // to scroll by one line.
            //
            // to get a reasonable scrolling speed, scroll by one line for every 5 degrees
            // of mouse wheel rotation.  Mouse wheels typically move in steps of 15 degrees,
            // giving a scroll of 3 lines
    
            const int lines = _scrollWheelState.consumeSteps(static_cast<int>(_fontHeight * qApp->devicePixelRatio()), ScrollState::degreesToAngle(5));
            const int keyCode = lines > 0 ? Qt::Key_Up : Qt::Key_Down;
            QKeyEvent keyEvent(QEvent::KeyPress, keyCode, Qt::NoModifier);
    
            for (int i = 0; i < abs(lines); i++)
                emit keyPressedSignal(&keyEvent);
           }
           ...
        }
    

    注释“else {**}”部分以防止 konsole 将滚轮移动绑定到箭头键按下。

    3.重新编译源码包。

    重新启动您的终端,然后问题就会消失。

    如果您使用其他终端,完成此操作应该非常相似。 **1) 下载源代码包;2) 修改相应代码; 3) 重新编译**就可以了!

    【讨论】:

      【解决方案3】:

      如果您只是想从其他地方粘贴到 Vim 中,我建议您先使用鼠标中键单击方法,并让 Vim 直接与您的系统剪贴板一起工作。我认为下面的链接应该会有所帮助:

      http://vim.wikia.com/wiki/Accessing_the_system_clipboard

      【讨论】:

      • 感谢您提供其他方法。不过我觉得对自己来说最方便的方法是使用中间按钮,因为它既简单又快速。我已经解决了车轮问题,我对现在的一切都很好。还是谢谢!
      猜你喜欢
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 2013-08-11
      • 2011-05-16
      • 1970-01-01
      相关资源
      最近更新 更多