分类: LINUX
2011-02-16 11:46:34
原文地址:
Vim可以将不同字段剪切或复制到不同寄存器中,您可以从不同寄存器中取出内容后粘贴
"<寄存器名称> 按下“"”键和另一个字符键,便可以定义一个寄存器。例如:
"a "1定义寄存器后直接进行操作
"ayy 将当前行复制到寄存器 a 中
"ap 将寄存器 a 中的内容粘贴到光标之后使用撤销分支功能
- 通常情况下,寄存器 + ( " + Shift+= )对应X下的剪贴板。您在其它程序中复制的内容,可以使用 "+p 粘贴到Vim中;
您在Vim中,可以使用 "+y 将内容复制到剪贴板,再粘贴到其它程序中- 没有指定寄存器时,Vim使用“无名寄存器”存储内容
可以使用 :undolist 命令查看缓冲区存在的撤销分支列表。而通过 :undo <> 命令则能够移到撤销的某个分支。
寄存器的主要有以下几种:
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所在行的后面。