Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t this.vimrc映射在终端中工作(但在MacVim中工作):map<;S-Enter>;O<;电子稳定控制系统>;_Vim - Fatal编程技术网

为什么';t this.vimrc映射在终端中工作(但在MacVim中工作):map<;S-Enter>;O<;电子稳定控制系统>;

为什么';t this.vimrc映射在终端中工作(但在MacVim中工作):map<;S-Enter>;O<;电子稳定控制系统>;,vim,Vim,我的.vimrc文件中有两行: map <S-Enter> O<Esc> map <CR> o<Esc> map O 地图o 第二行按预期工作,但第一行没有 其想法是,如果我按下Enter键,那么vim应该在光标位置下方插入一条新行,并将光标向下移动到该行。如果我按下Shift Enter键,vim应在光标位置上方插入新行,并将光标向上移动到该行。这种映射应该有效,因为正常模式下的大写O键将在光标所在的行上方插入一条新行,将光标放在该行的开头,

我的.vimrc文件中有两行:

map <S-Enter> O<Esc>
map <CR> o<Esc>
map O
地图o
第二行按预期工作,但第一行没有

其想法是,如果我按下Enter键,那么vim应该在光标位置下方插入一条新行,并将光标向下移动到该行。如果我按下Shift Enter键,vim应在光标位置上方插入新行,并将光标向上移动到该行。这种映射应该有效,因为正常模式下的大写
O
键将在光标所在的行上方插入一条新行,将光标放在该行的开头,然后将用户置于插入模式。大写字母
O
后接
,只需将vim恢复到命令模式即可

我已经检查过了,大写字母
O
工作正常。那么,为什么我的映射不起作用呢?我试过使用
map
map
,但这两种方法都不管用


EDIT结果表明它在MacVim中有效,但在iTerm中无效。如果有人能解释原因并提出解决方案,我将不胜感激。

您使用的是console Vim吗?某些组合键只能在GVIM中映射。在所有/大多数Linux终端中,Enter不能与Shift或Ctrl组合使用。您的映射本身是正确的,但是您必须在映射中使用不同的LHS

由于内部处理键盘输入的方式,某些组合键甚至不能在GVIM中使用。某些组合键(如Ctrl+非字母键)无法映射,并且无法区分Ctrl+字母与Ctrl+Shift+字母。这是一个已知的痛点,也是关于vim_dev和#vim IRC通道的各种讨论的主题

一些人(最重要的是Paul LeoNerd Evans)希望解决这一问题(即使是支持这一点的终端中的console Vim),并提出了各种建议,cp


但是到今天为止,还没有补丁或志愿者出现,尽管许多人表示希望在未来的Vim 8主要版本中使用它。

您是否通过终端使用Vim?某些终端上没有某些组合键。谢谢。我想我会尽可能地坚持麦克维姆。不,不要坚持麦克维姆。改为使用可移植映射:例如,请参见
:help leader
。或者更好,使用
oO
@romainl:我发现
映射对于新功能来说很好,但是这里的海报想要
的超负荷含义,我同意他选择的映射,因为它接近原始映射。像
这样的东西很难记住(对我的大脑和手指都是如此)。这个Vim限制真的很烦人。我认为一般来说,重载这样的基本功能不是一个好主意,特别是使用
map
,这对于OP想要实现的功能来说可能太广泛了。