【问题标题】:Insert a newline without entering in insert mode, vim插入换行符而不进入插入模式,vim
【发布时间】:2013-04-14 14:35:39
【问题描述】:

我想在 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>$

【问题讨论】:

  • 你的$TERM 是什么(如果是*nix)?
  • echo $TERM -> xterm 为什么?
  • 可能与如何解释键有关。你也使用 screen 或 tmux 吗?话虽如此,我尝试了几个替代方案,但它只适用于map &lt;CR&gt; o&lt;Esc&gt; 这里。
  • 好吧,我不会在 vim 中使用 screen 或 tmux。是的,map &lt;CR&gt; o&lt;Esc&gt; 工作。但是,如何映射O&lt;Esc&gt;? .对不起,我的英语不好

标签: vim newline key-bindings keymapping


【解决方案1】:

如果你不想按 ESC 怎么办

yypd$

【讨论】:

  • 因为我有D要删除到行尾,所以我的应该是yypD
【解决方案2】:

由于键盘输入在内部处理的方式,遗憾的是,这在今天通常是不可能的。 (不过,这种特殊情况应该在 GVIM 中有效。)某些组合键,如 Ctrl + non-alphabetic 无法映射,而 Ctrl + letterCtrl + Shift + letter 无法区分。 (除非您的终端为它发送一个独特的 termcap 代码,但大多数情况下不会。)在插入或命令行模式下,尝试键入组合键。如果没有任何反应/插入,则不能使用该组合键。这也适用于&lt;Tab&gt;/&lt;C-I&gt;&lt;CR&gt;/&lt;C-M&gt;/&lt;Esc&gt;/&lt;C-[&gt; 等(唯一的例外是&lt;BS&gt;/&lt;C-H&gt;。)这是一个已知的痛点,并且vim_dev 和#vim IRC 频道上各种讨论的主题。

有些人(最重要的是 Paul LeoNerd Evans)想要解决这个问题(即使是支持此功能的终端中的控制台 Vim 也是如此),并提出了 various proposals

但截至今天,还没有补丁或志愿者出现,尽管许多人表示希望在未来的 Vim 8 主要版本中提供此功能。

【讨论】:

  • 多半是历史原因,可惜很难改。
【解决方案3】:

拉出一个空行并移位粘贴:

从空行上的光标开始:

yy + (shift + p)

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      这是我用的:

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

      我尝试了nmap &lt;CR&gt; o&lt;Esc&gt;,但它在切换到插入模式并返回时导致 UI 出现故障。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 为此需要一个链式 cabbrev
        【解决方案7】:

        我的替代方法是使用oo(或OO)通过此映射在电流下(分别在)插入新行: nmap oo o&lt;Esc&gt;k (分别nmap OO O&lt;Esc&gt;j

        【讨论】:

        • 很好的答案。只是 'o' 工作并进入插入模式。谢谢
        • 其他答案最困扰我的是捷径。这个符合我的喜好。
        • 我做了 nmap ok 因为 Shift+J 删除换行符。
        • 另一个增强功能是使用nmap oo m`o&lt;Esc&gt;`` nmap OO m`O&lt;Esc&gt;`` 在将换行符打开到不同的缩进级别时保留光标位置,如these comments 中所述。
        • 您可能还希望使用比默认 1 秒更短的超时值,以便更快地进入插入模式,使用纯 oO。我喜欢set timeoutlen=200。您只需要足够快地按下双键oo,这会缩小窗口以执行其他非阻塞超时命令序列。
        猜你喜欢
        • 2023-04-08
        • 2013-06-24
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        • 2019-03-02
        • 1970-01-01
        • 2018-06-17
        • 1970-01-01
        相关资源
        最近更新 更多