不同于其他编辑器,vim会将复制的文本存储在自己的剪贴板中。因此,我很难从网页上复制一些文本并将其粘贴到当前工作的文件中。所以我要么得打开gedit,要么手动输入。
我能否让vim从系统剪贴板复制和粘贴呢?
尝试使用"*yy
或"+yy
将一行复制到系统剪贴板。
请注意,如果:echo has('clipboard')
返回0,则无法从系统剪贴板复制/粘贴。在这种情况下,vim未编译为具有+clipboard
功能的版本,您需要安装其他版本或重新编译。一些Linux发行版默认提供最小化的vim安装,但如果您安装vim-gtk
或vim-gtk3
软件包,您仍然可以获得额外的功能。
“*”和“+”寄存器用于系统的剪贴板(:help registers)。根据您的系统,它们可能会执行不同的操作。例如,在不使用像OSX或Windows这样的X11系统上,“*”寄存器用于读取和写入系统剪贴板。在X11系统上,这两个寄存器都可以使用。有关更多详细信息,请参阅:help x11-selection,但基本上,“*”类似于X11的_PRIMARY_选择(通常复制您用鼠标选择的内容,并使用中间鼠标按钮粘贴),而“+”类似于X11的_CLIPBOARD_选择(即剪贴板本身)。
如果您对此一无所知,请尝试使用“*yy”或“+yy”将一行复制到您的系统剪贴板。假设您具有适当的编译选项,其中一个应该起作用。
"~/.vimrc
文件中添加vnoremap <C-c> "*y
,这样你就可以通过可视选择并按下Ctrl+c将内容复制到系统剪贴板。'clipboard'
选项,在:help cb
中有详细描述。在这种情况下,你可以使用:set clipboard=unnamed
或:set clipboard=unnamedplus
命令,使所有复制/删除操作自动复制到系统剪贴板。但这可能会在某些情况下带来不便,因为它会覆盖剪贴板中的其他内容。"+p
或"*p
(取决于你的系统和/或所需的选择),或者你可以将它们映射到其他内容。我会明确地输入它们,但我经常发现自己处于插入模式。如果你处于插入模式,你仍然可以使用<C-r><C-p>*
或<C-r><C-p>+
进行正确缩进的粘贴。请参阅:help i_CTRL-R_CTRL-P
。paste
选项(:help paste
)。这将vim置于特殊的“粘贴模式”中,禁用了其他几个选项,使你可以使用终端仿真器或多路复用器中熟悉的粘贴快捷键轻松粘贴到vim中(只需输入:set paste
启用它,粘贴你的内容,然后输入:set nopaste
禁用它)。或者,你可以使用pastetoggle
选项设置一个切换模式的按键码(:help pastetoggle
)。:help clipboard
。vim-gtk
软件包(至少在Debian下),才能获得已编译具有+xterm_clipboard
选项的vim。我花了40分钟才找到这个,但只需几秒钟的时间就可以执行“sudo apt-get install vim-gtk”命令安装它。 - Dominykas Mostauskisvim-gnome
也可以使用,并且启用了 +xterm_clipboard
。 - Chev :set paste
为了避免搞乱缩进。:set paste
命令。https://dev59.com/iGgu5IYBdhLWcg3wOUgk#57085290 - wisbucky您已经粘贴了文本,可以开始输入。
:set nopaste
没有起作用。它是干什么用的?我需要它吗? - Marko Avlijaš:set nopaste
时,您告诉编辑器您不再想要粘贴文本。而当您按下i
键时,您将返回到编辑模式 :)。 - ivanleoncz对于我而言,那个配置可以实现复制和粘贴
" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa
这是你在vimrc中需要的代码行:
set clipboard+=unnamed " use the clipboards of vim and win
set paste " Paste from a windows or from vim
set go+=a " Visual selection automatically copied to the clipboard
在我的Linux系统上,+
和 *
寄存器映射到 X11 选择器,可以使用中间鼠标按钮粘贴。当使用 :set clipboard=unnamed
和 :set clipboard=unnamedplus
命令时,这些寄存器映射到剪贴板,可以使用CTRL-V粘贴。
具体细节似乎与配置和系统有关,因此您的体验可能会有所不同。但这肯定会让你朝正确的方向前进。
*
作为主要的,使用 +
作为 X11 剪贴板寄存器的事实,你可以在 vim 源代码中看到:这些 值在那里设置并且从未被修改,而 clip_star
和 clip_plus
分别始终用于 *
和 +
寄存器。 - ZyXShift + 右键单击 -> 粘贴
对我很有效。
Shift
键就能让这对我起作用。我只需在终端中右键单击,然后选择“粘贴”,它会将文本放置在光标所在位置。 - neuquen剪贴板
有一个特殊的寄存器用于存储这个选择,它是“*”寄存器。除非所选文本的信息即将更改(例如通过单击鼠标左键),或者其他应用程序想要粘贴所选的文本,否则不会放入其中任何内容。然后将文本放入“*”寄存器中。例如,要剪切一行并使其成为当前选定项/将其放在剪贴板上:
"*dd
"*p
寄存器 E354
> There are nine types of registers:
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~
> 8. The black hole register "_
> 9. Last search pattern register "/
从剪贴板粘贴
1. Clipboard: Copy
2. Vim insertmode, middle mouse key
检查终端中的X11剪贴板支持
如果您想在终端中运行Vim,您需要寻找一个已编译带有剪贴板支持的版本的Vim。
检查X11剪贴板支持,在控制台中键入:
% vim --version
复制到操作系统剪贴板
在可视模式下选择文本,按下"*y
从操作系统剪贴板粘贴
按下"*p
由于没有剪贴板,因此我想出了这个使用xsel的替代方案:
将以下内容添加到您的~/.vimrc中:
vnoremap <C-C> :w !xsel -b<CR><CR>
vnoremap <C-C> :w !xclip -i -sel c<CR><CR>
- andy
sudo apt-get install vim-gnome
,这将为内置的vim添加使用系统剪贴板的功能。 - Harnirvair Singhvim-gnome
可能过于复杂或在他们的操作系统/发行版中不可用,而我怀疑vim-gtk
和最好是vim-gtk3
更有可能存在并拉取更少的依赖项,同时仍提供剪贴板集成(至少对于那些仍在使用 X11 的人;我不确定这一切与 Wayland 如何交互)。 - underscore_d