2023-10-09 09:00:01

在插入模式下粘贴?

是否可以在Vim中以插入模式粘贴?


当前回答

你可以通过以下方式进入——INSERT (past)——模式:

键盘组合:yp

or

:设置粘贴并进入插入模式(:set nopaste为disable)

一旦进入——INSERT (past)——模式,只需使用您的系统粘贴功能(例如,Linux上的CtrlShiftv, Mac OS上的Cmdv)。

当通过ssh使用vim时,这个策略非常有用。

其他回答

是的。在Windows中,Ctrl+V和Linux中几乎同时按下两个鼠标按钮。

在Windows中,我认为我的_vimrc中的这一行可能做到了:

source $VIMRUNTIME/mswin.vim

在Linux中,我不记得我是怎么做到的。看起来我可能从默认的.vimrc文件中删除了一些行。

如果不希望Vim破坏传入粘贴文本的格式,可能还需要考虑使用::set paste。这将防止Vim重新标记您的代码。当粘贴完成时,:set nopaste将恢复正常行为。

你也可以用一个键来切换模式,比如在你的.vimrc中添加set pastetoggle=<F2>。关于切换自动缩进的更多细节在这里。

你可以用ctrl - lv从剪贴板粘贴:

set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>

这是用Ctrlc将视觉选择拉到剪贴板:

vnoremap <C-c> "+y

如果你也想在正常模式下默认使用剪贴板进行经典的vim拉拽/粘贴(y/p),这里有一个配置选项:

set clipboard=unnamedplus

有了这个配置,你可以先在正常模式下猛拉,然后在插入模式下用ctrl + lv粘贴。此外,还可以粘贴来自不同vim实例和不同应用程序的文本。

另一种选择是:

set clipboard=unnamed

然后,您就可以在X环境中通过鼠标拖动选择一些东西,然后将其粘贴到vim中。但是(出于某种原因),你不能在Vim中拉出某个东西(y),然后在其他地方插入它,这可能是非常有限的。

关于这个的Vim文档:http://vim.wikia.com/wiki/Accessing_the_system_clipboard

对于从自定义寄存器粘贴,您可以遵循其他答案:)。这个答案主要是关于如何将Vim与您的系统剪贴板集成。


注意,要使set clipboard=unnamedplus和set clipboard= named生效,你需要使用gvim或vimx (vim-X11):它们是用+xterm_clipboard编译的。你可以选择把它放在你的。bashrc中,用vimx来别名vim:

if [ -e /usr/bin/vimx ]; then
    alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi

你可以在vim——version提供的信息中找到你的vim是否有+xterm_clipboard。

还可以使用鼠标中间按钮在插入模式下粘贴(仅适用于Linux)。

在插入模式下按CTRL-R {register}

例子:

CTRL-R *将插入剪贴板的内容 CTRL-R”(未命名寄存器)插入最后的删除或拉取。

要在vim的帮助中找到它,键入:h i_ctrl-r