首页 > 其他分享 >vim的寄存器

vim的寄存器

时间:2023-06-17 17:13:57浏览次数:40  
标签:剪贴板 寄存器 Vim 内容 剪切板 vim

以前就觉得vim里复制的内容好像粘贴不出来, 就觉得这个软件真是隔路, 剪贴板都不同用, 今天查了一下才发现原来人家是功能更强大的关系. 一下是一则知乎回答的引用

刚刚测试又发现正常复制就能粘贴出来......记忆错乱


作者:胖君
链接:https://www.zhihu.com/question/19863631/answer/442180294
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

根据平台不同,要分两种情况。先用下面命令确定你属于哪一种,vim --version | grep clipboard情况一,如果结果里你找到加号开头的+clipboard, 恭喜你,你的vim没问题,是你姿势问题。用"+y 代替y将选中的内容复制到系统剪贴板,效果和ctrl-c一致。 用"+p代替p将剪贴板内容复制到指定位置,也可以用ctrl-v。 d,x,c,s也一样,用之前前面加"+。 如果想偷懒用y直接把内容复制到系统剪贴板,需要到vim配置文件.vimrc里加一行属性。用下面命令开始配置,vim ~/.vimrc 然后,加入下面这行,set clipboard=unnamed现在你的y,d,x,p已经能和 ctrl-c和ctrl-v 一个效果,并且能互相混用。情况二,如果找到的是负号开头的-clipboard,说明你的vim不支持系统剪切板,我的MacOS系统自带vim就不支持,所以跑来了。需要先重新安装vim,Linux系统,sudo apt install vim-gtkMacOS,brew install vim安装好之后,重复情况一的操作即可。问题解决了,有几个细节再解释一下,满足一下好奇心。首先,vim里y,d,x,c复制,剪切下来的内容临时存放在一个叫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-c和ctrl-v用到的系统剪贴板:desktop clipboard (XA_SECONDARY)":对应图形界面中鼠标框选的内容(可以用鼠标中键黏贴):X11 primary selection (XA_PRIMARY)所以看到"也不要慌,试试看用"y和"*p能不能复制粘贴。可以的话就说明是混用的,不行就老老实实用"+。 以上。遇到此坑的同学了解一下。参考文献:【Vim documentation: change】【How to copy to clipboard in Vim?】【如何将 Vim 剪贴板里面的东西粘贴到 Vim 之外的地方?】【Accessing the system clipboard】【Macbook终端vim使用系统剪切板】编辑于 2018-07-16 07:10


作者:右耳朵猫(whinc)
链接:https://www.zhihu.com/question/19863631/answer/89354508
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Vim 中的复制、删除的内容都会被存放到默认(未命名)寄存器中,之后可以通过粘贴操作读取默认寄存器中的内容。寄存器是完成这一过程的中转站,Vim 支持的寄存器非常多,其中常用的有 a-zA-Z0-9+ 。其中:0-9:表示数字寄存器,是 Vim 用来保存最近复制、删除等操作的内容,其中 0 号寄存器保存的是最近一次的操作内容。a-zA-Z:表示用户寄存器,Vim 不会读写这部分寄存器"(单个双引号):未命名的寄存器,是 Vim 的默认寄存器,例如删除、复制等操作的内容都会被保存到这里。+:剪切板寄存器,关联系统剪切板,保存在这个寄存器中的内容可以被系统其他程序访问,也可以通过这个寄存器访问其他程序保存到剪切板中的内容。如果想了解更多寄存器内容,可参考: http://vimdoc.sourceforge.net/htmldoc/change.html#registers

通过下面命令可以查看所有寄存器中的内容,也可以只查看指定寄存器的内容(将寄存器名称作为参数):reg [register_name] 有了上面的基础知识后,要实现题主"将 Vim 剪贴板里面的东西粘贴到 Vim 之外的地方?"就很明了,只需要将内容复制到剪切板寄存器(+)中即可,其他程序便可以访问到了。"

+yy // p复制当前行到剪切板
"+p // 将剪切板内容粘贴到光标后面
"ayy // 复制当前行到寄存器 a
"ap // 将寄存器 a 中的内容粘贴到光标后面

---------------------------------- 2016-03-05 旧的回答 -------------------------------------------

Vim 有12个粘贴板依次编号为:0、1、2、...、9、a、"、+,其中 + 号为系统粘贴板," 为临时粘贴板。系统剪切板中的内容可在其他程序中使用。上面的复制指令都可以配合剪切板进行操作。"nyw 复制当前单词到 n 号剪切板(双引号开始) "np 粘贴 n 号剪切板内容到当前位置后 "+Y 复制当前行到系统剪切板"+nY 复制当前行往下 n 行到系统剪切板"+p 粘贴系统剪切板内容到当前位置后

标签:剪贴板,寄存器,Vim,内容,剪切板,vim
From: https://www.cnblogs.com/etfolinbase/p/17487642.html

相关文章

  • Windows Git Bash vim 屏幕闪烁
    据说是本来是遇到无效命令时发出的蜂鸣声,Windows用一个快速的闪烁取而代之。 修改Git安装目录下etc/vimrc文件,最后一行加入setvbt_vb= 或者在gitbash的vim中冒号模式输入setvbt_vb=......
  • vim常用命令
    vim是Linux系统上一款常用的文本编辑器编辑文件:vimfilename或vifilename只读模式查看文件:viewfilename常用命令#1.进入输入状态的命令a#从光标所在位置后追加文字A#从光标所在行最后追加文字i#从光标所在位置前面插入文字I#从光标所在行首开始插入文字......
  • leetcode:vim模式下esc代码区失焦问题
    问题刷力扣时用的vim模式编码,当按下esc退出插入模式的时候,发现编辑的焦点直接从代码区退出了,还想继续往下敲代码就只能再次点鼠标原因浏览器使用了插件vimium,所以导致这个问题的出现。参考这里解决把插件设置力扣网站禁用就行,如果不想麻烦的关闭vimium插件的话。直接添加如......
  • Neovim 的配置与使用
    LazyVim参考Lazyvim的官方安装教程即可安装,要求系统已经安装好了npm。YoucanfindastartertemplateforLazyVimhereMacosorLinuxInstalltheLazyVimStarterMakeabackupofyourcurrentNeovimfiles:#requiredmv~/.config/nvim~/.config/nvim.bak#opt......
  • 在Vim中上下移动整个行
     当您在中命中命令:helpmove时vim,结果如下::[range]m[ove]{address}*:m**:mo**:move**E134*Movethelinesgivenby[range]tobelowthelinegivenby{address}.例如: 将当前行向下移动一行=> :m+1。例如: 将数字100的行移到数字80=>的行下方 :100m80。例如......
  • 【vim】批量替换文件内容
    一、场景  由于测试时,需要替换配置,手动替换很慢,所以就需要批量替换。 二、操作方法打开需要修改的文件进入命令模式,输入:%s/要替换的内容/替换后的内容/g,其中%表示对整个文件进行替换,g表示全局替换。按下回车键,Vim会自动替换所有匹配的内容。你也可以使用正则表......
  • vim使用
    在Vim中选中多行、删除多行和定位到指定位置的方法如下:选中多行:进入命令模式:按下Esc键确保处于普通模式。移动光标到起始行:使用上下方向键或j、k进行移动。进入可视块选择模式:按下大写字母V。移动光标到结束行:使用上下方向键或j、k进行移动。选中多行后,你可以进行剪切、复......
  • STM32使用寄存器实现点灯操作
    1.配置RCC_APB2ENR(见参考手册7.3.7)2.配置GPIOC_CRH(见参考手册8.2.2)3.配置GPIOC_ODR(见参考手册8.2.4) #include"stm32f10x.h"//Deviceheaderintmain(void){ RCC->APB2ENR=0x00000010; GPIOC->CRH=0x00300000; GPIOC->ODR=0x0000000......
  • 宿主机 vim 编辑 docker 容器内部文件
    容器所有文件,一定在宿主机某个位置。具体位置是:/proc/<container-pid>/root,这个位置就是容器系统根目录所在的位置,注意只有运行中的容器才有pid,停止中的容器pid为0。查看一个容器pid可用命令dockerinspect-f'{{.State.Pid}}' <container> 示例(注意:需要root权......
  • amix vim vimrc 3.6 (部分修改)
    """"""""""""""""""""""""""""""""""""""""""&qu......