映射到<c - [>但不覆盖<esc>

Mat*_*dge 0 vim

我想创建一个vimrc映射,让我可以更快地调整垂直分割的大小.我想过这样做:

noremap <c-[> :vertical resize +5<cr>
noremap <c-]> :vertical resize -5<cr>
Run Code Online (Sandbox Code Playgroud)

它运作得很好.唯一的问题是,因为我正在映射(控制和左方括号),当我在正常模式下击中Escape时,它也会导致分割的大小调整.我认为这是因为你通常可以作为逃避的替代品.

所以问题是,我可以映射该键序列但不映射Escape吗?我在这里丢失了一些蠢货吗?

ste*_*eha 5

你要做的是一件棘手的事情.

有一个相对现代的想法,用户键入的是一个键码,具有修饰符的"和弦"; 因此Ctrl+ [[与按住键相结合的键码Ctrl.如果您正在编写本机Windows应用程序或本机GNOME应用程序或其他任何内容,那么您可以访问此级别的信息.

但是,旧的"哑终端"只发送纯ASCII,我很确定库函数vim使用ASCII字符处理.当用户输入字符时,vim会看到一串字符,无法检查密钥代码或修饰符.

你可能能够用vim的GUI风格做你想做的事,但我的猜测是基于角色的那些不会这样做.

但我认为最好还是做别的事情.首先,Ctrl+ ]已经在vim中有一个有用的功能.

这是我的建议:绑定以[或开头的序列].在vi和vim中,[[并且]]是有效的导航键序列,您可以绑定类似的序列而不阻止它们的使用.

例如,你可以绑定[v]v两个,"垂直调整大小"一个开始v.

在经典的vi中,我确信[v并且]v默认情况下不受任何限制.在vim中,我很确定他们也没有任何约束力.(vim有很多功能我犹豫不决!但是我手册中没有找到任何内容,当我尝试输入时,vim只是发出哔哔声.)

作为另一种选择,您可以绑定功能键.我的功能键在vim中全部未使用.

请注意,即使键盘没有,vi也可以使用功能键; 你可以输入#2并调用绑定到功能键的宏F2.(我曾经使用过哑终端,ADM-3A,没有功能键.)