From ed116d4bb7c8770d40ab90abd5469de458241411 Mon Sep 17 00:00:00 2001 From: asahi Date: Fri, 1 Aug 2025 13:00:19 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E9=98=85=E8=AF=BBvim=20register?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vim/vim.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/vim/vim.md b/vim/vim.md index 5264654..b77cd88 100644 --- a/vim/vim.md +++ b/vim/vim.md @@ -177,3 +177,60 @@ vim支持同时打开多个window,并且,`每一个window都包含了一个b > > 但是,在非图形化系统(如通过ssh访问服务器),此时在服务端未提供图形支持的前提下,可以使用vim tab来实现多tab打开。 +## Registers +### Register Types +vim中拥有如下10中register类型: +- `unnamed register`: `""` +- `numbered register`: `"0-9` +- `small delete register`: `"-` +- `named register`: `"a-z` +- `read only register`: `":`, `".`, `"%` +- `alternate file register`: `"#` +- `expression register`: `"=` +- `selection register`: `"*`, `"+` +- `black hole register`: `"_` +- `last search pattern register`: `"/` + +### register operators +在使用register之前,必须通过操作向register中存储值。可以通过如下操作向register中存值: +- `y`: `yank(copy)` +- `c`: `delete text and start isnert mode` +- `d`: `delete text` + +通常,在操作删除文本时,都会将文本保存在register中。 + +为了粘贴存储在register中的文本,可以使用如下方式: +- `p`: 在cursor之后粘贴文本内容 +- `P`: 在cursor之前粘贴文本内容 + +`p`和`P`都接收一个`count`和`register symbol`作为参数,例如, +- `10p`: 将register中的文本粘贴10次 +- `"ap`: 从`register a`中粘贴文本 +- `10"ap`:从`register a`中获取文本并粘贴10次 + +### Calling register from insert mode +当处于insert mode,并且需要从指定register中粘贴时,可以使用如下方式: +- `Ctrl + R a`:其会将`register a`中的内容粘贴到cursor之后 + +### unnamed register +在unnamed register中,存储着最后一次`delete`, `yank`, `change`的内容,可以通过`""p`。 + +如果做了多次yank/delete/change操作,那么新操作的text会自动覆盖旧操作的text。 + +默认情况下,`p/P`命令会默认关联unnamed register。 + +### numbered register +numbered register会自动按照升序对其自身进行填充,存在两种不同类型的numbered register, +- `yanked register`: `0` +- `numbered register 1-9`: `1-9` + +#### yanked register +如果通过`yy`进行了整行复制,那么vim实际会将文本保存在两个regiser中: +- unnamed register:通过`p`粘贴 +- yanked register:通过`"0p`粘贴 + +`当之后再次yank一个不同text时,vim会对yanked register和unnamed register都随之变化。` + +除了yank之外的操作都不会被存储到register 0。`故而,即使yank操作后发生了delete/change操作,register 0中的内容也不会被修改`。 + +当处于insert mode时,可以通过`ctrl + R 0`来快速粘贴register 0中的内容。