想映射<S-j>滚动以前的冒号命令

时间:2019-10-22 05:36:50

标签: vim

我正在尝试映射<S-j>来滚动以前的冒号命令。因此,<S-j>代替了:<Up>

nnoremap <S-j> :<Up>

此绑定的问题是,滚动倒数第二个冒号命令实际上是:<Up><Up>,但是如果您按两次<S-j>,则会得到:<Up>:<Up>

如何正确映射它,以便在命令栏中没有:<Up>时输出<Up>,如果命令栏中已经有文本,则输出{{1}}

1 个答案:

答案 0 :(得分:2)

我看不到你的行为。如果我按两次<S-j>(顺便说一句J,这是一种令人费解的方式),则会得到前一个命令行加上文字字母J。您的命令是为正常模式定义的;由于右侧的:会以命令行模式结尾。 J = <S-j>在那里映射(至少不是:nnoremap映射)。

为了能够重复J,您必须为命令行模式定义其他映射:

:cnoremap <S-j> <Up>

由于您已经在命令行中,因此可以省去:

但是,我不建议您这样做,因为它将使您无法直接输入大写字母J(您仍然可以通过<C-v>J或您想说的<C-v><S-j>来输入大写字母J)。最好切换到使用不可打印字符(例如<C-j>)的映射。