首页 > 解决方案 > 想要地图滚动以前的冒号命令

问题描述

我正在尝试映射<S-j>以滚动以前的冒号命令。所以<S-j>代替:and <Up>

nnoremap <S-j> :<Up>

这个绑定的问题是滚动第二个最后一个冒号命令实际上是:<Up><Up>,但如果你按<S-j>两次你会得到:<Up>:<Up>

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

标签: vim

解决方案


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

为了能够重复J,您必须为命令行模式定义一个附加映射:

:cnoremap <S-j> <Up>

这省略了:, 因为您已经在命令行中。

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


推荐阅读