了解CTRL-U组合


19

这个答案中,我面对的是实际函数名称之前和之后的CTRL-Uin函数调用:

:nnoremap <buffer> <cr> :<C-U>call append('.', repeat([''],v:count1))<cr>

这是帮助的内容:

CTRL-U      Scroll window Upwards in the buffer.  The number of
            lines comes from the scroll option (default: half a
            screen).  If [count] given, first set the 'scroll'
            option to [count].

我自己尝试过,它按我的预期工作。但是我不太了解有关该scroll选项的部分。他们是什么意思'scroll' option

而且它在插入模式下还会做一些奇怪的事情。据我了解,它删除了从光标到该行开头的所有内容,然后将结果行与上面的行连接起来。

Answers:


27

默认情况下,“帮助”返回适用于普通模式的所有映射。在正常模式下,<C-u> 确实会向上滚动,但这不是我们感兴趣的。要查看<C-u>命令行模式或cmode(键入冒号开头的命令的模式)下的功能,请搜索:h c_CTRL-u

                            *c_CTRL-U*
CTRL-U      Remove all characters between the cursor position and
        the beginning of the line.  Previous versions of vim
        deleted all characters on the line.  If that is the
        preferred behavior, add the following to your .vimrc: >
            :cnoremap <C-U> <C-E><C-U>

要了解为什么这对于正常模式映射很有用,请尝试将其删除,然后输入类似的内容5:,然后看看会发生什么。您应该看到类似以下内容:

:.,.+4

这是一个范围

现在尝试输入5:<C-u>,看看会发生什么。你应该看到

:

同样在可视模式下,按:插入范围

:'<,'>

这就是为什么您会经常看到如下映射的原因:

nnoremap foo :<C-u>bar

要么

xnoremap foo :<C-u>bar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.