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 之外的地方

  • 相关阅读:
    卸载cuda,以及N卡驱动
    ubuntu 16.04 从gcc 5.4 安装gcc 5.3.0
    Check failed: status == CUBLAS_STATUS_SUCCESS (13 vs. 0) CUBLAS_STATUS_EXECUTION_FAILED
    ubuntu16.04 caffe cuda9.1 segnet nvidia gpu安装注意的点
    ubuntu16.04安装docker
    进程管理
    Dev TextEdit 只输入数字
    dev gridcontrol添加右键菜单
    WinForm rdlc 报表自定义datatable数据源
    DevExpress GridControl使用方法总结2 属性说明
  • 原文地址:https://www.cnblogs.com/6b7b5fc3/p/12972660.html
Copyright © 2011-2022 走看看