如何在vim中将Command S
映射到: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线程或this线程,但它们都已超过三年且不再有效。这就是为什么我要求当前版本的Mac OS X(El Capitan)
答案 0 :(得分:7)
<C-
是 Control 键的表示法。对于Command键,它是<D-
。
只有在使用GUI前端时,Command键才能对MacVim可见。无论你在Terminal.app或iTerm.app(MacVim或任何其他版本)中使用什么Vim,它都永远不会看到命令键。
换句话说,您不能指望<D-
映射在CLI Vim中工作。这根本不可能。
在Mac OS X上按 Cmd + 某事时, 方式让CLI Vim做任何事情就是映射在你的终端模拟器中组合模拟按下另一个键,它本身映射到Vim中的所需命令。
在~/.vimrc
...
nnoremap <F6> :w<CR>
在iTerm.app ...
仅供参考,0x112
为<F1>
,0x113
为<F2>
等。我选择<F6>
是任意的,使用适用于您的任何内容。
在Terminal.app ...
我没有El Capitan所以我不知道在新的Terminal.app中可以做些什么,但它之前的版本不允许你重新映射任意键 - 只有预定义的一套 - 所以我不知道如果没有一些假想的第三方工具,我认为这是可行的。
在Vim中使用 Cmd + S 的整个想法非常糟糕。习惯于习惯于Vim。
答案 1 :(得分:3)
C
中的<C-S>
代表 Control ,而不是Command。如果要映射Command + S,则需要<D-S>
。 (不,我不知道D代表什么。)
请注意,这只适用于MacVim。 Command键不会传递给终端应用程序。
答案 2 :(得分:3)
romainl的回答让我走上正轨但不幸的是对我没有用(OS X Sierra,MBP 2017)。还使用(任意)键F6作为中间映射:
将以下行添加到〜/ .vimrc :
nnoremap <F6> :w<CR>
在Iterm2中创建一个新的键盘快捷键:
Iterm2 keyboard shortcut config
希望这有帮助。
答案 3 :(得分:1)
通过使用Iterm2和自定义映射键映射绑定,完全有可能映射cmd+s
或任何cmd
组合。
因此,要映射cmd+s
以保存到终端vim中,您首先需要更改Iterm2配置:
Preferences -> Keys
并按窗口底部的+
按钮,然后添加键盘快捷键并选择名为Send text with "vim" Special Chars
的操作和特殊字符:{{1 }}(请注意\<C-s>
前缀),如下所示:\
请注意,Iterm2将把击键noremap <silent> <C-s> :w<CR>
inoremap <silent> <C-s> <ESC>:w<CR>i
转换为cmd+s
并将其直接发送到vim。因此,您可以牢记这一点。例如,您可以禁用ctrl+s
(通常会关闭Iterm2中的窗口),并以cmd-w
的形式直接发送到vim来分割窗口,在这种情况下,您无需更改vim中的任何内容一侧,仅将Iterm2中的<C-w>
映射到<cmd-w>
。另外,您可以禁用\<C-w>
以防止讨厌的Iterm2打印对话框,并在vim中调用:fzf之类的东西。
唯一的缺点是您需要单独创建所有地图:
顺便说一句,如果您想映射一些“非常特殊的”键,例如cmd+p
(例如,使用NERDCommenter注释行),则需要使用“发送Scape序列”操作来做稍微不同的键映射:
然后在vim中,设置cmd+/
击键的映射(请注意,特殊的^[/
符号是先按^[
,然后按<ctrl-v>
制成的)。 / p>