VIM使用系列: 复制并移动文本
1 5. 复制并移动文本 *copy-move*
2
3 *quote*
4 "{a-zA-Z0-9.%#:-"} 指定下次的删除、抽出和放置命令使用的寄存器
5 {a-zA-Z0-9.%#:-"} (大写字符使得删除和抽出命令附加到该
6 寄存器) ({.%#:} 只能用于放置命令)。
7
8 *:reg* *:registers*
9 :reg[isters] 显示所有编号和命名寄存器的内容。但不列出用于 |:redir|
10 目的地的寄存器。
11 {Vi 无此功能}
12
13 :reg[isters] {arg} 显示 {arg} 里提到的编号和命名寄存器的内容。例如: >
14 :dis 1a
15 < 显示寄存器 '1' 和 'a'。{arg} 里可以用空格。
16 {Vi 无此功能}
17
18 *:di* *:display*
19 :di[splay] [arg] 和 :registers 相同。{Vi 无此功能}
20
21 *y* *yank*
22 ["x]y{motion} 抽出 {motion} 跨越的文本 [到寄存器 x]。如果没有字符被
23 抽出 (例如,在第一列执行 "y0") 并且 'cpoptions' 里包括
24 'E' 标志位,这是一个错误。
25
26 *yy*
27 ["x]yy 抽出 [count] 行 [到寄存器 x] |linewise| 行动作。
28
29 *Y*
30 ["x]Y 抽出 [count] 行 [到寄存器 x] (等同于 yy,|linewise| 行
31 动作)。如果你想要 "Y" 执行从光标到行尾的操作 (更合乎逻
32 辑,但是与 Vi 不兼容),用 ":map Y y$"。
33
34 *v_y*
35 {Visual}["x]y 抽出高亮文本 [到寄存器 x] (关于 {Visual} 见
36 |Visual-mode|)。{Vi 无此功能}
37
38 *v_Y*
39 {Visual}["x]Y 抽出高亮行 [到寄存器 x] (关于 {Visual} 见
40 |Visual-mode|)。{Vi 无此功能}
41
42 *:y* *:yank* *E850*
43 :[range]y[ank] [x] 抽出 [range] 所指定的行 [到寄存器 x]。仅当包含
44 |+clipboard| 特性时才可以抽出到 "* 或 "+ 寄存器。
45
46 :[range]y[ank] [x] {count}
47 从 [range] 的最后一行开始 (缺省: 当前行
48 |cmdline-ranges|) 抽出 {count} 行 [到寄存器 x]。
49
50 *p* *put* *E353*
51 ["x]p 放置文本 [从寄存器 x] 在光标之后 [count] 次。{Vi: 没有
52 计数}
53
54 *P*
55 ["x]P 放置文本 [从寄存器 x] 在光标之前 [count] 次。{Vi: 没有
56 计数}
57
58 *<MiddleMouse>*
59 ["x]<MiddleMouse> 从一个寄存器放置文本在光标之前 [count] 次。除非另外指
60 定,否则用 "* 寄存器。
61 光标停留在新文本的尾部。
62 只有在 'mouse' 包含 'n' 或者 'a' 时鼠标才会工作。
63 {Vi 无此功能}
64 如果你有滚轮鼠标而且经常不小心粘贴了文本,你可以使用以
65 下映射来关闭鼠标中键粘贴的功能: >
66 :map <MiddleMouse> <Nop>
67 :imap <MiddleMouse> <Nop>
68 < 你也许还想要关闭多键击的功能。参见 |double-click|。
69
70 *gp*
71 ["x]gp 如同 "p",但光标停留在新文本之后。{Vi 无此功能}
72
73 *gP*
74 ["x]gP 如同 "P",但光标停留在新文本之后。{Vi 无此功能}
75
76 *:pu* *:put*
77 :[line]pu[t] [x] 放置文本 [从寄存器 x] 在行号 [line] (缺省为当前行) 之
78 后。它总是 |linewise| 行动作,因而这个命令可以用来把抽
79 出的块放置在新行上。
80 如果未指定寄存器,则取决于 'cb' 选项: 如果 'cb' 包含
81 "unnamedplus",则从 + 寄存器 |quoteplus| 取出,否则如
82 果 'cb' 包含 "unnamed",则从 * 寄存器 |quotestar| 取
83 出,否则,从无名寄存器 |quote_quote| 取出。
84 寄存器也可以是 '=',跟随一个可选的表达式。表达式继续到
85 该命令结束为止。你需要在 '|' 和 '"' 字符前加上反斜杠不
86 让它们终止你的命令行。例如: >
87 :put ='path' . \",/test\"
88 < 如果 '=' 之后没有表达式,Vim 使用前一个表达式。用
89 ":dis =" 你可以看到它。
90
91 :[line]pu[t]! [x] 放置文本 [从寄存器 x] 在行号 [line] (缺省为当前行) 之
92 前。
93
94 ["x]]p 或 *]p* *]<MiddleMouse>*
95 ["x]]<MiddleMouse> 类似 "p",但调整当前行的缩进。只有在 'mouse' 包含 'n'
96 或者 'a' 时鼠标才会工作。{Vi 无此功能}
97
98 ["x][P 或 *[P*
99 ["x]]P 或 *]P*
100 ["x][p 或 *[p* *[<MiddleMouse>*
101 ["x][<MiddleMouse> 类似 "P",但调整当前行的缩进。只有在 'mouse' 包含 'n'
102 或者 'a' 时鼠标才会工作。{Vi 无此功能}
103
104 你可以用这些命令把文本从一个地方复制到另一个地方。首先,把文本用抽出、删除或者
105 修改命令取到一个寄存器里,然后用放置命令把寄存器的内容插入。你可以用这些命令把
106 文本从一个文件移动到另一个文件,因为 Vim 在切换缓冲区时保留所有的寄存器
107 (CTRL-^ 命令可用来快捷地切换文件)。
108
109 *linewise-register* *characterwise-register*
110 除了 :put 以外,你可以用 "." 重复放置命令,你也可以撤销它们。如果保存到寄存器
111 文本的命令是 |linewise| 行动作,Vim 把文本插入在光标所在的行之下 ("p") 或之上
112 ("P")。不然,Vim 把文本插入在光标的之后 ("p") 或之前 ("P")。":put" 命令使得
113 Vim 总是把文本放在下一行。你可以用命令序列 "xp" 来交换两个字母。你可以用 "ddp"
114 命令序列来交换两行。你还可以用 "deep" 命令交换两个单词 (光标在第一个单词之前的
115 空白上)。你更可以在放置命令之后用 "']" 或者 "`]" 命令把光标移动到插入文本之
116 后,或者用 "'[" 或 "`[" 把光标移动到文本的开始处。
117
118 *put-Visual-mode* *v_p* *v_P*
119 在可视模式下使用如 |p| 或者 |P| 之类的放置命令时,Vim 试图把选择的文本替换成寄
120 存器的内容。是否工作如你所愿决定于选择的类型和寄存器里文本的类型。对于列块选择
121 而言,它也决定于列块的大小,和头尾是否在已存在的字符上。(实现细节: 实际上,它
122 先把寄存器的内容放到选择区之后,再删除选择区的内容。)
123 前次选择的文本被放在无名寄存器中。如果希望把相同的文本重复放入可视选择区多次,
124 请选用其它寄存器。例如,先抽出要复制的文本,再可视化选择要替换的文本,然后使用
125 "0p。重复任意多次均可,而每次无名寄存器都会被改变。
126
127 *blockwise-register*
128 如果你使用面向列块的可视模式命令把文本存到寄存器里,文本列块会被插入在当前和其
129 后的行的当前列之前 ("P") 或之后 ("p")。Vim 使得整个文本列块从同一列开始。这
130 样,插入的文本看上去和抽出或删除时看起来一样。为了使之可能,Vim 可能需要把一些
131 <Tab> 字符替换成空格。不过,如果列块的宽度不是 <Tab> 宽度的整数倍并且插入列块
132 之后文本里包含 <Tab> 的时候,那些文本可能就不会那么整齐。
133
134 注意 在一个面向字符的抽出命令之后,Vim 把光标停留在最接近缓冲区开头的第一个被
135 抽出的字符之上。这意味着 "yl" 不会移动光标,但是 "yh" 把光标向左移一格。
136 逻辑: 在 Vi 里 "y" 命令跟一个反向的动作有时不会把光标移动到第一个被
137 抽出的字符之上,因为屏幕没有刷新。Vim 符合 Posix 的规范,总是
138 把光标移动到第一个字符之上。
139 在一个面向行的抽出命令之后,光标放在第一行上,但是列保持不变,所以不必然在第一
140 个抽出的字符上。
141
142 共有九种类型的寄存器: *registers* *E354*
143 1. 无名寄存器 ""
144 2. 10 个编号寄存器 "0 到 "9
145 3. 行内删除寄存器 "-
146 4. 26 个命名的寄存器 "a 到 "z 或者 "A 到 "Z
147 5. 四个只读寄存器 ":、".、"% 和 "#
148 6. 表达式寄存器 "=
149 7. 选择和拖放寄存器 "*、"+ 和 "~
150 8. 黑洞寄存器寄存器 "_
151 9. 最近搜索模式寄存器 "/
152
153 1. 无名寄存器 "" *quote_quote* *quotequote*
154 用 "d"、"c"、"s"、"x" 等命令删除或者用 "y" 等抽出命令复制的文本都被 Vim 用来填
155 充该寄存器,不管是否用到别的专门寄存器 (例如 "xdd)。这就好像无名寄存器是指向最
156 近使用的那个寄存器的指针一样。使用大写寄存器进行添加时,无名寄存器包含和命名寄
157 存器相同的文本。'_' 寄存器是一个特例。"_dd 不把删除的文本存在任何寄存器里。
158 不指定寄存器的放置命令 (p 或 P) 使用无名寄存器的内容。你也可以用 '"' 作为名字
159 来访问该寄存器。这意味着要输入两个连续的双引号。写入 "" 寄存器将实际写到寄存器
160 "0 上。{Vi: 寄存器内容在更换文件时丢失,没有 '"'}
161
162 2. 编号寄存器 "0 到 "9 *quote_number* *quote0* *quote1*
163 *quote2* *quote3* *quote4* *quote9*
164 Vim 把抽出和删除命令的文本保存在这些寄存器里。
165 编号寄存器 0 包含最近抽出的文本,除非该命令用 ["x] 指定了别的寄存器。
166 编号寄存器 1 包含了最近删除或者修改的文本,除非该命令用 ["x] 指定了别的寄存
167 器或者该文本小于一行 (该情况下使用行内删除寄存器)。以下移动命令在应用删除操作
168 符时例外: |%|、|(|、 |)|、|`|、|/|、|?|、|n|、|N|、|{| 和 |}|。这时,总是使用
169 寄存器 "1 (为了和 Vi 兼容)。如果文本小于一行,同时使用 "- 寄存器。
170 每来一次新的删除和修改,Vim 把前一次的寄存器 1 的内容复制到寄存器 2,2 到
171 3,依此类推。而寄存器 9 的内容就丢失了。
172 {Vi: 编号寄存器的内容在更换文件时丢失;寄存器 0 不存在}
173
174 3. 行内删除寄存器 "- *quote_-* *quote-*
175 该寄存器保存删除不到一行内容的命令的文本,除非该命令用 ["x] 指定了寄存器。
176 {Vi 无此功能}
177
178 4. 命名寄存器 "a 到 "z 或者 "A 到 "Z *quote_alpha* *quotea*
179 Vim 只有在你指定的时候才使用这些寄存器。指定为小写字母时替换原来的内容,指定为
180 大写字母时附加到原来的内容。如果 'cpoptions' 里有 '>' 标志位,在附加文本前插入
181 一个换行符。
182
183
184 5. 只读寄存器 ":、".、"% 和 "#
185 它们是 '%'、'#'、':' 和 '.'。你只能在 "p"、"P"、":put" 命令和 CTRL-R 的时候使
186 用它们。{Vi 无此功能}
187 *quote_.* *quote.* *E29*
188 ". 包含最近插入的文本 (和插入模式命令 CTRL-A 和 CTRL-@ 插入的一
189 样)。注意: 它不适用于 CTRL-R 在命令行上的操作。它的工作方式稍
190 有不同,例如,文本是被插入而不是放置的 ('textwidth' 和其它选项
191 影响插入的内容)。
192 *quote_%* *quote%*
193 "% 包含当前文件名。
194 *quote_#* *quote#*
195 "# 包含轮换文件名。
196 *quote_:* *quote:* *E30*
197 ": 包含最近执行过的命令行。例如: 用 "@:" 重复上次执行过的命令行命
198 令。只有当一个命令行中至少一个字符是键入的,该寄存器才会保存命
199 令行的内容。所以,如果命令行完全来自映射,该寄存器保持不变。
200 {仅当编译时加入 |+cmdline_hist| 特性才有效}
201
202 6. 表达式寄存器 "= *quote_=* *quote=* *@=*
203 其实并没有这么一个寄存器可以储存文本,但是这是用来在使用寄存器的命令中使用表达
204 式的一个方式。表达式寄存器是只读的,你不能把文本放置其中。在 '=' 之后,光标移
205 到命令行上,这时你可以输入任何的表达式 (见 |expression|)。所有普通的命令行编辑
206 命令都可以使用,还有一个表达式专门的历史表。当你按回车结束命令行时,Vim 计算表
207 达式的结果。如果你用 <Esc> 结束,Vim 终止表达式。如果你不输入表达式,Vim 使用
208 最近的表达式 (和 "/" 命令的处理相似)。
209
210 表达式的计算结果必须是一个字符串。数值结果会自动转化为字符串。对 "p" 和 ":put"
211 命令而言,浮点数结果也会被转化为字符串。如果结果为列表,每个成员被转成字符串,
212 然后被单独放在一行上。字典、函数引用类型的结果则产生错误信息 (通过 string() 转
213 化)。
214
215 如果 "= 寄存器被 "p" 命令使用,该字符串会在 <NL> 字符处断开。如果该字符串以
216 <NL> 结尾,则它被视为一个面向行的寄存器。{Vi 无此功能}
217
218 7. 选择和拖放寄存器 "*、"+ 和 "~
219 用这些寄存器来保存和取得 GUI 界面选择的文本。参见 |quotestar| 和 |quoteplus|。
220 如果剪贴板不存在或者不工作,使用无名寄存器。Unix 上,仅当 |+xterm_clipboard|
221 特性存在时剪贴板才可用。{Vi 无此功能}
222
223 注意 "* 和 "+ 在 X11 系统上有分别。关于该差别的解释,参见 |x11-selection|。在
224 MS-Windows 上,"* 和 "+ 的使用实际上是等价的,可见 |gui-clipboard|。
225
226 *quote_~* *quote~* *<Drop>*
227 只读的 "~ 寄存器保存最近一次拖放操作放下的文本。如果有什么东西被放到 Vim 上,
228 "~ 寄存器被填充,<Drop> 虚拟键被激活。如果你需要,你可以重定义该键的映射;缺省
229 的动作 (适用于所有模式) 是把 "~ 寄存器的内容插入到当前光标位置。{Vi 无此功能}
230 {仅当编译时加入 |+dnd| 特性才有效,当前只适用于 GTK GUI 版本}
231
232 注意: "~ 寄存器仅用于在 Vim 上拖放普通文本。拖放 URI 列表在内部处理。
233
234 8. 黑洞寄存器 "_ *quote_*
235 当写到这个寄存器时,什么都不会发生。这可以用来删除文本,而不影响任何正常的寄存
236 器。从该寄存器读时,什么都不会返回。{Vi 无此功能}
237
238 9. 最近搜索模式寄存器 "/ *quote_/* *quote/*
239 含有最近搜索的模式。它被 "n" 和 'hlsearch' 使用。可以用 `:let` 来修改。你可以
240 改变它使得 'hlsearch' 不经过实际的搜索直接高亮某些匹配。你不能把抽出或者删除命
241 令的内容放到该寄存器上。搜索方向则可从 |v:searchforward| 得到。
242 注意 从函数返回时该值被复原 |function-search-undo|。
243 {Vi 无此功能}
244
245 *@/*
246 你可以用 `:let` 命令写到一个寄存器 |:let-@|。例如: >
247 :let @/ = "the"
248
249 如果你用放置命令而不指定寄存器,Vim 使用上次填充的寄存器 (这也是无名寄存器的内
250 容)。如果你弄糊涂了,用 `:dis` 命令看看 Vim 会放置什么内容 (该命令显示所有的有
251 名和无名的寄存器;无名寄存器被标为 '"')。
252
253 下面三个命令总是针对整行工作。
254
255 :[range]co[py] {address} *:co* *:copy*
256 把 [range] 指定的行复制到 {address} 给出的行之下。
257
258 *:t*
259 :t 和 :copy 等价。
260
261 :[range]m[ove] {address} *:m* *:mo* *:move* *E134*
262 把 [range] 指定的行移动到 {address} 给出的行之下。
263
VIM使用系列: 复制并移动文本的更多相关文章
- Vim 下的复制/粘贴/剪切/撤销
一 了解 vim 有 12 个粘贴板,分别是 0.1.2.....9.a.“.+:用 :reg 命令可以查看各个粘贴板里的内容.在 vim 中简单用 y 命令只是复制到 "(双引号)粘贴板里 ...
- iOS系列 基础篇 08 文本与键盘
iOS系列 基础篇 08 文本与键盘 目录: 1. 扯扯犊子 2. TextField 3. TextView 4. 键盘的打开和关闭 5. 打开/关闭键盘的通知 6. 键盘的种类 7. 最后再扯两句 ...
- 【分享】JS如何为复制的Web文本添加其他信息
看到了两篇关于这题的讨论,简单的记录一下!o(* ̄▽ ̄*)ブ 1. stackoverflow , How to add extra info to copied web text 2. 黑客派, ...
- 学习excel的使用技巧复制一列文本成新列去重
学习excel的使用技巧复制一列文本成新列去重 其实比较简单的技巧 知道了就会 不知道就比较麻烦 直接复制到一列 找到 数据选项 删除重复项
- vim 介绍安装 复制 剪切 粘贴
1. vim 产生:对于linux 文件的编辑,最初是vi,然后对于其功能的扩展,就产生了vim vim 的安装 yum install vim 2.光标的移动 用得最多的就是方向键上的 上下左右,和 ...
- vim选中字符复制/剪切/粘贴
转载自:http://www.cnblogs.com/luosongchao/p/3193153.html 问题描述: vim 中选中指定字符,进行复制/剪切/粘贴 选择:1.普通模式下--v+hjk ...
- vim寄存器与复制粘贴的实现
对于大多数在Ubuntu下使用vim作为常用编辑器的同学来讲,他们遇到的第一个比较大的麻烦来自于vim与外部应用的复制粘贴. 当然,愿意选择ubuntu以及vim的同学肯定是google好手.不幸的是 ...
- 07.LoT.UI 前后台通用框架分解系列之——轻巧的文本编辑器
LoT.UI汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui 上次说的是强大的百度编辑器 http://www.cnblogs.com/d ...
- 【 D3.js 高级系列 — 1.0 】 文本的换行
在 SVG 中添加文本是使用 text 元素.但是,这个元素不能够自动换行,超出的部分就显示不出来了,怎么办呢? 高级系列开篇前言 从今天开始写高级系列教程.还是那句话,由于本人实力有限,不一定保证入 ...
随机推荐
- TouTiao开源项目 分析笔记20 问答详情
1.效果预览 1.1.效果预览,从问答列表开始 前面实现了从列表到内容. 这里主要讲解从内容到详情. 点击每一个回答内容,进入回答详情页面. 1.2.触发的点击事件 在WendaContentView ...
- IAR配置ICF到项目的实现方法
以STM8为例: 将项目使用的MCU型号的icf文件拷贝到项目里面,icf一般放在 C:\Program Files\IAR Systems\Embedded Workbench 6.5\stm8\c ...
- HDU 4405 Aeroplane chess(期望dp)
Aeroplane chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- P2344 奶牛抗议
P2344 奶牛抗议 题目背景 Generic Cow Protests, 2011 Feb 题目描述 约翰家的N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在第i 位的奶牛的理智度为 ...
- 跨域携带cookie
$.ajax({ type: "GET", url: "https://upload.cnblogs.com/imageuploader/upload?host=www. ...
- Start with PJSIP on windows
To overcome the project of HD video conferencing systerm,I should learn to use the PJSIP. I should m ...
- ASP NET Core 部署 IIS 和发布
1. 微软官网原文链接: https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?view=aspnetcore- ...
- php session访问限制
登录 <?php // 启动会话 session_start(); // 注册登陆成功的 admin 变量,并赋值 true $_SESSION["admin"] = tru ...
- 软工实践Alpha冲刺(4/10)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 很胖,刚学,照猫画虎做了登录与注册界面. 展示GitHub ...
- 微信公众号开发java框架:wx4j(入门篇)
导航 入门 http://www.cnblogs.com/2333/p/6617819.html WxServlet介绍 MaterialUtils 素材工具类使用说明 http://www.cnbl ...