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
相关文章: