插入换行符而不进入插入模式,vim

问题描述 投票:0回答:8

我想在 vim 中使用 Shift-EnterCtrl-Enter 在正常模式下插入换行符。我尝试了 Vim Wikia 的一些解决方案和混合解决方案 - Insert newline without entering insert mode 但是 Shift-EnterCtrl-Enter 没有响应:

" put a new line before or after to this line
nnoremap <S-CR> m`o<Esc>``
nnoremap <C-CR> m`O<Esc>``

" reverse J command
nnoremap <C-J> vaW<Esc>Bi<CR><Esc>k:s/\s\+$//<CR>$
vim newline key-bindings keymapping
8个回答
88
投票

我的替代方案是使用

oo
(resp.
OO
)通过此映射在当前下方(resp.over)插入一个新行:
nmap oo o<Esc>k
(分别
nmap OO O<Esc>j


24
投票

拉出一个空行并按住 shift 键粘贴它:

从空行开始:

yy + (shift + p)

“yy”拉出该行,然后“shift + p”将其插入下方,而不进入插入模式。


10
投票

由于键盘输入的内部处理方式,不幸的是,今天这通常是不可能的。 (不过,这种特殊情况应该在 GVIM 中有效。)一些组合键,如 Ctrl + non-alphabetic 无法映射,以及 Ctrl + letterCtrl + Shift + letter 无法区分。 (除非您的终端为它发送一个独特的 termcap 代码,大多数情况下不会。)在插入或命令行模式下,尝试键入组合键。如果没有任何反应/插入,则不能使用该组合键。这也适用于

<Tab>
/
<C-I>
,
<CR>
/
<C-M>
/
<Esc>
/
<C-[>
等(唯一例外是
<BS>
/
<C-H>
。)关于 vim_dev 和 #vim IRC 频道的各种讨论的主题。

一些人(最重要的 Paul LeoNerd Evans)想要解决这个问题(即使是在支持这个的终端中的控制台 Vim),并且已经提出了各种建议

但是直到今天,还没有补丁或志愿者提出来,尽管许多人表示希望在未来的 Vim 8 主要版本中拥有它。


2
投票

我用:s/ / /g(用两个换行符代替换行符,与“o”相同)。


2
投票

这是我用的:

nmap <CR> :a<CR><CR>.<CR>

我试过

nmap <CR> o<Esc>
,但它在切换到插入模式并返回时使 UI 出现故障。


2
投票

如果你只是不想按 ESC

yypd$

0
投票

您可以将空行复制到寄存器并使用它。我养成了将新行复制到

n
寄存器的习惯。 您可以将新行复制到寄存器,在这种情况下
n
使用:
"ny
您可以在不离开正常模式的情况下将新行粘贴到任何地方,例如:
"np


-3
投票

你可以使用 hack 来做到这一点。

在编辑模式下,您可以使用

p
粘贴当前剪贴板。由于
o
加了一个换行符,所以可以用
o<ESC>ddp
在光标下加一个新行;从那里,
p
将添加一个新行,直到您删除其他内容。

© www.soinside.com 2019 - 2024. All rights reserved.