【问题标题】:How do I scroll up/down without leaving insert mode?如何在不离开插入模式的情况下向上/向下滚动?
【发布时间】:2013-01-13 20:48:19
【问题描述】:

在 Vim 普通模式下,您可以按 ctrl+ectrl+y 向下滚动和分别向上。我正在尝试制作一个键绑定,让我也可以从插入模式执行此操作。这就是我所拥有的:

" Scroll up and down while in insert mode.
inoremap <C-e> <C-o><C-e>
inoremap <C-y> <C-o><C-y>

这符合预期,但它有一个很大的缺陷。它退出插入模式,滚动,然后重新进入插入模式。这与撤消、重复命令等有关,我希望能够在不离开插入模式的情况下上下滚动。想法?

【问题讨论】:

  • 习惯 Vim 的交互模型怎么样?
  • @romainl:当然,但我认为在插入模式下我不应该将视口向上推几行以使特定行进入视图,这没有任何合乎逻辑的理由。跨度>
  • 致发布第二个答案的人:你为什么删除它? :( 信息量很大。
  • 它解决了撤销破坏,但不解决重复命令破坏。我会把它加回去并请求帮助:-)
  • 因为在 insert 模式下你应该在输入。不玩你的视口。不过,:h scrolloff 可能会对您有所帮助。

标签: vim


【解决方案1】:

你可以看看:h i_CTRL-X_CTRL-E,这是一个内置的滚动插入模式映射:

                    *i_CTRL-X_CTRL-E*
CTRL-X CTRL-E       scroll window one line up.
        When doing completion look here: |complete_CTRL-E|

                    *i_CTRL-X_CTRL-Y*
CTRL-X CTRL-Y       scroll window one line down.
        When doing completion look here: |complete_CTRL-Y|

所以在你的情况下,这可能会奏效:

inoremap <C-e> <C-x><C-e>
inoremap <C-y> <C-x><C-y>

【讨论】:

  • +1 这很酷,可以解决我的问题,但不能完全回答问题。如果您知道,能否补充一下 Vim 中是否有内置的滚动功能?
  • 好吧,您也可以使用鼠标滚动、拖动滚动条或使用 PageUp 和 PageDown 在插入模式下滚动,但这些都会移动光标,因此这可能不是您想要的。无论如何,在普通模式下滚动可能更像 Vim。
  • 似乎没有任何用于滚动窗口的内置函数,所以脚本/别名助记符尽可能接近。即使保存的会话和视图也无法记住精确的窗口滚动位置。我在梳理了vimscript函数(vimdoc.sourceforge.net/htmldoc/eval.html#functions)和选项(vimdoc.sourceforge.net/htmldoc/options.html)的引用后得出了这个结论。
  • @Daniel:感谢您的详尽阐述 :) 将此答案标记为已接受。
【解决方案2】:

undojoin 修复了它的撤消部分:

ino <C-E> <Space><BS><ESC><C-E>:undojoin<CR>gi

&lt;Space&gt;&lt;BS&gt; 序列确保有一个撤消块可以加入。

令人惊讶的是(对我来说)这对. 的损坏没有帮助,所以这可能会让你和现在一样烦人......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2023-03-15
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    相关资源
    最近更新 更多