【问题标题】:What is mod key in Vim, can I assign Win key to Vim mod key?Vim 中的 mod 键是什么,我可以将 Win 键分配给 Vim 的 mod 键吗?
【发布时间】:2025-12-25 13:55:11
【问题描述】:

我知道 Alt 键是默认的 mod 键。

但是我可以将其更改为 Vim 中的 Win 键,因为 Alt 已经是我的 wmii window manager 的 mod 键了吗?

或者具体来说,我可以在 Vim 中使用 Win 键进行键映射,就像 AltCtrlShift?就像我想做<Win-J> 一样,就像nnoremap 中的<C-J>

我已经阅读了Can Windows key be mapped in Vim? 的问题,但它并没有回答我的疑问。所以我来这里寻求帮助。

PS:我使用的是 Ubuntu 14.04

【问题讨论】:

  • 您使用的是 GNU/Linux 系统吗?
  • @rendon,是的,我使用的是 Ubuntu 14.04

标签: ubuntu vim


【解决方案1】:

由于 Vim 不能识别窗口键,你可能必须这样做:

  1. 将窗口键映射到操作系统上未映射的 ctrl 键序列(例如 Ctrl + L)(仅当 vim/您的 shell 是活动窗口时)

  2. `nnoremap v 回显“hi”。现在你可以按 Win + v

这不是最佳解决方案,因为我不确定您的操作系统如何将持有win 键视为Ctrl + l 的多次调度。或许你需要弄清楚你按win时是否可以让它“按下然后立即释放”(但还没有释放它)

编辑:

解决方案分为两部分:将 Windows 键映射到某个序列(例如 ctrl + l),然后在 vim 中,在 vimrc 中放入类似的内容:

inoremap <c-l><c-k> hello
nnoremap <c-l><c-k> :echo("hello")<cr>

现在在插入模式下按Win + k 应该为您输入hello,在正常模式下按win + k 应该回显“hello”。

【讨论】:

  • 你认为我们可以像&lt;C-J-K&gt; 一样使用contral+2 normal key?该怎么做?
  • &lt;c-j&gt;&lt;c-k&gt; 应该可以工作。 (请注意,在 Vim/终端中, 被硬编码为 Enter 键)你想使用像 &lt;c-l&gt; 这样没有硬编码的键
  • 你的意思是我可以将 映射到 :echo 'test',然后当我同时按 Control,j,k 时,我可以得到 'test'在我的屏幕上?
  • 不错。对于普通模式使用nnoremap,对于插入模式使用inoremap。例如,如果您将win 映射到ctrl + l,并输入inoremap &lt;c-l&gt;&lt;c-k&gt; hello,您应该会看到它在插入模式下为您键入hello,如果您按win + k。这对你有用吗?
  • 我现在要试试这个
【解决方案2】:

在我的系统中,我使用xmodmap 来制作Window 键和附加的Ctrl 键,这样我就使用Window 键作为我的控制键(原来的Ctrl 键仍然有效)。

~/.Xmodmap中保存以下行:

! Make windows Meta key an aditional Control key
remove Control = Control_L Control_R
remove mod4 = Super_L Super_R
add Control = Control_L Super_L

有些窗口管理器会自动加载这个文件,如果没有,使用xmodmap ~/.Xmodmap

【讨论】:

  • 但是与nmap中的原始控件相比,我应该如何使用Win作为不同的键?
  • 在这个Win之后是一个Ctrl键,在映射中用&lt;c&gt;引用它。
  • 你是说大写的C?所以和原来的ctrl映射没有区别?所以我仍然没有得到一个更特殊的映射键。