如何在终端模式下粘贴NeoVim寄存器?

时间:2017-01-16 17:21:19

标签: copy-paste neovim

使用NeoVim的:terminal功能时,我希望能够从注册表中粘贴文字。

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

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

我无法按照我喜欢的方式在终端缓冲区中使用这些命令。当终端缓冲区处于正常模式时,我可以使用"{register}p在当前命令行的末尾附加寄存器的内容。有时我想在当前命令行的开头插入文本,或者在其中途插入文本,似乎没有办法使用此命令。

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

(reverse-i-search)`':

有没有办法在终端模式下使用<C-r>{register}

3 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:4)

实际上不需要在配置中插入控制字符。 你可以让Nvim为你取消它们。

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

答案 2 :(得分:0)

在文档中

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-[/<searchterm><enter>nnNn等。