doc: 阅读vim register文档
This commit is contained in:
107
vim/vim.md
107
vim/vim.md
@@ -234,3 +234,110 @@ numbered register会自动按照升序对其自身进行填充,存在两种不
|
||||
除了yank之外的操作都不会被存储到register 0。`故而,即使yank操作后发生了delete/change操作,register 0中的内容也不会被修改`。
|
||||
|
||||
当处于insert mode时,可以通过`ctrl + R 0`来快速粘贴register 0中的内容。
|
||||
|
||||
#### non-zero numbered register
|
||||
当change/delete长度超过1行的文本时,该文本将会被存储在non-zero numbered register中,按照`most-recent`的顺序存储在`1-9`寄存器中。
|
||||
|
||||
> 其中,`长度超过一行`可以指`文本未包含完整的某一行,但是出现跨行`的场景,示例如下
|
||||
>
|
||||
> ```
|
||||
> 111
|
||||
> 222
|
||||
> # 选中范围为第一行末尾的`11`和第二行开头的`2`,此时对选中内容
|
||||
> 进行change/delete,选中文本仍然会包含在non-zero register中
|
||||
> ```
|
||||
>
|
||||
> 但是,如果选中内容位于同一行,并且不包含完整行,那么change/delete内容不会填充到non-zero numbered register中
|
||||
|
||||
例如,
|
||||
```
|
||||
111
|
||||
222
|
||||
```
|
||||
上述对第一行`111`内容进行删除后,`111`文本将会被包含在`register 1`中。
|
||||
|
||||
再次针对`222`调用`dd`删除后,non-zero numbered registers内容如下:
|
||||
- `register 1`: 包含内容为`222`
|
||||
- `register 2 `: 包含内容为`111`
|
||||
|
||||
##### `.`
|
||||
当使用`"1p`粘贴完register 1中的内容时,直接多次调用`.`其会自动粘贴`"2`,`"3`,`"4`寄存器中的内容。
|
||||
|
||||
如果从`"5p`开始粘贴,调用`.`后,其会自动粘贴`"6p`。
|
||||
|
||||
对于`small deletion`(例如`dw`或`cw`),其并不会被存储到numbered register中,而是会被存储到small deletion register(`"-`)中。
|
||||
|
||||
### small deletion register
|
||||
对于小于一行的deletion或change,其并不会被存储在numbered registers中,而是会被存储在small deletion register(`"-`)中
|
||||
|
||||
例如,
|
||||
- `diw`
|
||||
- `ciw`
|
||||
|
||||
### named register
|
||||
named register是vim中最通用的register,其可以针对yank/change/delete的text进行存储,其范围为`a-z`。
|
||||
|
||||
named register和前面介绍的registers不同,named register并不会被自动存储,而是需要手动指定存储的named register。
|
||||
|
||||
例如,需要将文本存储到`register a`,需要执行如下命令`"ayiw`:
|
||||
- 其中`"a`告知vim将内容存储到`"a`寄存器中
|
||||
- `yiw`用于复制word
|
||||
|
||||
如果需要获取register a中的内容,可以通过`"ap`命令。
|
||||
|
||||
#### append to named register
|
||||
如果,想要对named register中的内容进行新增而不是完全替换,可以使用如下方式:
|
||||
- register a中已经存在内容“hello”
|
||||
- 想要添加“world”到register a中,可以调用`"Ayiw`
|
||||
|
||||
此时,register a中的内容将会变为`helloworld`,而不是被替换为`world`
|
||||
|
||||
### read-only register
|
||||
vim中含有3个read-only register:
|
||||
- `.`:存储了最后插入的文本(处于insert modez最后入的内容)
|
||||
- `:`:存储了上次执行的命令
|
||||
- `%`:存储了当前文件名称(绝对路径)
|
||||
|
||||
### alternate file register
|
||||
alternate file代表最后打开的文件,`alternate file register`代表最后打开文件的名称。
|
||||
|
||||
### expression register
|
||||
vim中拥有expression register,并可以通过`"=`来执行表达式。
|
||||
|
||||
例如,执行表达式`1 + 1`,可以进行如下操作`"=1+1<Enter>p`
|
||||
- 其会执行`1+1`的运算
|
||||
- `p`则是会拿到运算结果
|
||||
|
||||
在insert mode下,则是可以通过`Ctrl-r =1+1`来执行表达式。
|
||||
|
||||
expression register还支持获取其他寄存器的值,示例如下
|
||||
`"=@a<Enter>p`可以获取register a的值。
|
||||
|
||||
在insert mode下,`Ctrl-r =@a`也可以获取register a的值。
|
||||
|
||||
### selection register
|
||||
通过selection register,可以从外系统中粘贴文本。
|
||||
|
||||
vim中拥有两种selection register:`*`, `+`。当在vim之外的程序(例如chrome browser)中复制文本时,并不能直接通过`p`在vim中粘贴。但是,vim的`"*`和`"+`会和系统的剪切板相关联,可以通过`"+p`和`"*p`来粘贴外部程序中复制的文本。
|
||||
|
||||
同样的,如果通过`"+yiw`和`"*yiw`来复制内容,那么复制的内容可以在外部程序中进行粘贴。(需要启用`+clipboard`选项)
|
||||
|
||||
如果想要直接通过`p`来粘贴外部程序中复制的内容,可以通过在`.vimrc`中添加如下配置:
|
||||
```
|
||||
set clipboard=unnamed
|
||||
```
|
||||
|
||||
### black hole register
|
||||
每次当对文本进行delete/change时,文本都会自动保存在vim的寄存器中。如果,此次操作不想保存任何内容到寄存器中,可以使用black hole register `"_`。
|
||||
|
||||
例如,想要删除行但是不保存到任何寄存器中,可以使用`"_dd`。
|
||||
|
||||
black hole register类似于`/dev/null`
|
||||
|
||||
### last search register
|
||||
如果想要对最后搜索的内容(通过`/`或`?`进行搜索)进行粘贴,可以使用last search register(`"/`)。
|
||||
|
||||
如果想要对最后搜索的内容进行粘贴,可以使用`"/p`,insert mode模式下可以使用`Ctrl-r /`。
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user