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

时间:2013-04-21 18:04:38

标签: vim newline key-bindings keymapping

我希望使用 Shift-Enter Ctrl-Enter 在vim中以普通模式插入换行符。我尝试了一些解决方案并混合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>$

7 个答案:

答案 0 :(得分:50)

我的替代方法是使用oo(resp。OO)在此映射下的当前(resp.over)下插入一个新行: nmap oo o<Esc>k (分别为nmap OO O<Esc>j

答案 1 :(得分:8)

由于内部处理键盘输入的方式,遗憾的是今天通常不可能。 (但这种特殊情况应该适用于GVIM。)某些组合键,如 Ctrl + 非字母无法映射, Ctrl +无法区分字母 Ctrl + Shift + 字母。 (除非您的终端为其发送不同的 termcap 代码,但大多数代码都没有。)在插入或命令行模式下,尝试键入组合键。如果没有任何反应/插入,则无法使用该组合键。这也适用于<Tab> / <C-I><CR> / <C-M> / <Esc> / <C-[>等。(只有<BS>例外/ <C-H>。)这是一个众所周知的痛点,也是关于vim_dev和#vim IRC频道的各种讨论的主题。

有些人(最重要的是Paul LeoNerd Evans)希望解决这个问题(即使是支持Vim的终端中的控制台Vim),并且已经浮出various proposals

但截至今天,尚未有任何补丁或志愿者挺身而出,尽管许多人表示希望在未来的Vim 8主要版本中有这个。

答案 2 :(得分:5)

划出一条空行并转移粘贴它:

从空行开始:

yy + (shift + p)

“yy”拉线,“shift + p”将其插入下方,无需进入插入模式。

答案 3 :(得分:1)

我使用:s / \ n / \ r \ n \ r \ n(用两个换行符替换换行符,与“o”相同。)

答案 4 :(得分:1)

这就是我使用的:

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

我尝试了nmap <CR> o<Esc>,但是当它切换到插入模式并返回时,它使UI出现了问题。

答案 5 :(得分:0)

如果您不想按ESC怎么办

yypd$

答案 6 :(得分:-2)

您可以使用黑客来执行此操作。

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