this is line one
this is line two
光标位于第一行。现在,我要在第一行和第二行之间换行,就像这样:
this is line one
this is line two
我知道当我处于正常模式时,只需按
o
即可。但这将进入插入模式。 如何插入新行并保持正常模式?
#1 楼
我为此使用了一个映射:" Quickly insert an empty new line without entering insert mode
nnoremap <Leader>o o<Esc>
nnoremap <Leader>O O<Esc>
这样,您可以使用
<Leader>o
在光标下方插入一行,并使用<Leader>O
在上一行插入一行。 注意:有人可能会说它需要与
o<Esc>
一样多的击键,但是希望您选择了这个组长来简化这种映射。另外,我真的不确定是否有内置方法可以做到这一点。#2 楼
一种不通过插入模式,不移动光标的解决方案,并且允许您使用计数器一次附加几行(3 \ o等):nnoremap <silent> <leader>o :<C-u>call append(line("."), repeat([""], v:count1))<CR>
nnoremap <silent> <leader>O :<C-u>call append(line(".")-1, repeat([""], v:count1))<CR>
评论
那是一个很好的解决方案,我什至更喜欢使用oo和OO而不是
–沃克·波(Walker Boh)
19/12/31在9:33
@WalkerBoh我尝试使用oo和OO,但是之后使用o和O会有延迟。具体来说,您必须等待1秒才能使o和O生效,因为vim正在侦听另一个潜在的击键。您是如何解决的?
–VishnuVS
20-10-25在8:57
您可能想减少超时时间,例如设置timeoutlen = 250 ttimeoutlen = 0
–沃克·波(Walker Boh)
20-10-26在13:42
#3 楼
如果不想添加映射,则可以将yy
抽空,然后将p
粘贴到光标下方,并将P
粘贴到光标上方。评论
这可能是没有映射的最佳答案。
–威廉·范·凯奇(Willem van Ketwich)
18年1月3日,9:31
或使用“ oyy将其保存到o寄存器中,并在需要时使用” op将其粘贴到o寄存器中。
–mike23
19/12/3在20:36
#4 楼
我个人建议使用Tim Pope的Unimpaired插件。它提供了许多映射,但您要查找的是[<space>
和]<space>
,它们分别在当前行的上方和下方创建空白行。 Unimpaired还为快速修复列表,缓冲区列表,选项切换以及许多其他操作提供了不错的映射。有关更多信息,请参见:h unimpaired
。如果您不想使用不受损害的插件,但是像下面的映射一样,可以将一些快速映射放入
~/.vimrc
文件中:nnoremap <silent> [<space> :<c-u>put!=repeat([''],v:count)<bar>']+1<cr>
nnoremap <silent> ]<space> :<c-u>put =repeat([''],v:count)<bar>'[-1<cr>
#5 楼
我的映射使用Shift-Enter
。它与其他方法的不同之处在于,使用标记o将光标返回到同一行和同一列。" Insert new line above without going into insert mode
" (uses mark o to return to the previous cursor column)
nnoremap <S-Enter> moO<Esc>`o
评论
请注意,映射
–马丁·图尔诺伊(Martin Tournoij)
15年7月8日在7:42
#6 楼
马克西姆·金(Maxim Kim)的回答改变了生活:noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR>
我的即兴之处:将这些行放在
vimrc
中。然后转到文件第二行的开头并按空格键,按Enter,或转到第一行末尾并按Shift + Space键,按Enter键。要么在第一行和第二行之间添加一个空行,然后让您处于正常模式。您还可以将它们用于任何其他单个键-按空格键或Shift + Space键,然后再按一个键想要,它将分别插入或附加。
#7 楼
我在Visual Studio Code中使用Vim扩展名,并且可以在按住Ctrl + Enter的常规模式下插入新行。评论
欢迎来到Vi和Vim!我已对您的信息进行了一些格式化。请注意,您所描述的内容听起来很像特定于VSCode的键序列,因为默认情况下在vim中该键不起作用。
– D. Ben Knoble♦
20年8月4日在23:24
我一直在尝试查找,由于插件,VSCode中的这种行为是吗?你有什么主意吗?
–Hamza Zubair
20年8月11日在14:24
@HamzaZubair我使用了这个插件
–zrodr22
20年8月12日15:30
抱歉,不是我要问的,我也在使用相同的扩展名,我要问的是,vscodevim-extension内部允许的行为是什么,是否是设置,是否是vscode-内部的vim插件?插入?
–Hamza Zubair
20年8月18日在6:52
#8 楼
这些映射将完全满足您的需求。另一种解决方案是只创建一个快捷方式,用换行符填充
未命名寄存器。然后,您可以只使用put
命令p或P插入换行符。
例如:
nnoremap <c-n> @="m`o\eg``"<cr>
nnoremap <c-p> @="m`O\eg``"<cr>
#9 楼
我对此的映射 " Create Blank Newlines and stay in Normal mode
nnoremap <silent> zj o<Esc>k
nnoremap <silent> zk O<Esc>j
与statox的映射不同,因为这使光标保持在同一位置。
评论
– Alex
15年7月8日在2:39
它可以防止在状态行中回显任何内容。我很确定它在这种特定情况下不会做任何事情,就在我很早以前从那里复制它的地方。参见:h map-silent。
–凯文
15年7月8日在2:42
#10 楼
我的个人解决方案将换行符粘贴到表达式寄存器中,并将其粘贴到当前行之后,然后跳回到原始位置:nnoremap K m`"="\n"<CR>p``
#11 楼
我认为最简单的当然是o
,然后是Esc
,然后根据需要添加任意行,您可以继续按.
或像5.
一样(例如,是否要5个空白新行)
评论
看看:vim.wikia.com/wiki/Insert_newline_without_entering_insert_mode