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

e7arh2l6  于 12个月前  发布在  其他
关注(0)|答案(7)|浏览(150)

我是Vim新手,我在OSX雪豹上使用Mac Vim。我必须采取的最常见的操作之一是将光标移动到新的一行,但也将光标后面的文本移动到新的一行。我知道在正常或可视模式下按“o”会将光标移动到新的一行,并将模式切换为插入。
我想做的是将光标移动到新的一行,并将光标后面的文本也移动到新的一行,最好保持正常模式?这可能吗?我怎样才能完成这项任务?

13z8s7eq

13z8s7eq1#

下面的代码实现了与“普通”编辑器相同的行为(因为我脑子里没有更好的术语),除了你必须按两次而不是一次“回车”。
我也想摆脱空间,如果它是正确的,在我目前的字符。
可能有更简单的方法,我完全欢迎编辑:-)

" 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

这将两次按回车键重新Map到插入模式,放置回车和转义。我使用这个Map(两次回车)的原因是因为我已经习惯了在其他文本编辑器中按回车键的功能;而且输入两次回车也很快。
在这种情况下,我发现另一件有用的事情是允许Vim在最后一个字符之后移动(如果我想将最后一个字符移动到新的一行)。所以我在~/.vimrc中也有以下内容。

set virtualedit=onemore

请注意,我使用的是nnoremapnnormal modenon-recursive)而不是map(这是非常危险的)(查看此信息以了解有关http://learnvimscriptthehardway.stevelosh.com/chapters/05.html差异的更多信息)

tzxcd3kk

tzxcd3kk2#

你需要Map一些键来在光标处做一个换行符,我发现下面的Map很容易使用,只要去你的vimrc并添加这一行::map <silent> bl i<CR><ESC>将光标处的换行符分配给“bl”组合

szqfcxe2

szqfcxe23#

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

lorem ipsum[ ]dolor sit amet

最简单的是r<CR>,也就是“用换行符替换当前字符”。
否则,请使用@ martel的解决方案。

qni6mghb

qni6mghb4#

所以你想把光标后面的当前行中的所有内容移到下一行?阅读:插入换行符??

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

要将此序列的键Map到单个键,请遵循@thb的建议并使用:map命令:

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

oewdyzsn5#

:map <F2> i<CR>

这会使vi保持在插入模式。

vmdwslir

vmdwslir6#

正如我在这篇文章中所回答的,如何在Vim中不进入插入模式的情况下在光标所在的位置插入换行符?.
请尝试Control + j

66bbxpm5

66bbxpm57#

我已经找到了一些最简单的方法来重复一个需要多个步骤的过程(即。移动文本到一个新行,删除,等等)是record a macro,执行一个命令,然后停止记录,并键入@a在每一行你想运行。例如车削

{"hi", "there", "you"}

进入:

{"hi",
"there",
"you"}

您可以键入(在正常模式下):

qa            <--- start recording
f [space]     <--- move cursor to next space
d$            <--- delete from cursor to end of line
o             <--- move cursor and create new line below current line
[esc]         <--- exit insert mode (default when pressing "o")
p             <--- paste the deleted contents^^^

其中f [space]是“f”键,后跟空格键。然后你只需要移动到你想要应用这个的每一行并输入(在正常模式下):

@a

或者你可以移动光标,进入插入模式,然后在每一行按回车键:)

相关问题