在vim中重新映射<c-e>和<c-y>后光标移动

时间:2016-02-22 13:44:00

标签: vim

我在vim中遇到过一些奇怪的行为。我做了这个映射:

execute "set <A-j>=\ej"
execute "set <A-k>=\ek"
noremap <A-j> <C-e> 
noremap <A-k> <C-y>

但现在当我使用<A-j><A-k>时,光标会向右移动!当我刚刚使用<C-e><C-y>时,它不会这样做。

这是一个错误还是一些奇怪的功能?

1 个答案:

答案 0 :(得分:1)

以下是您发布的Vim代码:

execute "set <A-j>=\ej"
execute "set <A-k>=\ek"
noremap <A-j> <C-e> 
noremap <A-k> <C-y>

如果您复制/粘贴它,或者您编辑此帖子(或您的帖子)并转到<A-j>行的末尾,您会发现那里有一个尾随空格。这很重要,因为在Vim的正常模式下,按 Space 会将光标向右移动一个位置。

在粘贴时使用此代码,我可以重现问题,尽管我的光标向右移动,而不是如您所述向左移动。地图以 Ctrl e Space 执行,它会将视口向下滚动一行,然后将光标向前移动一个字符。

您的问题描述光标移动到左侧,而不是右侧。您在编写问题时可能只是左右混淆,但您.vimrc中有嵌入式退格(Ctrl-H或{{Delete的情况也是可能的。 1}})行尾的字符。这会产生向后移动(左)一个字符的效果,就像 Space 前进(右)一个字符一样。