将光标后的文本移动到新行

时间:2012-04-01 13:18:40

标签: vim

我是Vim新手,我在OSX Snow Leopard上使用MacVim。我必须采取的最常见的操作之一是将光标移动到新行,但也将光标后的文本移动到新行。我知道在正常或可视模式下按“o”会将光标移动到新行并将模式切换为插入。

我想做的是将光标移动到新行,并将光标后的文本移动到新行,最好是保持正常模式?这可能吗?我怎样才能完成这项任务?

7 个答案:

答案 0 :(得分:18)

如果光标位于<space>上,([]标记光标):

lorem ipsum[ ]dolor sit amet

最简单的做r<CR>,即“用换行符替换当前字符”。

否则,请使用@ knittl的解决方案。

答案 1 :(得分:11)

所以你想要移动当前行中的所有内容,这是光标到下一行之后?阅读:插入换行符??

(move cursor)
i (or a)
<return>
<esc> (or ^C)

要将此按键序列映射到单个键,请按照@thb的建议操作并使用:map命令:

:map <F2> i<CR><ESC>

答案 2 :(得分:6)

:map <F2> i<CR>

这使vi处于插入模式。

答案 3 :(得分:2)

根据您想要的效果,提供命令

:map <F2> o<Esc>

或命令

:map <F2> O<Esc>j

此后,按<F2>只需按一下键即可完成工作。

但是,当然,@ Alex也是对的。只需按o然后按Esc即可。

答案 4 :(得分:2)

正如我在这篇文章中回答的那样,How do I insert a linebreak where the cursor is without entering into insert mode in Vim?

请尝试Control + j

答案 5 :(得分:0)

下面的代码实现了与“普通”编辑器相同的行为(因为缺少更好的术语),除了你必须按两次“输入”而不是一次。

如果它在我现在的角色之前,我也想摆脱这个空间。

可能有一种更简单的方法,我完全欢迎编辑: - )

" in ~/.vimrc or ~/.vimrc.after if you're using janus
nnoremap <cr><cr> :call ReturnToNewLine()<cr>

function ReturnToNewLine()
    let previous_char = getline(".")[col(".")-2]
    " if there's a space before our current position, get rid of it first
    if previous_char == ' '
      execute "normal! \<bs>\<esc>"
    endif
    execute "normal! i\<cr>\<esc>"
endfunction

重新按下输入两次以进入插入模式,放置回车并转义。 我使用这种映射(输入两次)的原因是因为我通过按Enter键习惯了其他文本编辑器的这个功能;另外,输入两次输入很快。

我发现在这种情况下有用的另一件事是允许vim在最后一个字符后移动(如果我想将最后一个字符移动到新行)。所以我的~/.vimrc也有以下内容。

set virtualedit=onemore

请注意,我使用nnoremap n 正式模式没有 n- 重新草书)而不是{{1 (这非常危险)(请查看此信息以获取有关差异的更多信息http://learnvimscriptthehardway.stevelosh.com/chapters/05.html

答案 6 :(得分:0)

您需要映射一些键才能在光标处换行, 我发现以下映射易于使用,只需转到您的vimrc并添加以下行: :map <silent> bl i<CR><ESC> 将光标处的换行符分配给“ bl”组合