5. 复制并移动文本                   *copy-move*
  2 
  3                             *quote*
}  指定下次的删除、抽出和放置命令使用的寄存器
(大写字符使得删除和抽出命令附加到该
({.%#:} 只能用于放置命令)  7 
  8                             *:reg* *:registers*
[isters]        显示所有编号和命名寄存器的内容。但不列出用于 |:redir|
 10             目的地的寄存器。
 11             {Vi 无此功能}
 12 
[isters] {arg}  显示 {arg} 里提到的编号和命名寄存器的内容。例如: >
 14                 :dis 1a
 15 <           显示寄存器 '1' 和 'a'。{arg} 里可以用空格。
 16             {Vi 无此功能}
 17 
 18                             *:di* *:display*
[arg]    和 :registers 相同。{Vi 无此功能}
 20 
 21                             *y* *yank*
[到寄存器 x]。如果没有字符被
 'cpoptions' 里包括
 24             'E' 标志位,这是一个错误。
 25 
 26                             *yy*
[到寄存器 x] |linewise| 行动作。
 28 
 29                             *Y*
(等同于 yy,|linewise| 行
(更合乎逻
 33 
 34                             *v_y*
(关于 {Visual} 见
 36             |Visual-mode|)。{Vi 无此功能}
 37 
 38                             *v_Y*
(关于 {Visual} 见
 40             |Visual-mode|)。{Vi 无此功能}
 41 
 42                             *:y* *:yank* *E850*
[到寄存器 x]。仅当包含
+ 寄存器。
 45 
[x] {count}
(缺省: 当前行
[到寄存器 x] 49 
 50                             *p* *put* *E353*
[count] 次。{Vi: 没有
 52             计数}
 53 
 54                             *P*
[count] 次。{Vi: 没有
 56             计数}
 57 
<MiddleMouse>*
[count] 次。除非另外指
 61             光标停留在新文本的尾部。
 'mouse' 包含 'n' 或者 'a' 时鼠标才会工作。
 63             {Vi 无此功能}
 64             如果你有滚轮鼠标而且经常不小心粘贴了文本,你可以使用以
 65             下映射来关闭鼠标中键粘贴的功能: >
<Nop>
<Nop>
 68 <           你也许还想要关闭多键击的功能。参见 |double-click|。
 69 
 70                             *gp*
,但光标停留在新文本之后。{Vi 无此功能}
 72 
 73                             *gP*
,但光标停留在新文本之后。{Vi 无此功能}
 75 
 76                             *:pu* *:put*
(缺省为当前行) 78             后。它总是 |linewise| 行动作,因而这个命令可以用来把抽
 79             出的块放置在新行上。
 'cb' 包含
,则从 + 寄存器 |quoteplus| 取出,否则如
,则从 * 寄存器 |quotestar| 取
 83             出,否则,从无名寄存器 |quote_quote| 取出。
=',跟随一个可选的表达式。表达式继续到
' 字符前加上反斜杠不
 86             让它们终止你的命令行。例如: >

 88 <           如果 '=' 之后没有表达式,Vim 使用前一个表达式。用
 你可以看到它。
 90 
(缺省为当前行) 92             前。
 93 
*
 'mouse' 包含 'n'
 96             或者 'a' 时鼠标才会工作。{Vi 无此功能}
 97 
[P          或                  *[P*
P*
<MiddleMouse>*
 'mouse' 包含 'n'
102             或者 'a' 时鼠标才会工作。{Vi 无此功能}
103 
104 你可以用这些命令把文本从一个地方复制到另一个地方。首先,把文本用抽出、删除或者
105 修改命令取到一个寄存器里,然后用放置命令把寄存器的内容插入。你可以用这些命令把
106 文本从一个文件移动到另一个文件,因为 Vim 在切换缓冲区时保留所有的寄存器
(CTRL-^ 命令可用来快捷地切换文件)108 
109                 *linewise-register* *characterwise-register*
 重复放置命令,你也可以撤销它们。如果保存到寄存器
 或之上
 命令使得

(光标在第一个单词之前的
 命令把光标移动到插入文本之
 把光标移动到文本的开始处。
117 
118                         *put-Visual-mode* *v_p* *v_P*
119 在可视模式下使用如 |p| 或者 |P| 之类的放置命令时,Vim 试图把选择的文本替换成寄
120 存器的内容。是否工作如你所愿决定于选择的类型和寄存器里文本的类型。对于列块选择
(实现细节: 实际上,它
122 先把寄存器的内容放到选择区之后,再删除选择区的内容。)
123 前次选择的文本被放在无名寄存器中。如果希望把相同的文本重复放入可视选择区多次,
124 请选用其它寄存器。例如,先抽出要复制的文本,再可视化选择要替换的文本,然后使用
126 
127                             *blockwise-register*
128 如果你使用面向列块的可视模式命令把文本存到寄存器里,文本列块会被插入在当前和其
。Vim 使得整个文本列块从同一列开始。这
130 样,插入的文本看上去和抽出或删除时看起来一样。为了使之可能,Vim 可能需要把一些
<Tab> 宽度的整数倍并且插入列块
<Tab> 的时候,那些文本可能就不会那么整齐。
133 
134 注意 在一个面向字符的抽出命令之后,Vim 把光标停留在最接近缓冲区开头的第一个被
 把光标向左移一格。
 命令跟一个反向的动作有时不会把光标移动到第一个被
137         抽出的字符之上,因为屏幕没有刷新。Vim 符合 Posix 的规范,总是
138         把光标移动到第一个字符之上。
139 在一个面向行的抽出命令之后,光标放在第一行上,但是列保持不变,所以不必然在第一
140 个抽出的字符上。
141 
142 共有九种类型的寄存器:                   *registers* *E354*









152 

 等抽出命令复制的文本都被 Vim 用来填
。这就好像无名寄存器是指向最
156 近使用的那个寄存器的指针一样。使用大写寄存器进行添加时,无名寄存器包含和命名寄



'}
161 

163                     *quote2* *quote3* *quote4* *quote9*
164 Vim 把抽出和删除命令的文本保存在这些寄存器里。
 指定了别的寄存器。
 指定了别的寄存
(该情况下使用行内删除寄存器)。以下移动命令在应用删除操作
(|、 |)|、|`|、|/|、|?|、|n|、|N|、|{| 和 |}|。这时,总是使用
- 寄存器。
170    每来一次新的删除和修改,Vim 把前一次的寄存器 1 的内容复制到寄存器 2,2 到
171 3,依此类推。而寄存器 9 的内容就丢失了。
172 {Vi: 编号寄存器的内容在更换文件时丢失;寄存器 0 不存在}
173 

 指定了寄存器。
176 {Vi 无此功能}
177 

179 Vim 只有在你指定的时候才使用这些寄存器。指定为小写字母时替换原来的内容,指定为
 'cpoptions' 里有 '>' 标志位,在附加文本前插入
181 一个换行符。
182 
183 

 命令和 CTRL-R 的时候使
186 用它们。{Vi 无此功能}
187                         *quote_.* *quote.* *E29*
(和插入模式命令 CTRL-A 和 CTRL-@ 插入的一
189         样)。注意: 它不适用于 CTRL-R 在命令行上的操作。它的工作方式稍
('textwidth' 和其它选项
191         影响插入的内容)。
192                             *quote_%* *quote%*
194                             *quote_#* *quote#*
196                         *quote_:* *quote:* *E30*
198         令。只有当一个命令行中至少一个字符是键入的,该寄存器才会保存命
199         令行的内容。所以,如果命令行完全来自映射,该寄存器保持不变。
200         {仅当编译时加入 |+cmdline_hist| 特性才有效}
201 

203 其实并没有这么一个寄存器可以储存文本,但是这是用来在使用寄存器的命令中使用表达
204 式的一个方式。表达式寄存器是只读的,你不能把文本放置其中。在 '=' 之后,光标移
(见 |expression|)。所有普通的命令行编辑
206 命令都可以使用,还有一个表达式专门的历史表。当你按回车结束命令行时,Vim 计算表
<Esc> 结束,Vim 终止表达式。如果你不输入表达式,Vim 使用
209 

211 命令而言,浮点数结果也会被转化为字符串。如果结果为列表,每个成员被转成字符串,
(通过 string()213 化)。
214 
<NL> 字符处断开。如果该字符串以
<NL> 结尾,则它被视为一个面向行的寄存器。{Vi 无此功能}
217 

219 用这些寄存器来保存和取得 GUI 界面选择的文本。参见 |quotestar| 和 |quoteplus|。
220 如果剪贴板不存在或者不工作,使用无名寄存器。Unix 上,仅当 |+xterm_clipboard|
221 特性存在时剪贴板才可用。{Vi 无此功能}
222 
+ 在 X11 系统上有分别。关于该差别的解释,参见 |x11-selection|。在
+ 的使用实际上是等价的,可见 |gui-clipboard|。
225 
<Drop>*


230 {仅当编译时加入 |+dnd| 特性才有效,当前只适用于 GTK GUI 版本}
231 
233 

235 当写到这个寄存器时,什么都不会发生。这可以用来删除文本,而不影响任何正常的寄存
236 器。从该寄存器读时,什么都不会返回。{Vi 无此功能}
237 

 'hlsearch' 使用。可以用 `:let` 来修改。你可以
 'hlsearch' 不经过实际的搜索直接高亮某些匹配。你不能把抽出或者删除命
241 令的内容放到该寄存器上。搜索方向则可从 |v:searchforward| 得到。
242 注意 从函数返回时该值被复原 |function-search-undo|。
243 {Vi 无此功能}
244 
245                             *@/*
246 你可以用 `:let` 命令写到一个寄存器 |:let-@|。例如: >

248 
(这也是无名寄存器的内
(该命令显示所有的有
252 
253 下面三个命令总是针对整行工作。
254 
[py] {address}                *:co* *:copy*
[range] 指定的行复制到 {address} 给出的行之下。
257 
258                             *:t*
:t          和 :copy 等价。
260 
[ove] {address}            *:m* *:mo* *:move* *E134*
[range] 指定的行移动到 {address} 给出的行之下。
263 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-13
  • 2021-06-21
  • 2021-12-11
  • 2021-04-04
猜你喜欢
  • 2021-11-14
  • 2022-12-23
  • 2021-12-10
  • 2022-12-23
  • 2022-12-23
  • 2021-10-10
  • 2022-12-23
相关资源
相似解决方案