将命令 s 映射到 vim 中的 :w

Mapping command s to :w in vim

如何将 Command S 映射到 vim 中的 :w

我已经尝试了其他线程的所有方法,但在 Mac OS X El Capitan 中似乎没有任何效果。

这应该在以前的版本中有效,但我试过了,但没有成功。

noremap  <silent> <C-S>    :update<CR>
vnoremap <silent> <C-S>    <C-C>:update<CR>
inoremap <silent> <C-S>    <C-O>:update<CR>

我能找到的关于这个主题的所有东西都已经有几年的历史了,不再适用了。我可以找到 this thread or this 线程,但它们都超过三年并且不再工作。这就是为什么我要求 Mac OS X (El Capitan)

的当前版本

<C-S>中的C代表Control,不是Command。如果要映射 Command+S,则需要 <D-S>。 (不,我不知道 D 代表什么。)

请注意,这仅适用于 MacVim。命令键未传递给终端应用程序。

  1. <C-Control 键的符号。 Command 键是 <D-

  2. Command 键仅对 MacVim 可见,并且仅在使用 GUI 前端时可见。无论您在 Terminal.app 或 iTerm.app(MacVim 或任何其他版本)中使用什么 Vim,它都将 永远不会 查看命令键。

    换句话说,您不能期望 <D- 映射在 CLI Vim 中工作。简直不可能。

  3. 让 CLI Vim 在按下 Cmd+[= 时执行任何操作的方法53=]something on Mac OS X 是在终端模拟器中映射该组合以模拟按下另一个键,它本身映射到 Vim 中的所需命令。

    ~/.vimrc

    nnoremap <F6> :w<CR>
    

    在iTerm.app…

    仅供参考,0x112<F1>0x113<F2>,等等。我对 <F6> 的选择是任意的,使用适合你的任何东西。

    在Terminal.app…

    我没有 El Capitan,所以我不知道在新的 Terminal.app 中可以做什么,但它以前的版本不允许你重新映射任意键——只有一个预定义的集合——所以如果没有一些假设的第三方工具,我不认为这是可行的。

  4. 在Vim中使用Cmd+S的整个想法非常糟糕。改用 Vim 方式。

romainl 的回答让我走上了正确的轨道,但不幸的是对我不起作用(OS X Sierra,MBP 2017)。还使用(任意)键 F6 作为中间映射:

将以下行添加到您的 ~/.vimrc:

nnoremap <F6> :w<CR>

在 Iterm2 中创建新的键盘快捷键 :

  • 快捷键:cmd-s
  • 操作:发送转义序列
  • Esc+: [17~

Iterm2 keyboard shortcut config

希望对您有所帮助。

完全可以通过使用 Iterm2 和自定义映射键映射绑定来映射 cmd+s 或任何 cmd 组合。

因此,要映射 cmd+s 以保存在终端 vim 中,您首先需要更改 Iterm2 配置:

  • 转到 Preferences -> Keys 并按 window 底部的 + 按钮,然后添加键盘快捷键和 select 名为 [=16] 的操作=] 和特殊字符:\<C-s>(注意 \ 前缀),像这样:

  • 其次,转到vim配置并添加这样的地图:
noremap  <silent> <C-s> :w<CR>
inoremap <silent> <C-s> <ESC>:w<CR>i

注意Iterm2会将击键cmd+s转换为ctrl+s并直接发送给vim。所以你可以考虑到这一点来做一些其他的事情。例如,你可以禁用cmd-w(通常会关闭Iterm2中的window)并直接发送到vim作为<C-w>拆分windows,在这个如果您不需要更改 vim 方面的任何内容,只需将 <cmd-w> 映射到 Iterm2 中的 \<C-w>。此外,您可以禁用 cmd+p 以防止烦人的 Iterm2 打印对话框并调用 :fzf o 类似 vim.

中的内容

唯一的缺点是您需要单独创建所有地图:

顺便说一句,如果你想映射一些“非常特殊”的键,比如 cmd+/(例如用 NERDCommenter 注释行),你需要使用“Send Scape sequence”做一个稍微不同的键映射动作:

然后,在 vim 中,设置 ^[/ 击键的映射(请注意,特殊的 ^[ 符号是通过按 <ctrl-v> 然后按 <esc>).