【问题标题】:How can I paste NeoVim registers in terminal mode?如何在终端模式下粘贴 NeoVim 寄存器?
【发布时间】:2017-05-31 14:34:37
【问题描述】:

当使用 NeoVim 的 :terminal 功能时,我希望能够从寄存器中粘贴文本。

在使用标准文本缓冲区时,我经常使用两种方法从寄存器中粘贴文本:

  • 在正常模式下:"{register}p
  • 在插入模式下:<C-r>{register}

我无法让这些命令按照我希望的方式在终端缓冲区中工作。当终端缓冲区处于正常模式时,我可以使用"{register}p 在当前命令行末尾附加一个寄存器的内容。有时我想在当前命令行的开头或中间插入文本,但使用此命令似乎无法做到这一点。

在我看来,这应该可以通过切换到终端模式(这似乎是相当于插入模式的终端缓冲区)并使用<C-r>{register} 命令来实现。但是 ctrl+r 直接发送到我的外壳。我正在使用 bash shell,它将这些键映射到 reverse search 功能,所以我发现自己在看这个提示:

(reverse-i-search)`':

有什么方法可以在终端模式下使用<C-r>{register}

【问题讨论】:

  • 如果你在这里没有得到答案,也可以试试Vi and Vim SE :)

标签: copy-paste neovim


【解决方案1】:

Nvim 对于在终端模式下处理 any 键(<C-\><C-N> 除外)是保守的,因此默认情况下不处理 CTRL-R。此外,Nvim 不知道在 :terminal 中运行的是哪个应用程序,所以 p 只是盲目地将文本发送到输入流。

话虽如此,您可以使用:tnoremap 来获得与CTRL-R 类似的效果:

:tnoremap <expr> <C-R> '<C-\><C-N>"'.nr2char(getchar()).'pi'

【讨论】:

  • 在了解:tnoremap 命令的工作原理时,我现在意识到确实可以使"{reg}p 在当前命令行的任意点插入文本。感谢您的帮助!
  • 我发现 Bash 中的交互式搜索功能很有用,我希望能够继续使用 ctrl-r。我已经使用&lt;C-\&gt;&lt;C-r&gt; 作为触发器调整了您建议的映射。我将养成使用&lt;C-\&gt; 作为终端模式映射的“领导者”的习惯(因为&lt;C-\&gt;&lt;C-n&gt; 为此开了一个先例)。
  • 另外,我已经为TermCursorTermCursorNC 设置了颜色,这样可以清楚地知道粘贴的文本将出现在命令行中的什么位置。
  • 关于TermCursorNC 的好主意。作为主键,您可能会考虑使用 META/ALT 和弦,有许多未使用的可用,它们在 Nvim(和 :te)中运行良好。
  • 一个很好的附带变化是有一个用于反向搜索的替代命令:askubuntu.com/questions/581916/…
【解决方案2】:

实际上不需要在配置中插入控制字符。 您可以让 Nvim 为您解除转义。

"Enable CTRL-V in terminal mode
tnoremap <expr> <C-R> '<C-\><C-N>"'.nr2char(getchar()).'pi'

【讨论】:

    【解决方案3】:

    在文档中

    neovim 文档 (:help terminal-input) 建议这样做:

    To simulate i_CTRL-R in terminal-mode:
        :tnoremap <expr> <C-R> '<C-\><C-N>"'.nr2char(getchar()).'pi'
    

    普通键盘

    不幸的是,这与终端历史搜索 C-r 冲突。您可以修改它以使用普通键盘上的 Alt 键:

    To simulate i_CTRL-R in terminal-mode:
        :tnoremap <expr> <A-R> '<C-\><C-N>"'.nr2char(getchar()).'pi'
    

    适用于 Macbook

    但这在 MacbookPro 上不起作用,因为 Alt 不是一个东西,而且 NeoVim 不为 Command⌘ 做绑定。这适用于 MacbookPro,到目前为止我觉得它很舒服:

    To simulate i_CTRL-R in terminal-mode:
        :tnoremap <expr> <C-\><C-\> '<C-\><C-N>"'.nr2char(getchar()).'pi'
    

    免责声明:我在终端中使用set -o vi。所以就是这样。你的旅费可能会改变。哦,我没有使用 iTerm2。我正在使用 Alacritty 终端仿真器。因此,当我进行历史搜索时,我所做的只是Ctrl-[ 然后只是nnnnN 直到我找到我的东西。或者Ctrl-[/&lt;searchterm&gt;&lt;enter&gt;nnNn

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-22
      • 2011-10-30
      • 1970-01-01
      • 2022-01-14
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多