2010-10-18 36 views
29

我想在不离开正常模式(进入插入或命令行模式)的情况下将行(在光标位置处)分为两行。这可能吗?如何在正常模式下打破vim中的一行?

我目前到达我想要的位置,并点击'我'进入插入模式,'输入'将两行中断,然后'esc'返回到正常模式。

我不想设置最大行长度或做任何语法或类似的东西。我只想在不离开正常模式的情况下将一行分成两行。 'J'加入光标所在的行到它下面的行,这很方便。我想要的是相反的 - 用一条命令将一条线分成两条。

回答

34

试试这个:

:nnoremap <NL> i<CR><ESC> 

然后只要按下Ctrl-J,每当你想分割线。

+2

这正是我所希望的。我觉得奇怪的是,这不是vim中的内置命令,但是我将该行添加到了我的.vimrc文件中,并且很高兴地沿着它走。 – Ted 2010-10-18 17:44:32

+2

谢谢,我很欣赏发现一个我从来不知道我需要的功能,直到现在... ;-) – 2010-10-18 17:45:48

+5

我认为最好使用':noremap'而不是':map',并且使用':'更好: nnoremap'在这种情况下的问题状态*正常模式*。 – Benoit 2010-10-18 18:35:39

20

我不知道一个键盘命令,但很多时候我做“r”,然后“Enter”断开一行。

“r”代替光标下的当前字符而不进入插入模式。这可能不是你想要什么,如果你不希望替换字符...

+0

不适用于我...它插入'^ M'字符。可能它取决于'&fileformat'。 – Benoit 2010-10-18 18:38:08

+0

@Benoit,'fileformat'在编辑时没有区别;它只用于读写。 – graywh 2011-07-21 20:05:29

2

据我所知,这是不可能的,没有进入插入模式。但是,您可以用类似的宏它(用您想使用的任何键Z)

nmap Z i<cr><esc>k$ 

基本上这个映射的关键“Z”进入插入模式的“我”,插入一个回车“<cr>”,离开插入模式“<esc>”,走了一条线“K”,最后去行“$”

2

每这种重复的问题结束:How do I insert a linebreak where the cursor is without entering into insert mode in Vim?

从VIM内,类型:

:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter] 

这G键映射到宏我[进入] [逃生]

+0

谢谢。我在发布之前做过一些搜索,但我想我没有使用正确的术语。这是一个很好的讨论,你链接到,我觉得不好,我发布了一个副本,但我想我从Amardeep有一个稍微优雅的答案。 – Ted 2010-10-18 17:49:27

+0

我发现使用Vim的关键表示法(例如)更好。另外,关于地图模式更具体。 – graywh 2011-07-21 20:06:54

13

放到位光标和...

r<Enter> 
+0

不确定为什么这不是最佳答案,因为它不需要其他映射。 – 2012-07-09 14:55:25

+3

因为它将当前位置中的字符替换为\ n – caio 2012-09-13 14:29:53

+0

,这也是因为您可能想要在非空白字符上打断该行,例如在'(|(arg)'这意味着'arg)'将会继续下一行,但你失去了其中一个零件 – skamsie 2017-02-26 21:19:43

9

到其他的答案相似,但不会取代当前字符。

R<enter>

没有重新映射必需的。

+2

关闭,但将用户置于插入模式,他想以正常模式结束。 – Symmitchry 2014-07-08 22:33:55

0

您可以使用录制。将光标放在要插入换行符的地方。键入qa开始记录在寄存器a(你可以用比a以外的其他寄存器,如果你想,然后输入i(切换到插入模式),返回(插入新行),逃生(退出插入模式),q(结束录音。)现在,您可以通过输入@a(其中a是您在开始录音时使用的注册号码来调用此序列的序列,因此只需将光标移动到要插入换行符的位置并输入@a即可。

相关问题