diff --git a/README.md b/README.md index 02419f2..96ab66c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ [![掘金翻译计划](https://rawgit.com/aleen42/badges/master/src/juejin_translation.svg)](https://github.com/xitu/gold-miner/) -<<<<<<< HEAD > Vim from zero to hero - Vim 从入门到精通 - 原文地址:https://github.com/mhinz/vim-galore @@ -333,11 +332,7 @@ Vim 是一个文本编辑器。每次文本都是作为**缓冲区**的一部分 :h 05.3 ## 快捷键前缀 -"Leader" 键是一个触发器,默认为 `\\`。我们可以通过在 `map` 中调用 `` 来为 `` 键设置映射 -======= -## 使用 Leader 键 -"Leader" 键是一个触发器,默认为 \\。我们可以通过在 `map` 中调用 `` 来为 `` 键设置映射 ->>>>>>> Update before ##Completion. Addressed comments before +快捷键前缀(Leader 键)是一个触发器,默认为 \\。我们可以通过在 `map` 中调用 `` 来为它设置映射 ```vim nnoremap h :helpgrep @@ -456,9 +451,9 @@ Vim 为我们提供了如下的寄存器: | 标注 | 设置者 | 使用 | | ---- | ------ | ---- | -| `a` - `z` | 用户 | 仅对当前的一个文件生效,也就意味着只可以在当前文件中跳转 | -| `A` - `Z` | 用户 | 全局标注,可以作用于不同文件。大写标注也称为"文件标注"。跳转时有可能会切换到另一个缓冲区 | -| `0` - `9` | viminfo | `0` 代表 viminfo 最后一次被写入的位置。实际使用中,就代表 Vim 进程最后一次结束的位置。`1` 代表 Vim 进程倒数第二次结束的位置,以此类推 | +| `a`-`z` | 用户 | 仅对当前的一个文件生效,也就意味着只可以在当前文件中跳转 | +| `A`-`Z` | 用户 | 全局标注,可以作用于不同文件。大写标注也称为"文件标注"。跳转时有可能会切换到另一个缓冲区 | +| `0`-`9` | viminfo | `0` 代表 viminfo 最后一次被写入的位置。实际使用中,就代表 Vim 进程最后一次结束的位置。`1` 代表 Vim 进程倒数第二次结束的位置,以此类推 | 如果想跳转到指定的标注,你可以先按下 `'`、`g'`、`\`` 或 `g\`` 然后按下标注名 @@ -485,6 +480,40 @@ Vim 为我们提供了如下的寄存器: 标注也可以搭配 [范围](#范围) 一起使用。前面提到过,如果你在可视模式下选取一些文本,然后按下 `:`,这时候你会发现命令行已经被填充了 `:'<,'>`。对照上面的表格,现在你应该明白了,这段代表的就是可视模式下选取的范围 +## 补全 +Vim 在插入模式中为我们提供了多种补全方案。如果有多个补全结果,Vim 会弹出一个菜单供你选择。 + +常见的补全有标签、项目中引入的模块或库中的方法名、文件名、字典及当前缓冲区的字段。 + +针对不同的补全方案,Vim 为我们提供了不同的按键映射。这些映射都是在**插入模式中**通过 Ctrl + x 来触发: + +| 映射 | 类型 | 帮助文档 | +| ---- | ---- | -------- | +| `` | 整行 | `:h i^x^l` | +| `` | 当前文件中的关键字 | `:h i^x^n` | +| `` | 字典中的关键字 | `:h i^x^k` | +| `` | 同义词字典中的关键字 | `:h i^x^t` | +| `` | 当前文件以及包含的文件中的关键字 | `:h i^x^i` | +| `` | 标签 | `:h i^x^]` | +| `` | 文件名 | `:h i^x^f` | +| `` | 定义或宏定义 | `:h i^x^d` | +| `` | Vim 命令 | `:h i^x^v` | +| `` | 用户自定义补全(通过 `'completefunc'` 定义) | `:h i^x^u` | +| `` | Omni Completion(通过 `'omnifunc'` 定义) | `:h i^x^o` | +| `s` | 拼写建议 | `:h i^Xs` | + +尽管用户自定义补全与 Omni Completion 是不同的,但他们做的事情基本一致。共同点在于,他们都是一个监听当前光标位置的函数,返回值为一系列的补全建议。用户自定义补全是由用户定义的,基于用户的个人用途,因此你可以根据自己的喜好和需求随意定制。而 Omni Completion 是针对文件类型的补全,比如补全一个结构体(struct)的成员(members),或者补全一个类的方法,因而它通常都是由文件类型插件设置和调用的。 + +如果你设置了 `'complete'` 选项,那么你就可以在一次操作中采用多种补全方案。这个选项默认包含了多种可能性,因此请按照自己的需求来配置。你可以通过 `` 来调用下一个补全建议,或通过 `` 来调用上一个补全建议。当然,这两个映射同样可以直接调用补全函数。请参阅 `:h i^n` 与 `:h 'complete'` 来获得更多帮助。 + +如果你想配置弹出菜单的行为,请一定要看一看 `:h 'completeopt'` 这篇帮助文档。默认的配置已经不错了,但我个人(原作者)更倾向于把 "noselect" 加上。 + +请参阅以下文档获取更多帮助: +```vim +:h ins-completion +:h popupmenu-keys +:h new-omni-completion +```