当使用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在终端模式下处理任何键(<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 Pro,因为Alt不是一件事,NeoVim不会对Command⌘进行绑定。这适用于Macbook Pro,到目前为止,我觉得它很舒服:
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
等。