插入空行而不进入插入模式

时间:2010-07-03 04:50:18

标签: vim

我经常发现自己在o或O和ctrl上弹跳{插入空白行并退出插入模式。

认为必须有一个更简单的方法,并希望保持我的光标位置,我将这些草率的宏一起攻击:

map <Leader>O :let cursorpos = getpos(".")<CR>:i<CR><CR>.<CR>:let cursorpos[1] = cursorpos[1] + 1<CR>:call setpos('.', cursorpos)<CR>
map <Leader>o :let cursorpos = getpos(".")<CR>:a<CR><CR>.<CR>:call setpos('.', cursorpos)<CR>

但是,这不允许范围。如果能够获得5 \ O并且比当前行高出5个空白将是很好的。

有关如何解决这个问题的建议允许范围并在完成时仍然返回原始光标位置?

3 个答案:

答案 0 :(得分:12)

您可以使用:call append(linenumber, repeat([''], 5))。它不会移动光标。

答案 1 :(得分:9)

unimpaired插件会添加符合您需要的映射。您可以使用[<space> insert a blank line above the cursor,或]<space>下的光标下方{{3}}。这两个映射都可以加上计数。

答案 2 :(得分:1)

我将此添加到我的.vimrc

"create new line below current line without leaving normal mode or moving cursor
noremap - m`o<Esc>``
"create new line above current line without leaving normal mode or moving cursor
noremap _ m`O<Esc>``

我更喜欢这个解决方案有几个原因:

  • 我通常不会在正常模式下使用 - _ 键,它们位于键盘上的同一物理键上。
  • 似乎安装一个插件就是矫枉过正。我避免为简单的事情下载插件,因为他们向我的环境引入了我尚未完全理解或信任的新代码,它可能会干扰其他自定义或插件。
  • 我尝试了这个问题的作者在他的评论中根据接受的答案提出的解决方案,但是在使用它之后,命令会做出奇怪和令人不安的事情。
  • 我通常喜欢多次按而不是传递一个数字参数,所以我不是坐在那里数着手指上的东西,而是继续按直到看起来对(较少概念可视化和更真实的愿景)。不幸的是,即使这个解决方案也无法按照我想要的方式使用命令。但是,通过映射 - _ ,可以重复按下这些以获得相同的效果。遗憾的是,它并不接近主排......

警告: 标记`键会影响跳转列表。如果能让你高兴的话,你可以使用任何其他标记++

相关问题