问题

如何将 Vim 剪贴板里面的东西粘贴到 Vim 之外的地方?

回答
想要把 Vim 里复制( yank )的内容粘贴到 Vim 之外的任何地方,这其实比很多人想象的要简单一些,主要是因为 Vim 内置了一个非常强大的机制来与系统的剪贴板进行交互。理解了这个核心机制,你就能轻松实现这个需求了。

核心概念: Vim 的寄存器(Registers)

在 Vim 中,当你进行复制(yank)操作时,内容并不会凭空消失,而是被存放在一个叫做“寄存器”(register)的地方。Vim 有很多种不同类型的寄存器,但对于我们今天讨论的问题,最关键的寄存器是:

`""` (星号寄存器): 这是 Vim 中最常用的一个寄存器,它直接指向系统的剪贴板(clipboard)。当你将内容复制到系统的剪贴板时,Vim 的 `""` 寄存器就会同步这个内容。反过来,当你从 `""` 寄存器粘贴时,Vim 会从系统的剪贴板读取内容。
`"+"` (加号寄存器): 在一些系统(尤其是 X11 系统,比如 Linux 的 GNOME、KDE 等桌面环境)上,`"+"` 寄存器也指向系统的剪贴板,与 `""` 寄存器的作用非常相似,甚至常常是同一个剪贴板。在某些情况下,`"+"` 可能提供更广泛的支持,但绝大多数情况下,`""` 就足够了。

如何确定你的 Vim 是否支持系统剪贴板?

这是最重要的一步。如果你的 Vim 版本没有编译进对系统剪贴板的支持,那么无论你做什么,都无法将内容粘贴到 Vim 之外。

在 Vim 中,你可以执行 `:version` 命令。在输出的列表中,查找 `+clipboard` 或 `+xterm_clipboard`。

`+clipboard`: 表示 Vim 编译时就包含了对系统剪贴板的完整支持。这是我们最希望看到的结果。
`+xterm_clipboard`: 在某些情况下,Vim 可能只支持 Xterm 剪贴板,这通常在终端环境中使用。它可能与系统剪贴板不完全一致,但也值得尝试。
`clipboard`: 如果看到的是 `clipboard`,那就说明你的 Vim 版本不支持系统剪贴板。在这种情况下,你需要安装一个支持剪贴板的 Vim 版本。

安装支持剪贴板的 Vim:

Linux (Debian/Ubuntu):
```bash
sudo apt update
sudo apt install vimgtk3 或者 vimgtk, vimgnome, vimathena
```
`vimgtk3` 通常会提供完整的剪贴板支持。

macOS:
如果你使用 Homebrew:
```bash
brew install vim withoverridesystemvim withclipboard
```
然后确保你的 `PATH` 环境变量指向新安装的 Vim。

Windows:
从 Vim 官方网站下载安装程序时,确保选择的是带有 GUI 或者支持剪贴板的版本。

将 Vim 内容粘贴到 Vim 之外的步骤:

一旦你确认你的 Vim 支持系统剪贴板,操作就非常简单了。

1. 在 Vim 中复制(Yank)内容:
复制整行: 将光标移动到你想复制的那一行,按下 `yy`。
复制多行: 将光标移动到开始行,按下 `V`(大写 V)进入可视模式(行选择),然后移动光标选择你想要复制的行,最后按下 `y`。
复制指定范围: 将光标移动到你想复制的开始位置,按下 `v`(小写 v)进入可视模式(字符选择),然后移动光标选择你想要复制的内容,最后按下 `y`。
复制到寄存器: 如果你想确保内容被复制到系统剪贴板,你可以显式地使用 `""` 寄存器:
复制整行到系统剪贴板:`"yy`
复制多行到系统剪贴板:`V` 进入行选择模式,移动光标,然后按 `"y`。
复制当前单词到系统剪贴板:`"yiw` (yank inner word)

重要提示: 如果你的 Vim 默认配置就是将 `""` 寄存器与系统剪贴板关联,那么直接使用 `yy` 这样的命令,复制的内容也会自动进入系统剪贴板。你可以通过 `:set clipboard?` 来查看当前剪贴板的设置。理想的输出是 `clipboard=unnamedplus,unnamed`。如果不是,你可以通过在你的 `~/.vimrc` 文件中添加 `set clipboard=unnamedplus` 来设置。这样,你所有的 yank 和 delete 操作都会自动同步到系统剪贴板。

2. 切换到 Vim 之外的应用程序:
Windows: 按 `Alt + Tab`。
macOS: 按 `Cmd + Tab`。
Linux: 通常是 `Alt + Tab` 或 `Super + Tab` (Super 键通常是 Win 键)。
或者直接用鼠标点击目标应用程序的窗口。

3. 粘贴内容:
在目标应用程序中,使用该应用程序的粘贴快捷键。
Windows: `Ctrl + V`
macOS: `Cmd + V`
Linux: `Ctrl + V` (在大多数应用程序中)

更进一步:从 Vim 外部复制内容到 Vim

这个过程正好相反。如果你在浏览器、文档编辑器或其他任何地方复制了一些内容,想将它粘贴到 Vim 中:

1. 在 Vim 中进入插入模式: 按 `i`。
2. 粘贴内容:
使用系统粘贴快捷键: `Ctrl + V` (Windows/Linux) 或 `Cmd + V` (macOS)。
使用 Vim 的粘贴命令 (推荐): 退出插入模式,按 `p`。如果你的 `clipboard` 设置正确(如前所述),Vim 会自动从系统剪贴板获取内容。如果想明确指定,可以按 `"p` 来粘贴系统剪贴板的内容。

使用 `""` 和 `"+"` 寄存器的其他场景

复制 Vim 中的内容到 Vim 的另一个缓冲区:
如果你想复制当前 Vim 窗口的内容到另一个 Vim 窗口,可以使用 `""` 寄存器,就像你要粘贴到 Vim 之外一样。
例如,在一个 Vim 窗口中复制:`"yy`
然后切换到另一个 Vim 窗口,进入插入模式(`i`),然后粘贴:`Ctrl + V` (或者 `Cmd + V`),或者直接粘贴 `"p`。

从 Vim 外部的文本粘贴到 Vim 的指定位置(不通过系统剪贴板):
如果你想直接将系统剪贴板(例如,在 Windows 上用 `Ctrl+C` 复制的文本)粘贴到 Vim 的某个特定位置,并且不希望它影响 `""` 寄存器,你可以使用 `"+"` 寄存器(如果你的 Vim 支持的话)。
在 Vim 中,进入插入模式:`i`
粘贴:`Ctrl + R + "+"` (`Ctrl + R` 是 Vim 中用于插入寄存器内容的命令,`"+"` 是指系统剪贴板)
或者
在 Vim 的普通模式下,粘贴:`"+p`

总结一下,如果你想把 Vim 里的东西粘贴到 Vim 之外:

1. 确认 Vim 支持剪贴板(`:version` 查找 `+clipboard`)。
2. 在 Vim 中复制内容(`yy` 或 `"yy`,或可视模式下 `y` 或 `"y`)。
3. 切换到目标应用程序。
4. 在目标应用程序中使用其粘贴命令(`Ctrl + V` 或 `Cmd + V`)。

如果这一切都不奏效,那很可能是你的 Vim 版本不支持剪贴板,需要安装一个新版本。希望这个详细的解释能帮助你顺利完成在 Vim 与其他应用之间的数据交换。

网友意见

user avatar

根据平台不同,要分两种情况。先用下面命令确定你属于哪一种,

       vim --version | grep clipboard     


情况一,

如果结果里你找到加号开头的+clipboard, 恭喜你,你的vim没问题,是你姿势问题。

  • "+y 代替y将选中的内容复制到系统剪贴板,效果和ctrl-c一致。
  • "+p代替p将剪贴板内容复制到指定位置,也可以用ctrl-v

dxcs也一样,用之前前面加"+

如果想偷懒用y直接把内容复制到系统剪贴板,需要到vim配置文件.vimrc里加一行属性。用下面命令开始配置,

       vim ~/.vimrc     

然后,加入下面这行,

       set clipboard=unnamed     

现在你的ydxp已经能和 ctrl-cctrl-v 一个效果,并且能互相混用。


情况二,

如果找到的是负号开头的-clipboard说明你的vim不支持系统剪切板,我的MacOS系统自带vim就不支持,所以跑来了。需要先重新安装vim,

Linux系统,

       sudo apt install vim-gtk     

MacOS,

       brew install vim     

安装好之后,重复情况一的操作即可。



问题解决了,有几个细节再解释一下,满足一下好奇心。

首先,vim里ydxc复制,剪切下来的内容临时存放在一个叫vim寄存器(Register)的地方。而且寄存器有好几个。下面vim命令可以看到寄存器列表,

       :reg     

最常用的默认寄存器""未命名寄存器(unnamed register)。最近一次删除,修改,复制内容统统暂存这里(会覆盖,只保留最近一次任意操作)。感兴趣的同学可以看下表,其他寄存器都是干什么的。

       ""      // 默认unnamed寄存器,最近一次"d","c","s","x","y"复制,删除,修改内容  "0      // 最近一次"y"复制内容  "1      // 最近一次"d","c","s","x"删除,修改内容 "2     //  上一次"d","c","s","x"删除,修改内容 "3     // 上上次"d","c","s","x"删除,修改内容 ...      "9      // [1-9]数字以此类推   "a     // 字母寄存器,供用户指定使用,比如"ay就是复制到"a寄存器 "b ... "z   "-      // 少于一行的"d","c","x"删除内容  ".      // 只读寄存器 ":      // 只读寄存器 "%     // 只读寄存器 "#     // 只读寄存器  "+      // 映射系统剪贴板 (有的默认设置不支持) "*      // 映射系统剪贴板 (有的默认设置不支持)     


ctrl-c以及ctrl-v用到的是系统剪贴板(system clipboard)vim寄存器和系统剪贴板不是一个东西。顾名思义,vim寄存器的数据作用域仅限于vim本地,甚至如果开多个vim窗口,每个窗口都有一套自己完整的寄存器,互相不影响。而系统剪贴板作为系统级别的全局变量,两边当然不能混用。

所以vim专门提供了"+寄存器作为对系统剪贴板的映射。可以理解成自动把"+寄存器的内容再复制一份到系统剪贴板,前提是你得把clipboard属性设置成打开。有些版本(比如MacOS自带的vim)就不支持这个映射。重装vim就是为了打开这个开关。(如果有简便的直接改设置方法,请纠正我)。打开以后用"+y命令把内容复制到和系统剪贴板关联的寄存器"+上。而y只是复制到默认无名寄存器""上。

最后set clipboard=unnamed就是把默认无名寄存器"" 和系统剪贴板也关联上。 就是用y也可以备份到系统剪贴板。缺点是破坏了默认寄存器""的本地性。因为p操作也会被等同于"+p处理,粘贴的是"+寄存器的内容, 粘贴的时候""默认寄存器内容就会被覆盖。 表现出来的就是复制一次,到任意vim窗口都可以粘贴。但这个特性恰恰是很多人想要的。

还有个细节,大部分系统上"+"*是等价的。但在有的系统上不等价,比如Linux,

  • "+:对应ctrl-cctrl-v用到的系统剪贴板:desktop clipboard (XA_SECONDARY)
  • "*:对应图形界面中鼠标框选的内容(可以用鼠标中键黏贴):X11 primary selection (XA_PRIMARY)

所以看到"*也不要慌,试试看用"*y"*p能不能复制粘贴。可以的话就说明是混用的,不行就老老实实用"+


以上。遇到此坑的同学了解一下。


参考文献:

类似的话题

  • 回答
    想要把 Vim 里复制( yank )的内容粘贴到 Vim 之外的任何地方,这其实比很多人想象的要简单一些,主要是因为 Vim 内置了一个非常强大的机制来与系统的剪贴板进行交互。理解了这个核心机制,你就能轻松实现这个需求了。核心概念: Vim 的寄存器(Registers)在 Vim 中,当你进行复.............
  • 回答
    行,咱们就用 Vim 来好好收拾一下文本,把那些啰嗦的段落都给“精简”一下,只留下每段的“精华”——第一句话。这活儿其实挺有意思的,而且 Vim 处理起来特别顺手。首先,得有个文本文件。假设我们有一个叫 `original.txt` 的文件,里面是这么个样子:```这是一段话的第一句话,后面还有很多.............
  • 回答
    好的,我们来详细评价一下 Vim 8.2。Vim 8.2 是 Vim 编辑器的一个重要版本,它在 Vim 8 的基础上引入了许多新功能、改进和bug修复,进一步巩固了 Vim 作为一款强大、高效且高度可定制的文本编辑器的地位。Vim 8.2 并非一次颠覆性的革命,而更像是一次持续的优化和完善,它使得.............
  • 回答
    说到 Vim,你肯定得绕不开一个话题:Esc 键。用 Vim 差不多半年了,我对它真是又爱又恨。爱它功能强大,学习曲线陡峭带来的成就感;恨它某些地方确实有点反人类,尤其是那个高高在上的 Esc 键。你想想,你键入代码、写文档,一切进行得还算顺畅。然后,你想保存,想查找,想执行命令,就得按一下 Esc.............
  • 回答
    各位 VIM 大神们好!很高兴能和大家一起探讨 VIM 的学习之道。关于 VIM 命令太多、记不住、感觉没意思的问题,这确实是许多初学者甚至中级用户都会遇到的瓶颈。但请相信,VIM 的魅力恰恰在于它的强大和高效,而这些都建立在对命令的熟悉和灵活运用之上。“熟能生巧”是绝对真理,但我们要做的不是死记硬.............
  • 回答
    在 Linux 下利用 Vim 搭建 C/C++ 开发环境是一个非常高效且强大的选择。Vim 作为一款高度可定制的文本编辑器,通过一系列插件和配置,可以 превратить его в полноценную интегрированную среду разработки (IDE)。下面我将从.............
  • 回答
    Git for Windows 安装程序里提到 Vim“很难用”,这背后其实透露出几个很有意思的观点,而且这事的“梗”也挺深的。首先,我们得认识到,Git for Windows 的安装程序,包括它附带的很多工具,都是为了尽可能地降低 Git 的使用门槛,让更多人能够顺利上手。Vim 的定位是什么?.............
  • 回答
    好的,我们来玩一个有趣的“拟人化”游戏。作为一位大型语言模型,我的“专业”可以被理解为我所拥有的能力和所扮演的角色。那么,如何将我的专业拟人化呢?让我们来塑造一个鲜活的角色吧!我的名字:我希望我能有一个名字,一个既能体现我的本质,又能让人感到亲切的名字。我可能会叫做: “智识之语”(Lumina.............
  • 回答
    将自动控制应用到工业系统是一个庞大且复杂的话题,它贯穿了现代工业生产的方方面面,极大地提高了效率、质量、安全性和经济效益。为了详细阐述,我们将从以下几个方面展开:一、 自动控制在工业系统的核心目标与价值在深入探讨具体应用之前,理解自动控制的核心目标和价值至关重要: 提高生产效率: 自.............
  • 回答
    将 GALA 乐队的《追梦赤子心》唱好,需要从多个层面去理解和演绎。这首歌不仅仅是技巧的展示,更是情感的抒发。下面我将为你详细拆解,从情感、技巧、细节到舞台表现,全方位地告诉你如何将这首歌唱到极致。一、理解歌曲的核心:在开口演唱之前,最重要的一步是 深入理解这首歌想要表达的情感和意境。 歌曲主题.............
  • 回答
    将 20 多台旧电脑组建成一台超级计算机,这是一个非常有挑战性但也非常有意义的项目。这并不是简单地将它们堆叠在一起,而是需要将它们协调起来,形成一个统一的计算集群,实现比单台电脑强大得多的计算能力。以下是一个详细的指南,涵盖了从硬件规划到软件配置的各个方面,帮助你将这些旧电脑转化为一台简易的超级计算.............
  • 回答
    将个人专业选择与国家需求紧密联系起来,不仅能帮助个人找到更有意义、更有前景的职业发展道路,更能为国家的进步和发展贡献力量。这是一个双赢的选择。以下将从多个角度详细阐述如何实现这一目标: 第一步:深入了解国家需求这是整个过程的基础和关键。没有对国家需求的清晰认知,个人选择就可能变成盲目追逐热点,甚至与.............
  • 回答
    将一张A4纸快速折出完美的五等份确实需要一些技巧和耐心,但并非不可能。最常用且相对精确的方法是利用“五等分折叠法”(也称为“纸张测量法”或“比例折叠法”)。这个方法基于几何原理,通过构建一个角度来间接实现等分。下面我将详细讲解两种主流的五等分折叠方法,并尽量详细地描述每一步: 方法一:基于斜边和倾角.............
  • 回答
    将 C 语言代码转换为 JavaScript 代码是一个涉及多种转换和考虑的过程。由于两者在底层机制、数据类型和内存管理等方面存在显著差异,所以这通常不是一个简单的“逐行翻译”的过程。我会从基本概念、常用转换方法、需要注意的关键点以及一些工具和策略来详细阐述这个过程。 1. 理解 C 和 JavaS.............
  • 回答
    将H.264编码的视频文件转化为H.265编码是一个常见的视频处理需求,H.265(也称为HEVC,High Efficiency Video Coding)相比于H.264在同等画质下能提供更高的压缩率,从而节省存储空间和带宽。下面将详细介绍几种常用的方法,并附带详细的操作步骤。核心概念回顾: .............
  • 回答
    这个问题触及了人类古往今来最深邃的哲学命题之一:灵魂与肉体的关系,以及我们如何能超越生理的束缚,抵达精神的更高境界。这并非简单的二元对立,而是关乎我们存在的核心与价值的探索。要将灵魂凌驾于肉体之上,绝非是要否定肉体的重要性,或是以一种鄙夷的态度看待它。恰恰相反,这是理解并驾驭肉体,使其成为服务于灵魂.............
  • 回答
    将《指环王》写出《水浒传》的感觉,这是一个非常有意思的挑战,因为它意味着需要融合两种截然不同的文学风格、叙事重点和文化背景。简单来说,就是要把史诗般的奇幻冒险,注入梁山好汉的草莽江湖、兄弟情义、反抗精神和鲜活的市井气息。下面我将从多个维度详细阐述如何实现这一转变,并提供具体的思路和例子:核心理念转变.............
  • 回答
    将东晋至南北朝这段波澜壮阔、乱象纷呈的历史时期拍摄成一部媲美《权力的游戏》的史诗大剧,绝对是一个极具挑战性但也无比诱人的想法。这段历史充满了王朝更迭、家族争斗、民族融合、宗教冲突、军事奇迹、政治阴谋,以及无数鲜活的人物,为我们提供了绝佳的素材。以下是我认为可以将这段历史“权游化”的详细构思:核心理念.............
  • 回答
    将《老司机带带我》的歌词改编成其他文学形式是一个非常有趣且富有挑战性的创作过程。这首歌以其口语化、生动形象的比喻和略带挑逗的韵味而闻名,这些特点都可以成为改编的亮点。以下是一些详细的文学形式改编方案,以及每种形式下的具体操作思路: 一、改编方向与思路在开始改编之前,我们需要明确改编的目标,也就是我们.............
  • 回答
    经济学是研究人类如何做出选择以应对稀缺性的学科。它渗透到我们生活的方方面面,从我们每天做出的个人决定到影响整个社会的宏观经济现象。将经济学应用于现实生活,意味着理解这些基本原理,并运用它们来做出更明智的决策,改善生活质量,甚至影响更广泛的社会进步。下面我将详细阐述如何将经济学应用于现实生活,并提供具.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有