Think Deep,Work Lean

2023-6-12-关于vim中的剪切板

Posted on By zack

关于 vim 中的剪切版

https://media1.giphy.com/media/l1J9LMNeWISnddECA/giphy.gif?cid=7941fdc69fax9p0zky2n9378yhazrnyp54mccwyjd319bxgf&ep=v1_gifs_search&rid=giphy.gif&ct=g

vim复制劝退

vim 是一把双刃剑,用得好能事办功倍,但是由于它上手成本较高,因此很多人还是觉得很难用,坚持下来的不多。

对于vim 中的剪切板就是如此。

不妨看下这样的场景(可以在 terminal 打开终端跟着一起做):

用 vim 打开一个文件,并写入以下内容。(或是直接输入 vimtutor)

每一节的命令操作将会更改本文。推荐您复制本文的一个副本,然后在副本上
     进行训练(如果您是通过"vimtutor"来启动教程的,那么本文就已经是副本了)

如果你要把网页上的内容复制到 vim 文本中,只需要在网页上 command + c 把内容复制到剪切板,vim 命令模式下按下 i ,然后 command + v 即可。

但是如果要把 vim 中的内容复制到其他地方呢?(如把 vim 中的某个单词复制到浏览器)

你的第一反应是不是:

 在 vim 中,光标选中文字,command+c,然后去浏览器粘贴就行?

如果这一步你成功了,那么如果要复制整个段落,复制的内容超过显示器能展示的区域,意味着,你必须鼠标左键按住不放选中的情况下,还要滑动窗口。(这一步太难了)

此时,你可以试试。效果肯定不好,此时肯定会劝退很多人了。心里大概率也在抱怨 vim 的反人性。(因为如果浏览器,我们选中的时候,只需要把鼠标置于显示器能看到的最后一行,浏览器会自动往下移动,而到了 vim 就不奏效了)

那有没有解决办法呢?

答案是肯定的。

需要用到 vim 剪切板的功能:

启用/禁用

  1. 手动开启(推荐, 按需开启/禁用)
    • 打开文件: vim filename
    • 切换到命令模式: ESC + :
    • 输入 set clipboard 可以查看当前状态 (set cli + TAB可以自动补齐的)
    • 输入 set clipboard=unnamed 开启剪贴板功能
    • 输入 set clipboard= 停用剪贴板功能
  2. 编辑文件时默认开启
    • 在 ~/.vimrc 文件里设置 set clipboard=unnamed
    • 临时禁用/开启方式同上; 每次默认是开启的 (有时也不一定方便的)

局部启用(推荐)

全局启用有个明显的缺点, 就是缓冲区和剪贴板通用了

比如: yw yy dw vip 之类的操作内容直接放到剪贴板里了;

比如在网页拷贝的字符串, 想在 vim 里覆盖一段内容, 当你删除内容后粘贴时, 是你刚刚删除的内容, 因为删除的内容已经把剪贴板覆盖了

  1. :set clipboard=  改为关闭模式
  2. 可视化模式选中目标文本
  3. "*y :存入寄存器 "* 中, 而 "* 和"+ 在Mac和Windows中,都是指系统剪切板(clipboard); 其他程序直接就可以: Ctrl+v 粘贴使用
  4. "*p - vim 粘贴 "* 寄存器的内容, 即从系统剪贴板里粘贴到 vim 里; 比如从网页上拷贝的内容可使用粘贴