Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1833579
  • 博文数量: 286
  • 博客积分: 3713
  • 博客等级: 少校
  • 技术积分: 2275
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-11 09:47
个人简介

http://blog.chinaunix.net/uid/16979052.html

文章分类

全部博文(286)

文章存档

2018年(1)

2017年(16)

2016年(9)

2015年(17)

2014年(15)

2013年(112)

2012年(116)

分类: LINUX

2012-07-04 13:21:46

寄存器操作

Vim可以将不同字段剪切或复制到不同寄存器中,您可以从不同寄存器中取出内容后粘贴

"<寄存器名称>   按下“"”键和另一个字符键,便可以定义一个寄存器。例如:

"a  "1
定义寄存器后直接进行操作

"ayy    将当前行复制到寄存器 a 中
"ap     将寄存器 a 中的内容粘贴到光标之后
通常情况下,寄存器 + ( " + Shift+= )对应X下的剪贴板。您在其它程序中复制的内容,可以使用 "+p 粘贴到Vim中;
您在Vim中,可以使用 "+y 将内容复制到剪贴板,再粘贴到其它程序中
没有指定寄存器时,Vim使用“无名寄存器”存储内容
使用撤销分支功能
可以使用 :undolist 命令查看缓冲区存在的撤销分支列表。而通过 :undo <> 命令则能够移到撤销的某个分支。



强烈建议大家先看看 doc/change.txt 里关于寄存器部分的内容, 我只是简单提及一下,英文不太好的朋友请找 vim 的中文文档。 我要介绍的超强武器是 ctrl-r,在 insert mode 和 command mode 均可使用,功能就是插入寄存器相关内容。 大家可以试试先 copy 或 delete 一些文本,然后在 normal mode 或 command mode 输入 ctrl-r ",看到了吗, 你粘贴了寄存器"的内容。
寄存器的主要有以下几种:

a. The unnamed register ""

   "d", "c", "s", "x" 和 "y" 等涉及删除或拷贝的命令都会将内容存放于此(有例外)。

b. 10 numbered registers "0 to "9          

   0 为最近拷贝的内容,1-9 为最近删除的内容。

   指定 named register 时不会存放于此。

c. The small delete register "-

   删除不多于一行的内容会存在于此。

d. 26 named registers "a to "z or "A to "Z

   小写与大写的区别是,小写是覆盖方式,大写是添加方式。

e. four read-only registers ":, "., "% and "#

   ". 存放上次插入的文本

      有什么用?呵,例如,你输入了一段文本,在另一个地方也要有相同的内容,你输完后,一般要选择并复制一下吧?

      而用这个,直接移到需要插入的地方,i. 即可。

   "% 是当前编辑文件全名

      呵,vim 中,% 就是代表当前编辑文件名的变量,好记吧?

      不过,一般直接用 % 就行,例如":!cat %",vim 会自动扩展。

   "# 是alternate file 名称 (这个我不知道)

   ": 上次执行的命令

      记起来比较容易,冒号就是命令行提示符嘛。这个有些什么用呢?

      在测试配置文件时十分有用,先在命令行输入命令,调试好后,

      在 insert mode 里按Ctrl-R : 就可将该命令插到文件中。

f. the expression register "=

      呵,表达式寄存器,可以输入一个表达式,并插入结果。

g. The selection and drop registers "*, "+ and "~ 

      跟 gui 即 X/Windows 剪贴板有关的变量。

      在 X 中,鼠标中键与系统剪贴板不一样,至于区别,大家自己试验一下,这里给个提示,在命令行下输入 reg 可以列出所有

      寄存器的内容。

h. The black hole register "_ 

      黑洞

i. Last search pattern register "/

      上次搜索的内容。例如,我要搜索一个单词 linuxforum,但我比较懒,先输入 /linux,发现出现很多个 linux,多次按 n 无果,

      难道要重新输入 /linuxforum ? 不用,只需要 //forum 即可。呵,聪明的你一定想到了,用命令行历史也可以调来,按 ctrl-p 或 ctrl-n

      即可上下翻阅。这样也可以嘛,也比较快捷,但要查找 forumlinux 呢?

      用 ctrl-r 的话只需 /forum/ 。
7)在使用X Window系统时,有两个特殊的寄存器是需要注意一下的:”"*”访问的寄存器是X的主选择区域(primary selection),”"+”访问的寄存器是X的剪贴板(clipboard)。

=====================================

存入寄存器:

1)在visual模式下,输入:”寄存器y”

2)录制的时候:输入:“q{regsiter}”,使用:在normal模式下,按“@{regsiter}”
================================

调用寄存器:

在插入模式里,按ctrl+r,再按寄存器名,如调用寄存器a:

ctrl+r,a就可以了。

======================================

vim常用的寄存器:

‘”‘     无名寄存器,包含最近删除或抽出的文本
‘%’     当前文件名
‘#’     轮换文件名
‘*’     剪贴板内容 (X11: 主选择)
‘+’     剪贴板内容
‘/’     最近的搜索模式
‘:’     最近的命令行
‘.’     最近插入的文本
‘-’     最近的行内 (少于一行) 删除
‘=’     表达式寄存器;你会被提示输入一个表达式 (见

==============================================

请问如何用vi 复制第5行到第10行并粘贴到第12行之后?

命令行模式下输入
:5,10 co 12

---------------------

延伸一下, 有时候不想费劲看多少行或复制大量行时,可以使用标签来替代

光标移到起始行,输入ma
光标移到结束行,输入mb
光标移到粘贴行,输入mc

然后 :'a,'b co 'c

把 co 改成 m 就成剪切了

-------------------------

Vi 提供了文本移动和复制命令,用户利用这些指令可以方便的复制字符、文字、行还有文本块。
有关的命令如下:
yy                                        将当前行复制到缓冲区
yw                                        将当前单词复制到缓冲区
y1                                        将光标处的一个字符复制到缓冲区
p                                        将缓冲区的信息粘贴到光标的后面
:行号1 ,行号2 copy 行号3                                        将行号1到行号2的内容复制到行号3所在行的后面。
:行号1 ,行号2 move 行号3                                       将行号1到行号2的文本内容移动到行号3所在行的后面。

阅读(1775) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~