将命令 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。命令键未传递给终端应用程序。
<C-
是 Control 键的符号。 Command 键是 <D-
。
Command 键仅对 MacVim 可见,并且仅在使用 GUI 前端时可见。无论您在 Terminal.app 或 iTerm.app(MacVim 或任何其他版本)中使用什么 Vim,它都将 永远不会 查看命令键。
换句话说,您不能期望 <D-
映射在 CLI Vim 中工作。简直不可能。
仅让 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 中可以做什么,但它以前的版本不允许你重新映射任意键——只有一个预定义的集合——所以如果没有一些假设的第三方工具,我不认为这是可行的。
在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>
).
如何将 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。命令键未传递给终端应用程序。
<C-
是 Control 键的符号。 Command 键是<D-
。Command 键仅对 MacVim 可见,并且仅在使用 GUI 前端时可见。无论您在 Terminal.app 或 iTerm.app(MacVim 或任何其他版本)中使用什么 Vim,它都将 永远不会 查看命令键。
换句话说,您不能期望
<D-
映射在 CLI Vim 中工作。简直不可能。仅让 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 中可以做什么,但它以前的版本不允许你重新映射任意键——只有一个预定义的集合——所以如果没有一些假设的第三方工具,我不认为这是可行的。
在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>
).