我是Vim新手,我在OSX Snow Leopard上使用MacVim。我必须采取的最常见的操作之一是将光标移动到新行,但也将光标后的文本移动到新行。我知道在正常或可视模式下按“o”会将光标移动到新行并将模式切换为插入。
我想做的是将光标移动到新行,并将光标后的文本移动到新行,最好是保持正常模式?这可能吗?我怎样才能完成这项任务?
答案 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”组合