From 3367ea9f90bac822916df029d6647a592387be98 Mon Sep 17 00:00:00 2001 From: S1ngS1ng Date: Sun, 26 Mar 2017 18:51:16 -0500 Subject: [PATCH] Addressed comments --- README.md | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index c2b8a6f..56dad1d 100644 --- a/README.md +++ b/README.md @@ -339,7 +339,7 @@ Vim 是一个文本编辑器。每次文本都是作为**缓冲区**的一部分 nnoremap h :helpgrep ``` -这样,我们只需要先按 \\ 然后按 h 就可以执行 `:helpgrep` 了。如果你想通过先按 空格 键来触发,只需要这样做: +这样,我们只需要先按 \\ 然后连续按 \\h 就可以激活这个映射 `:helpgrep`。如果你想通过先按 空格 键来触发,只需要这样做: ```vim let mapleader = ' ' @@ -348,7 +348,7 @@ nnoremap h :helpgrep 另外,还有一个叫 `` 的,可以把它理解为局部环境中的 ``,默认值依然为 \\。当我们需要只对某一个条件下(比如,特定文件类型的插件)的缓冲区设置特别的 `` 键,那么我们就可以通过修改当前环境下的 `` 来实现。 -**注意**:如果你打算设置 Leader 键,请确保在设置按键映射之前,先设置好 Leader 键。如果你先设置了含有 Leader 键的映射,然后又修改了 Leader 键,那么之前映射的 Leader 键是不会因此而改变的。你可以通过执行 `:nmap ` 来查看普通模式中已绑定给 Leader 键的所有映射。 +**注意**:如果你打算设置 Leader 键,请确保在设置按键映射之前,先设置好 Leader 键。如果你先设置了含有 Leader 键的映射,然后又修改了 Leader 键,那么之前映射内的 Leader 键是不会因此而改变的。你可以通过执行 `:nmap ` 来查看普通模式中已绑定给 Leader 键的所有映射。 请参阅 `:h mapleader` 与 `:h maploacalleader` 来获取更多帮助。 @@ -362,14 +362,14 @@ Vim 为我们提供了如下的寄存器: | ---- | ---- | ------ | ---------- | -------------- | | Unnamed | `"` | vim | 否 | 最近一次的复制或删除操作 (`d`, `c`, `s`, `x`, `y`) | | Numbered | `0`至`9` | vim | 否 | 寄存器 `0`: 最近一次复制。寄存器 `1`: 最近一次删除。寄存器 `2`: 倒数第二次删除,以此类推。对于寄存器 `1` 至 `9`,他们其实是只读的最多包含 9 个元素的队列。这里的队列即为数据类型 [queue](https://en.wikipedia.org/wiki/Queue_(abstract_data_type)) | -| Small delete | `-` | vim | 否 | 最近一次,内容在一行以内的删除 | +| Small delete | `-` | vim | 否 | 最近一次行内删除 | | Named | `a`至`z`, `A`至`Z` | 用户 | 否 | 如果你通过复制操作存储文本至寄存器 `a`,那么 `a` 中的文本就会被完全覆盖。如果你存储至 `A`,那么会将文本添加给寄存器 `a`,不会覆盖之前已有的文本 | | Read-only | `:`与`.`和`%` | vim | 是 | `:`: 最近一次使用的命令,`.`: 最近一次添加的文本,`%`: 当前的文件名 | | Alternate buffer | `#` | vim | 否 | 大部分情况下,这个寄存器是当前窗口中,上一次访问的缓冲区。请参阅 `:h alternate-file` 来获取更多帮助 | | Expression | `=` | 用户 | 否 | 复制 VimL 代码时,这个寄存器用于存储代码片段的执行结果。比如,在插入模式下复制 `=5+5`,那么这个寄存器就会存入 10 | | Selection | `+`和`*` | vim | 否 | `*` 和 `+` 是 [剪贴板](#剪贴板) 寄存器 | | Drop | `~` | vim | 是 | 存储最近一次添加进 Vim 中的文本 | -| Black hole | `_` | vim | 否 | 对于当前操作,如果你不希望在其他寄存器中保留文本,那就在命令前加上 `_`。比如,`"_dd` 命令不会将文本放到寄存器 `"`、`1`、`+` 或 `*` 中 | +| Black hole | `_` | vim | 否 | 一般称为黑洞寄存器。对于当前操作,如果你不希望在其他寄存器中保留文本,那就在命令前加上 `_`。比如,`"_dd` 命令不会将文本放到寄存器 `"`、`1`、`+` 或 `*` 中 | | Last search pattern | `/` | vim | 否 | 最近一次通过 `/`、`?` 或 `:global` 等命令调用的匹配条件 | 只要不是只读的寄存器,用户都有权限修改它的内容,比如: @@ -406,7 +406,7 @@ Vim 为我们提供了如下的寄存器: - 范围可以是一个行号,用于指定某一行 - 范围也可以是一对通过 `,` 或 `;` 分割的行号 - 大部分命令,默认只作用于当前行 -- 只有 `:white` 和 `:global` 是默认作用于所有行的 +- 只有 `:write` 和 `:global` 是默认作用于所有行的 范围的使用是十分直观的。以下为一些例子(其中,`:d` 为 `:delete` 的缩写): @@ -419,7 +419,7 @@ Vim 为我们提供了如下的寄存器: | `:1,$d` | 所有行 | | `:%d` | 所有行(这是 `1,$` 的语法糖) | | `:.,5d` | 当前行至第 5 行 | -| `:,5d` | 当前行至第 5 行 | +| `:,5d` | 同样是当前行至第 5 行 | | `:,+3d` | 当前行及接下来的 3 行 | | `:1,+3d` | 第一行至当前行再加 3 行 | | `:,-3d` | 当前行及向上的 3 行(Vim 会弹出提示信息,因为这是一个保留的范围) | @@ -439,7 +439,7 @@ Vim 为我们提供了如下的寄存器: 有时,Vim 会在命令前自动添加范围。举个例子,如果你先通过 `V` 命令进入行选取模式,选中一些行后按下 `:` 进入命令模式,这时候你会发现 Vim 自动添加了 `'<,'>` 范围。这表示,接下来的命令会使用之前选取的行号作为范围。但如果后续命令不支持范围,Vim 就会报错。为了避免这样的情况发生,有些人会设置这样的按键映射:`:vnoremap foo :command`,组合键 Ctrl + u 可以清除当前命令行中的内容。 -另一个例子是在普通模式中按下 `!!`,命令行中会出现 `:.!`。如果这时你如果输入一个外部命令,那么当前行的内容就会被这个外部命令的输出替换。你也可以通过命令 `:?^$?+1,/^$/-1!ls` 把当前段落的内容替换成外部命令 `ls` 的输出。 +另一个例子是在普通模式中按下 `!!`,命令行中会出现 `:.!`。如果这时你如果输入一个外部命令,那么当前行的内容就会被这个外部命令的输出替换。你也可以通过命令 `:?^$?+1,/^$/-1!ls` 把当前段落的内容替换成外部命令 `ls` 的输出,原理是向前和向后各搜索一个空白行,删除这两个空白行之间的内容,并将外部命令 `ls` 的输出放到这两个空白行之间。 请参阅以下两个命令来获取更多帮助: @@ -450,7 +450,7 @@ Vim 为我们提供了如下的寄存器: ## 标注 -你可以使用标注功能来标记一个位置,也就是在文件中标记某一个行号或某行的某个位置。 +你可以使用标注功能来标记一个位置,也就是记录文件某行的某个位置。 | 标注 | 设置者 | 使用 | | ---- | ------ | ---- | @@ -483,6 +483,8 @@ Vim 为我们提供了如下的寄存器: 标注也可以搭配 [范围](#范围) 一起使用。前面提到过,如果你在可视模式下选取一些文本,然后按下 `:`,这时候你会发现命令行已经被填充了 `:'<,'>`。对照上面的表格,现在你应该明白了,这段代表的就是可视模式下选取的范围。 +请使用 `:marks` 命令来显示所有的标注,参阅 `:h mark-motions` 来获取关于标注的更多帮助。 + ## 补全 Vim 在插入模式中为我们提供了多种补全方案。如果有多个补全结果,Vim 会弹出一个菜单供你选择。 @@ -495,8 +497,8 @@ Vim 在插入模式中为我们提供了多种补全方案。如果有多个补 | ---- | ---- | -------- | | `` | 整行 | `:h i^x^l` | | `` | 当前文件中的关键字 | `:h i^x^n` | -| `` | 字典中的关键字 | `:h i^x^k` | -| `` | 同义词字典中的关键字 | `:h i^x^t` | +| `` | 字典(请参阅 `:h 'dictionary'`)中的关键字 | `:h i^x^k` | +| `` | 同义词字典(请参阅 `:h 'thesaurus'`)中的关键字 | `:h i^x^t` | | `` | 当前文件以及包含的文件中的关键字 | `:h i^x^i` | | `` | 标签 | `:h i^x^]` | | `` | 文件名 | `:h i^x^f` | @@ -537,7 +539,7 @@ Vim 在插入模式中为我们提供了多种补全方案。如果有多个补 文本对象操作一般用 `i` 或 `a` 加上对象标识符操作,其中 `i` 表示在对象内(英文 inner)操作,`a` 表示对整个对象(英文 around)操作,这时开头和结尾的空格都会被考虑进来。举个例子,`diw` 可以删除当前单词,`ci(` 可以改变括号中的内容。 -文本对象同样可以与数字搭配使用。比如,像 `((( )))` 这样的文本,假如光标位于最内层的括号上或最内层的括号内,那么 `d2a(` 将会删除从最内层开始的两对括号,以及他们之间的所有内容。 +文本对象同样可以与数字搭配使用。比如,像 `((( )))` 这样的文本,假如光标位于最内层的括号上或最内层的括号内,那么 `d2a(` 将会删除从最内层开始的两对括号,以及他们之间的所有内容。其实,`d2a(` 这个操作等同于 `2da(`。在 Vim 的命令中,如果有两处都可以接收数字作为参数,那么最终结果就等同于两个数字相乘。在这里,`d` 与 `a(` 都是可以接收参数的,一个参数是 1,另一个是 2,我们可以把它们相乘然后放到最前面。 请参阅 `:h text-objects` 来获取更多关于文本对象的帮助。 @@ -545,7 +547,7 @@ Vim 在插入模式中为我们提供了多种补全方案。如果有多个补 在特定的情况下,Vim 会传出事件。如果你想针对这些事件执行回调方法,那么就需要用到自动命令这个功能。 -如果没有了自动命令,那你基本上是用不了 Vim 的。自动命令一直都在执行,只是很多时候你没有注意到。不信的话,你可以执行命令 `:au` 来查看一下当前可以触发的所有自动命令,是不是有很多? +如果没有了自动命令,那你基本上是用不了 Vim 的。自动命令一直都在执行,只是很多时候你没有注意到。不信的话,可以执行命令 `:au` ,不要被结果吓到,这些是当前有效的所有自动命令。 请使用 `:h {event}` 来查看 Vim 中所有事件的列表,你也可以参考 `:h autocmd-events-abc` 来获取关于事件的更多帮助。 @@ -559,7 +561,7 @@ autocmd FileType ruby setlocal shiftwidth=2 softtabstop=2 comments-=:# 在配置 vimrc 的时候,一般第一行加进去的就是 `filetype on`。这就意味着,Vim 启动时会读取 `filetype.vim` 文件,然后根据文件类型来触发相应的自动命令。 -如果你有兴趣,可以执行一下 `:e $VIMRUNTIME/filetype.vim`,然后在输出中搜索 "Ruby"。这样,你就会发现其实 Vim 只是通过文件扩展名 `.rb` 判断某个文件是不是 Ruby 的。 +如果你勇于尝试,可以查看下 `:e $VIMRUNTIME/filetype.vim`,然后在输出中搜索 "Ruby"。这样,你就会发现其实 Vim 只是通过文件扩展名 `.rb` 判断某个文件是不是 Ruby 的。 **注意**:对于相同事件,如果有多个自动命令,那么自动命令会按照定义时的顺序执行。通过 `:au` 就可以查看它们的执行顺序。 @@ -577,7 +579,7 @@ au BufNewFile,BufRead *.rb,*.rbw setf ruby 在 Vim 中,用户最近 100 次的文字改动都会被保存在**变更历史**中。如果在同一行有多个小改动,那么 Vim 会把它们合并成一个。尽管内容改动会合并,但作用的位置还是会只记录下最后一次改动的位置。 -在你移动光标或跳转的时候,每一次的移动或跳转前的位置会被记录到**跳转历史**中。类似地,跳转历史也可以最多保存 100 条记录。对于每个窗口,跳转记录是独立的。但当你用 `split` 命令分离窗口时,跳转历史会被复制过去。 +在你移动光标或跳转的时候,每一次的移动或跳转前的位置会被记录到**跳转历史**中。类似地,跳转历史也可以最多保存 100 条记录。对于每个窗口,跳转记录是独立的。但当你分离窗口时(比如使用 `:split` 命令),跳转历史会被复制过去。 Vim 中的跳转命令,包括 `'`、`` ` ``、`G`、`/`、`?`、`n`、`N`、`%`、`(`、`)`、`[[`、`]]`、`{`、`}`、`:s`、`:tag`、`L`、`M`、`H` 以及开始编辑一个新文件的命令。 @@ -590,7 +592,7 @@ Vim 中的跳转命令,包括 `'`、`` ` ``、`G`、`/`、`?`、`n`、`N`、`% 如果你希望关闭 Vim 之后还保留这些条目,请参阅 `:h viminfo-'` 来获取更多帮助。 -**注意**:上面提到过,最后一次跳转前的位置也会记录在[标注](#标注)中,也可以通过 \`\` 或 `''` 跳转到那个位置 +**注意**:上面提到过,最后一次跳转前的位置也会记录在[标注](#标注)中,也可以通过连按 \`\`'' 跳转到那个位置 请参阅以下两个命令来获取更多帮助: @@ -603,7 +605,7 @@ Vim 中的跳转命令,包括 `'`、`` ` ``、`G`、`/`、`?`、`n`、`N`、`% Vim 会记录文本改变之前的状态。因此,你可以使用"撤销"操作 u 来取消更改,也可以通过"重做"操作 Ctrl + r 来恢复更改。 -值得注意的是,Vim 采用 [tree](https://en.wikipedia.org/wiki/Tree_(data_structure)) 数据结构来存储内容变更的历史记录,而不是采用 [queue](https://en.wikipedia.org/wiki/Queue_(abstract_data_type))。你的每次改动都会成为存储为树的节点。而且,除了第一次改动(根节点),之后的每次改动都可以找到一个对应的父节点。每一个节点都会记录改动的内容和时间。其中,"分支" 代表从任一节点到根节点的路径。当你进行了撤销操作,然后又输入了新的内容,这时候就相当于创建了分支。 +值得注意的是,Vim 采用 [tree](https://en.wikipedia.org/wiki/Tree_(data_structure)) 数据结构来存储内容变更的历史记录,而不是采用 [queue](https://en.wikipedia.org/wiki/Queue_(abstract_data_type))。你的每次改动都会成为存储为树的节点。而且,除了第一次改动(根节点),之后的每次改动都可以找到一个对应的父节点。每一个节点都会记录改动的内容和时间。其中,"分支" 代表从任一节点到根节点的路径。当你进行了撤销操作,然后又输入了新的内容,这时候就相当于创建了分支。这个原理和 git 中的 branch(分支)十分类似。 考虑以下这一系列按键操作: @@ -641,9 +643,9 @@ baz(3) quux(4) | `[count]g-` 或 `:earlier [count]?` | 根据时间回退到 `[count]` 次改动之前。"?" 为 "s"、"m"、"h"、"d" 或 "f"之一。例如,`:earlier 2d` 会回退到两天之前。`:earlier 1f` 则会回退到最近一次文件保存时的内容 | | `[count]g+` 或 `:later [count]?` | 类似 `g-`,但方向相反 | -内容变更记录会储存在内存中,当 Vim 退出时就会清空。详情请参阅本文[备份文件,交换文件,撤销文件以及viminfo文件的处理](#备份文件交换文件撤销文件以及viminfo文件的处理)章节的内容。 +内容变更记录会储存在内存中,当 Vim 退出时就会清空。如果需要持久化存储内容变更记录,请参阅[备份文件,交换文件,撤销文件以及viminfo文件的处理](#备份文件交换文件撤销文件以及viminfo文件的处理)章节的内容。 -如果你觉得这一部分的内容难以理解,请参阅 [undotree](https://github.com/mbbill/undotree)。链接中的内容是这个树形结构的可视化版本。 +如果你觉得这一部分的内容难以理解,请参阅 [undotree](https://github.com/mbbill/undotree),这是一个可视化管理内容变更历史记录的插件。类似的还有 [vim-mundo](https://github.com/simnalamburt/vim-mundo)。 请参阅以下链接获取更多帮助: @@ -654,7 +656,7 @@ baz(3) quux(4) ## 全局位置信息表,局部位置信息表 -在某一个动作返回"位置"的时候,我们可以利用"全局位置信息表"和"局部位置信息表"来获取位置。位置可以是一个文件,一个行号或者是一个列。 +在某一个动作返回一系列"位置"的时候,我们可以利用"全局位置信息表"和"局部位置信息表"来存储这些位置信息,方便以后跳转回对应的位置。每一个存储的位置包括文件名、行号和列号。 比如,编译代码是出现错误,这时候我们就可以把错误的位置直接显示在全局位置信息表,或者通过外部抓取工具使位置显示在局部位置信息表中。