如何在终端模式下粘贴 NeoVim 寄存器?
How can I paste NeoVim registers in terminal mode?
使用 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}
吗?
Nvim 在处理 terminal-mode 中的 any 键(<C-\><C-N>
除外)方面比较保守,因此默认情况下不处理 CTRL-R。此外,Nvim 不知道 :terminal
中的 运行 是哪个应用程序,因此 p
只是盲目地将文本发送到输入流。
话虽如此,您可以使用 :tnoremap
获得与 CTRL-R 类似的效果:
:tnoremap <expr> <C-R> '<C-\><C-N>"'.nr2char(getchar()).'pi'
配置中其实不需要插入控制字符。
你可以让 Nvim 为你取消转义。
"Enable CTRL-V in terminal mode
tnoremap <expr> <C-R> '<C-\><C-N>"'.nr2char(getchar()).'pi'
在文档中
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
等
使用 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}
吗?
Nvim 在处理 terminal-mode 中的 any 键(<C-\><C-N>
除外)方面比较保守,因此默认情况下不处理 CTRL-R。此外,Nvim 不知道 :terminal
中的 运行 是哪个应用程序,因此 p
只是盲目地将文本发送到输入流。
话虽如此,您可以使用 :tnoremap
获得与 CTRL-R 类似的效果:
:tnoremap <expr> <C-R> '<C-\><C-N>"'.nr2char(getchar()).'pi'
配置中其实不需要插入控制字符。 你可以让 Nvim 为你取消转义。
"Enable CTRL-V in terminal mode
tnoremap <expr> <C-R> '<C-\><C-N>"'.nr2char(getchar()).'pi'
在文档中
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
等