我想在 vim 中使用 Shift-Enter 和 Ctrl-Enter 在正常模式下插入换行符。我尝试了 Vim Wikia 的一些解决方案和混合解决方案 - Insert newline without entering insert mode 但是 Shift-Enter 和 Ctrl-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>$
我的替代方案是使用
oo
(resp. OO
)通过此映射在当前下方(resp.over)插入一个新行:
nmap oo o<Esc>k
(分别nmap OO O<Esc>j
)
拉出一个空行并按住 shift 键粘贴它:
从空行开始:
yy + (shift + p)
“yy”拉出该行,然后“shift + p”将其插入下方,而不进入插入模式。
由于键盘输入的内部处理方式,不幸的是,今天这通常是不可能的。 (不过,这种特殊情况应该在 GVIM 中有效。)一些组合键,如 Ctrl + non-alphabetic 无法映射,以及 Ctrl + letter 与 Ctrl + Shift + letter 无法区分。 (除非您的终端为它发送一个独特的 termcap 代码,大多数情况下不会。)在插入或命令行模式下,尝试键入组合键。如果没有任何反应/插入,则不能使用该组合键。这也适用于
<Tab>
/ <C-I>
, <CR>
/ <C-M>
/ <Esc>
/ <C-[>
等(唯一例外是<BS>
/ <C-H>
。)关于 vim_dev 和 #vim IRC 频道的各种讨论的主题。
一些人(最重要的 Paul LeoNerd Evans)想要解决这个问题(即使是在支持这个的终端中的控制台 Vim),并且已经提出了各种建议。
但是直到今天,还没有补丁或志愿者提出来,尽管许多人表示希望在未来的 Vim 8 主要版本中拥有它。
我用:s/ / /g(用两个换行符代替换行符,与“o”相同)。
这是我用的:
nmap <CR> :a<CR><CR>.<CR>
我试过
nmap <CR> o<Esc>
,但它在切换到插入模式并返回时使 UI 出现故障。
如果你只是不想按 ESC
yypd$
您可以将空行复制到寄存器并使用它。我养成了将新行复制到
n
寄存器的习惯。
您可以将新行复制到寄存器,在这种情况下n
使用:
"ny
您可以在不离开正常模式的情况下将新行粘贴到任何地方,例如:
"np
你可以使用 hack 来做到这一点。
在编辑模式下,您可以使用
p
粘贴当前剪贴板。由于o
加了一个换行符,所以可以用o<ESC>ddp
在光标下加一个新行;从那里,p
将添加一个新行,直到您删除其他内容。