zoukankan      html  css  js  c++  java
  • vim与系统剪贴版的交互

    1 概述

    vim中的复制,删除,替换(d,r,s,x,y等)的内容都会被保存到默认的未命名的寄存器中,之后可以通过p进行粘贴,但是,这个寄存器不是系统的剪贴版,很多时候需要vim与系统剪贴版的交互,那么,具体怎么做呢?

    2 暴力解决

    系统剪贴版复制vim时,新建一个文件,直接ctrl+v复制过去然后vim打开。
    vim中的内容复制到系统剪贴版,使用cat+grep,在终端ctrl+c复制即可。
    这是最简单也是比较通用的方法,不会受到什么vim不支持剪贴版之类的影响。
    没错就是简单粗暴。

    3 优雅的方案

    当然上面的方法想必也不是您想要的,因此,这里介绍一种优雅一点的方法。

    3.1 查看剪贴板支持

    首先需要知道vim是否支持剪贴版:

    vim --version | grep clipboard
    

    在这里插入图片描述
    如果有

    +clipboard
    

    就表示支持,没有的话比如笔者这个就不支持,需要安装。
    笔者的Manjaro,可以使用yay安装,不过提示过期了:
    在这里插入图片描述
    也可以选择安装gvim,另外,Debian系的可以安装vim-gtk:

    sudo apt install vim-gtk
    

    Redhat系的需要安装vim-X11以及vim-enhanced,然后加个别名:

    alias vi='vimx'
    alias vim='vimx'
    

    MacOS:

    sudo brew install vim
    

    3.2 系统剪贴板复制到vim

    很简单,使用

    "+p
    

    "*p
    

    即可,vim提供了

    + *
    

    这两个寄存器与系统剪贴板进行交互,大多数系统上这两个系统一样,但在某些linux上可能不等价,以下是官方文档
    在这里插入图片描述

    +
    

    对应ctrl+c,ctrl+v使用的系统剪贴板,

    *
    

    对应的是鼠标选择的内容,可以使用中间粘贴。
    当然高版本的vim还有一种很简单的解决办法:Shift+Insert能直接粘贴。

    3.3 vim寄存器复制到系统剪贴板

    在vim中使用y进行复制,但是是复制到默认的未命名寄存器的,想要复制到系统剪贴版只需要把y改为

    "+y
    

    "*y
    

    即可。

    3.4 偷懒方法

    所谓的偷懒方法就是把默认的未命名寄存器与系统剪贴板关联上,使用

    set clipboard=unnamed
    

    即可。vim7.3.74以上的版本可以使用:

    set clipboard=unnamedplus
    

    这样y,d,s,x等操作就和系统剪贴版关联上了。

    4 寄存器相关知识

    vim中的y,d,c,x,s等的操作的内容会复制到寄存器中,可以使用

    :reg 
    

    查看寄存器的内容,使用

    :help registers
    

    查看帮助,另外,寄存器的常用操作包括:

    "{register}y 复制到寄存器,默认register为未命名寄存器
    "{register}p 粘贴寄存器的内容
    

    比如

    "a4yy
    "+p
    

    vim中提供了多种多样的寄存器,具体来说可以分为10种共48个寄存器。

    4.1 未命名寄存器

    ""
    

    也叫匿名寄存器,使用d,c,x等删除的字符会存放进匿名寄存器,换句话说,最近一次删除,修改,复制的内容都存放在这里,会覆盖。

    4.2 编号寄存器

    "0
    "1
    ...
    "9
    

    从0到9共10个,可以细分为复制专用寄存器与删除专用寄存器,因为

    "0
    

    保存着最近一次y复制的内容,而

    "1
    ...
    "9
    

    这9个寄存器保存着最近一次删除(d,c,s,x等)的内容。上一次删除的内容被存放在

    "1
    

    上上次的被存放在

    "2
    

    以此类推。

    注意,只有整行的删除,和通过段落级别的移动指令的删除才会放进

    "1
    

    另外当指定寄存器后,比如

    "ayy
    

    不会写入到

    "0
    

    中,但是

    "add
    

    会写入到

    "1
    

    中,也就是说,指定寄存器后复制内容不会写入0寄存器,但是删除内容会写入1寄存器。

    4.3 小删除寄存器

    "-
    

    不足一行的小删除会被放进去,包括s,d,c,x。与

    "0
    

    类似,用户指定寄存器后不会被写入。

    4.4 命名寄存器

    "a
    "b
    ...
    

    小写字母组成的26个寄存器,一般用来录制键盘宏,比如有如下内容:

    iostream
    string
    cmath
    

    可以把位置定位到第一行,然后

    qaI#include<{ESC}A>{ESC}jq
    

    其中

    {ESC}
    

    表示按下ESC键,这样第一行就加上include了,同时把宏记录到了寄存器a,接下来,使用

    2@a
    

    即可在剩余两行加上include。
    另外,小写对应的大写字母的寄存器用于追加内容,比如:

    "Ayy
    

    可以向

    "a
    

    追加内容。

    4.5 只读寄存器

    ". 上一次insert插入的内容
    "% 当前文件名,从vim的工作目录到该文件的路径
    ": 上次命令模式下键入的命令,使用@:执行上次命令, .只能进行一些简单的重复,一些复杂的命令比如替换,需要使用@:
    

    共三个,只读。

    4.6 交替文件寄存器

    "#
    

    保存着当前窗口的交替文件。
    交替文件是缓冲区(Buffer)上的一个文件,而缓冲区其实时vim中打开文件编辑时占用的那部分内存,编辑文件时,只是编辑缓冲区中的文件,当使用

    :w
    

    时,会把缓冲区的文件写入磁盘。

    4.7 表达式寄存器

    "=
    

    计算vim脚本的返回值,输入后会跳转到命令行,此时若输入3+2,回车并p,会粘贴5。

    4.8 选择拖放寄存器

    上面已经介绍了两个:

    "+
    "*
    

    还有一个是

    "~
    

    其中

    "+
    "*
    

    在Mac与Windows上指的是系统剪贴板,在大多数X11,也就是带桌面环境的Linux发行版中是有区别的,上面也提到了一点:

    "+ 系统剪贴板
    "* 鼠标选中区域,可以中键粘贴
    

    有文本拖拽到vim时,被存放在

    "~
    

    中,默认会将其中的内容插入到光标位置。

    4.9 黑洞寄存器

    "_
    

    所有进入到里面的内容会消失,通常用于脚本中。

    4.10 搜索寄存器

    "/
    

    存储上一次搜索的关键词。可写,通过

    :let @/ = "123"
    

    下一次搜索可直接

    /
    

    不输入关键词回车即可。
    注意不存在

    "?
    

    寄存器。

    5 参考

    1.Vim 寄存器完全手册

    2.Vim官方文档-1

    3.Vim官方文档-2

    4.知乎-如何将 Vim 剪贴板里面的东西粘贴到 Vim 之外的地方

  • 相关阅读:
    November 13th 2016 Week 47th Sunday The 1st Day
    November 12th 2016 Week 46th Saturday
    November 11th 2016 Week 46th Friday
    November 10th 2016 Week 46th Thursday
    November 9th 2016 Week 46th Wednesday
    November 8th 2016 Week 46th Tuesday
    windows 7文件共享方法
    Win7无线网络共享设置方法
    常量指针和指针常量
    如何查找局域网的外网ip
  • 原文地址:https://www.cnblogs.com/6b7b5fc3/p/12972660.html
Copyright © 2011-2022 走看看