diff --git a/content.md b/content.md
index 479588b..063d59a 100644
--- a/content.md
+++ b/content.md
@@ -1,6 +1,4 @@
-# VimL 语言编程指北路
-
-## 初稿目录
+# 《VimL 语言编程指北路》目录
+ [前言 ](z/20170816_1.md)
diff --git a/index.html b/index.html
index 9a43d8b..15156b8 100644
--- a/index.html
+++ b/index.html
@@ -3,7 +3,7 @@
-
+
VimL 语言编程指北路
diff --git a/readme.md b/readme.md
index dd4f1d7..6b79d72 100644
--- a/readme.md
+++ b/readme.md
@@ -6,7 +6,7 @@
全书正文分十章,约摸可再划分为基础篇、中级篇与高级篇三部分,现已完成初稿。后面
有可以计划再补上番外实战篇,写几章开发具体插件实例的实现思路。
-[进入目录](./content.md)
+[目录 content.md](./content.md)
初稿在本地我用自己的笔记插件 [vnote](https://github.com/lymslive/vnote) 写的,
保存在笔记本 [notebook](https://github.com/lymslive/notebook)。
@@ -24,8 +24,8 @@ vim8.1 版本测试,Windows 与低版本虽未全面测试,但相信 vim 本
。允许按常规开源库一样 fork ,如有兴趣也可提 issue 讨论或 pr 。
阿里云备用网页阅读地址:
-[http://lymslive.top/book/vimllearn/vm.cgi?p=content](http://lymslive.top/book/vimllearn/vm.cgi?p=content)
-。该个人网站的文章目前纯粹只读,不想管理留言与评论。
+[http://lymslive.top/book/vimllearn/](http://lymslive.top/book/vimllearn/)
+,系用 gitbook 编译的书籍格式。
版权声明:基于 MIT 开源协议。允许自由扩散,以及援用部分段落解说与示例代码。但
不允许将整书或整章节用于商业出版。笔者本人保留将来联系出版社以传统纸媒出版的权
diff --git a/z/20170816_1.md b/z/20170816_1.md
index 8bbb551..d765ba6 100644
--- a/z/20170816_1.md
+++ b/z/20170816_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》前言
-`+` `book/vimllearn`
+# 前言
这是一篇有关 Vim 脚本语言的入门与进阶教程。是“指北”,不是“指南”,所以如果不慎
指错了路,切勿见怪。不过要相信地球是圆的,绕了一圈之后,希望还是能找对目标的。
diff --git a/z/20170816_2.md b/z/20170816_2.md
index 41339b4..a18a665 100644
--- a/z/20170816_2.md
+++ b/z/20170816_2.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第一章 VimL 语言主要特点
-`+` `book/vimllearn`
+# 第一章 VimL 语言主要特点
## 1.1 Hello World 的四种写法
@@ -193,6 +192,8 @@ VimL 语言就是基于 `ex` 命令的,再加上一些流程控制,就成了
向,也可以不增加可视化而偏向自动化。依每人的性格习惯不同,可能会在 Vim 的可视
化与自动化之间找到适合自己的不同的平衡点。
+
diff --git a/z/20170816_3.md b/z/20170816_3.md
index f3687aa..8c8bfef 100644
--- a/z/20170816_3.md
+++ b/z/20170816_3.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第一章 VimL 语言主要特点
-`+` `book/vimllearn`
+# 第一章 VimL 语言主要特点
## 1.2 同源 ex 命令行
@@ -92,7 +91,7 @@ vim 仍处于编辑 `helloworld.txt` 状态中。
:q
$ vim -u vimrc.vim helloworld.txt
```
-可见,重新打开 `helloworld.txt` 文件后也自动设置了行号与折行。你可以换行这个参
+可见,重新打开 `helloworld.txt` 文件后也自动设置了行号与折行。你可以换这个参
数启动 vim 对比下效果,确认是 `vimrc.vim` 的功效:
```bash
$ vim -u NONE helloworld.txt
diff --git a/z/20170816_4.md b/z/20170816_4.md
index e7f429a..f322470 100644
--- a/z/20170816_4.md
+++ b/z/20170816_4.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第一章 VimL 语言主要特点
-`+` `book/vimllearn`
+# 第一章 VimL 语言主要特点
## 1.3 弱类型强作用域
@@ -57,8 +56,8 @@ Vim 作为一个可视化的编辑器,给用户呈现的,能让用户交互
`buffer`(缓冲文件),`window`(窗口),`tabpage`(标签页)。可以把它们想象为
互有关系的容器:
-* 缓冲对应着一个正在编辑中的文件,在不必究的情况下可认为与文件等同。(不过不一
- 定对应着硬盘上的一个文件,比较新建的尚未保存的文件,以及一些特殊缓冲文件)缓
+* 缓冲对应着一个正在编辑中的文件,在不细究的情况下可认为与文件等同。(不过不一
+ 定对应着硬盘上的一个文件,比如新建的尚未保存的文件,以及一些特殊缓冲文件)缓
冲也可认为是容纳着文件中所有文本行的容器,就像是简单的字符串列表了。
* 窗口是用于展示缓冲文件的一部分在屏幕上的容器。Vim 可编辑的文件很大,极有可能
在一个屏幕窗口中无法显示文件的所有内容吧,所以窗口对应于缓冲文件还有个可视范
@@ -82,7 +81,7 @@ Vim 作为一个可视化的编辑器,给用户呈现的,能让用户交互
缓冲文件的变量,要么先用其他命令将目标缓冲文件切换为当前编辑的缓冲文件,或者
调用其他的内置函数来访问。
* 如果一个缓冲文件“消失”了,那么与之关联的所有 `b:` 变量也消失了。
-* 窗口与标签页的“消失”能比较形象与容易地理解,关闭了就算消失了。但 Vim 内容对
+* 窗口与标签页的“消失”能比较形象与容易地理解,关闭了就算消失了。但 Vim 内部对
缓冲的管理比较复杂,未必是从窗口上不见了就代表“消失”了。
* 不过在一般 VimL 编程中,可暂不必深究缓冲文件什么时候“消失”。只要记着一个
`b:` 变量必定与一个缓冲文件关联着,不同的缓冲文件使用相同的 `b:` 变量是安全的,
@@ -171,18 +170,22 @@ echo s:
“消失”呢。而全局变量 `g:x` 或 `x` 是始终能访问的。
最后要指出的是,局部作用域 `l:` 与参数作用域 `a:` 不能像 `s:` 或 `b:` 这样当作
-整数的字典变量,是两个例外。VimL 这样处理的原因,可能一是没必要,二是没效率。
+整体的字典变量,是两个例外。VimL 这样处理的原因,可能一是没必要,二是没效率。
函数体内的局部作用域与参数作用域,太窄,没必要将局部变量另外保存一个字典;而且
有效时间太短,函数在栈上反复重建销毁,额外维护一个字典没有明显好处就不浪费了。
+另外若要表示所有函数参数另有一个语法变量 `a:000` 可实现其功能。
### 其他特殊变量前缀 $ v: &
这几个符号其实并不是作用域标记。不过既然也是变量前缀,也就一道说明一下,也好加
以区分。
-含 `$` 前缀的变量是环境变化。除了 vim 在启动时会从父进程(如 shell)自动继承一
+含 `$` 前缀的变量是环境变量。除了 vim 在启动时会从父进程(如 shell)自动继承一
些环境变量,这些变量在使用上与全局变量没什么区别。不过要谨慎使用,一般建议只读
-,不要随便修改,没必要的话也不要随便创建多余的环境变量。
+,不要随便修改,没必要的话也不要随便创建多余的环境变量。(实际上环境变量与全局
+变量的最大区另是环境变量在 `ex` 命令中会自动展开为当前的具体值,比如可直接使用
+`:e $MYVIMRC` 编辑启动加载的 `vimrc` 文件。但在 VimL 脚本中将环境变量当作全局
+变量使用完全没问题)
含 `v:` 前缀的变量是 vim 内部提供的预定义常量或变量。用户不能增删这类特殊变量
,也不能修改其类型与含义。比如 `v:true` 与 `v:false` 分别用于表示逻辑值“真”与“
@@ -191,6 +194,6 @@ echo s:
。要检查当前 vim 版本是否支持某个 `v:` 变量,只要用 `:help` 命令查阅一下即可。
而且 `v:` 本身也是个字典集合变量,可用 `:echo v:` 命令查看所有这类变量。
-含 `&` 前缀的变量表示选项的,相当于把选项变量化,以便于在 VimL 中编程。所支持
+含 `&` 前缀的变量表示选项的值,相当于把选项变量化,以便于在 VimL 中编程。所支持
的选项集,也是由 Vim 版本决定的,用户当然无法定义与使用不存在的选项。这部分内
容在后面讲选项设置时再行讨论。
diff --git a/z/20170816_5.md b/z/20170816_5.md
index d6be8a8..a31577f 100644
--- a/z/20170816_5.md
+++ b/z/20170816_5.md
@@ -1,10 +1,9 @@
-# 《VimL 语言编程指北路》第一章 VimL 语言主要特点
-`+` `book/vimllearn`
+# 第一章 VimL 语言主要特点
## 1.4\* 自动加载脚本机制
前文已提及,vim 脚本主要用 `:source` 命令加载,然而很多情况下又不需要手动执行
-该命令。只要将脚本放在特定的目录下,vim 就有个机制自动搜寻并加载的机制。
+该命令。只要将脚本放在特定的目录下,vim 就有个机制能自动搜寻并加载。
### Vim 插件搜索目录
@@ -13,7 +12,7 @@
脚本文件的。你可以在命令行输入 `:echo &rtp` 查看当前运行的 vim 有哪些“运行时目
录”,一般都会包含 `~/.vim` 这个目录。
-* 除了 vim 启动是的第一个配置文件 `vimrc`,运行时需要加载的脚本,一般都是从
+* 除了 vim 启动时的第一个配置文件 `vimrc`,运行时需要加载的脚本,一般都是从
`&rtp` 目录列表中搜索的。
* vim 启动时,会在所有 `&rtp` 目录下的 `plugin/` 搜索 `*.vim` 文件,并加载所有
找到的脚本文件。需要注意的是在 `plugin/` 子目录下的所有脚本也会自动加载。除
@@ -32,7 +31,7 @@
### VimL 的自动加载函数(延时加载)
Vim 一直有个追求的目标是启动快。当插件越来越多时,vim 启动时要解析大量的脚本文
-件,就会被拖慢了。这时就出现另一个 `autoload` 自动加载函数的机制,这个巧妙的方
+件,就会被拖慢了。这时就出现了一个 `autoload` 自动加载函数的机制,这个巧妙的方
法可算是 VimL 发展的一个里程碑吧。而在这之前,须由用户在 `plugin/*.vim` 的复杂
脚本中用极具巧妙的编程技巧,才好实现延时加载。
@@ -46,7 +45,7 @@ Vim 一直有个追求的目标是启动快。当插件越来越多时,vim 启
* 在 vim 启动时,完全不会读取 `foo.vim` 文件,也不知道它里面可能定义了什么复杂
的脚本内容。
* 当 `foo#bar()` 第一次被调用时,比如从命令行中执行 `:call foo#bar()`,vim 发
- 现 `foo#bar` 这个函数的定义,就会试图从这个函数名分析出它可能定义于 `foo.vim`
+ 现 `foo#bar` 这个函数未定义,就会试图从这个函数名分析出它可能定义于 `foo.vim`
文件中。然后就从 `&rtp` 目录列表中,依次寻找其中 `autoload/` 子目录的
`foo.vim` 文件。将所找到的第一个 `foo.vim` 脚本加载,并停止继续寻找。如果在
所有 `&rtp` 目录下都找不到,那就是个错误了。
@@ -69,7 +68,7 @@ Vim 一直有个追求的目标是启动快。当插件越来越多时,vim 启
* 函数名 `foo#bar()` 必须与文件名 `foo.vim` 完全一致(大小写也最好一致)。如果
脚本是在 `autoload` 的深层子目录下,那函数名也必须是相对于 `autoload` 的路径
- 名,把路径分隔符 `/` 替换为 `#` 即是。即在 `autoload/path/to/foo.vim` 文件中
+ 名,把路径分隔符 `/` 替换为 `#` 就是。即在 `autoload/path/to/foo.vim` 文件中
定义的函数名应该是 `path#to#foo#bar()`。
* 从使用便利性上,一般是会定义快捷键或命令来调用 `#` 函数,并在首次使用时触发
相关脚本的加载。
diff --git a/z/20170817_1.md b/z/20170817_1.md
index 84a7051..cb7fbc2 100644
--- a/z/20170817_1.md
+++ b/z/20170817_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第二章 VimL 语言基本语法
-`+` `book/vimllearn`
+# 第二章 VimL 语言基本语法
## 2.1 变量与类型
diff --git a/z/20170817_2.md b/z/20170817_2.md
index ad20469..9a6c6d2 100644
--- a/z/20170817_2.md
+++ b/z/20170817_2.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第二章 VimL 语言基本语法
-`+` `book/vimllearn`
+# 第二章 VimL 语言基本语法
## 2.2 选择与比较
diff --git a/z/20170817_3.md b/z/20170817_3.md
index a2c9c40..7fdbbc4 100644
--- a/z/20170817_3.md
+++ b/z/20170817_3.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第二章 VimL 语言基本语法
-`+` `book/vimllearn`
+# 第二章 VimL 语言基本语法
## 2.3 循环与遍历
diff --git a/z/20170817_4.md b/z/20170817_4.md
index 10f2006..5fdd655 100644
--- a/z/20170817_4.md
+++ b/z/20170817_4.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第二章 VimL 语言基本语法
-`+` `book/vimllearn`
+# 第二章 VimL 语言基本语法
## 2.4 函数定义与使用
diff --git a/z/20170817_5.md b/z/20170817_5.md
index 39a0408..745b91d 100644
--- a/z/20170817_5.md
+++ b/z/20170817_5.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第二章 VimL 语言基本语法
-`+` `book/vimllearn`
+# 第二章 VimL 语言基本语法
## 2.5\* 异常处理
diff --git a/z/20170818_1.md b/z/20170818_1.md
index 2bc6c92..8b2e9b9 100644
--- a/z/20170818_1.md
+++ b/z/20170818_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第三章 Vim 常用命令
-`+` `book/vimllearn`
+# 第三章 Vim 常用命令
在第二章已经介绍了 VimL 语言的基本语法,理论上来说,就可以据此写出让 vim 解释
执行的合法脚本了。然而,能写什么的脚本呢?除了打印“Hello World!”,以及高级点的
diff --git a/z/20170818_2.md b/z/20170818_2.md
index 4722432..a641e47 100644
--- a/z/20170818_2.md
+++ b/z/20170818_2.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第三章 Vim 常用命令
-`+` `book/vimllearn`
+# 第三章 Vim 常用命令
## 3.2 快捷键重映射
diff --git a/z/20170818_3.md b/z/20170818_3.md
index 45dfe50..c9d423b 100644
--- a/z/20170818_3.md
+++ b/z/20170818_3.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第三章 Vim 常用命令
-`+` `book/vimllearn`
+# 第三章 Vim 常用命令
## 3.3 自定义命令
diff --git a/z/20170818_4.md b/z/20170818_4.md
index de92c44..28d1fb5 100644
--- a/z/20170818_4.md
+++ b/z/20170818_4.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第三章 Vim 常用命令
-`+` `book/vimllearn`
+# 第三章 Vim 常用命令
## 3.4 execute 与 normal
diff --git a/z/20170818_5.md b/z/20170818_5.md
index 93dfc77..cc2a9a8 100644
--- a/z/20170818_5.md
+++ b/z/20170818_5.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第三章 Vim 常用命令
-`+` `book/vimllearn`
+# 第三章 Vim 常用命令
## 3.5\* 自动命令与事件
diff --git a/z/20170818_6.md b/z/20170818_6.md
index 0ce1324..26e6629 100644
--- a/z/20170818_6.md
+++ b/z/20170818_6.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第三章 Vim 常用命令
-`+` `book/vimllearn`
+# 第三章 Vim 常用命令
## 3.6\* 调试命令
diff --git a/z/20170819_1.md b/z/20170819_1.md
index 700cd8e..72b70f5 100644
--- a/z/20170819_1.md
+++ b/z/20170819_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第四章 VimL 数据结构进阶
-`+` `book/vimllearn`
+# 第四章 VimL 数据结构进阶
在第 2.1 章已经介绍了 VimL 的变量与类型的基本概念。本章将对变量类型所指代的数
据结构作进一步的讨论。
diff --git a/z/20170819_2.md b/z/20170819_2.md
index a7fadd1..6bac312 100644
--- a/z/20170819_2.md
+++ b/z/20170819_2.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第四章 VimL 数据结构进阶
-`+` `book/vimllearn`
+# 第四章 VimL 数据结构进阶
## 4.2 通用的字典结构
diff --git a/z/20170819_3.md b/z/20170819_3.md
index e6d7464..e74c055 100644
--- a/z/20170819_3.md
+++ b/z/20170819_3.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第四章 VimL 数据结构进阶
-`+` `book/vimllearn`
+# 第四章 VimL 数据结构进阶
## 4.3 嵌套组合与扩展
diff --git a/z/20170819_4.md b/z/20170819_4.md
index 6d26124..26252cb 100644
--- a/z/20170819_4.md
+++ b/z/20170819_4.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第五章 VimL 函数进阶
-`+` `book/vimllearn`
+# 第五章 VimL 函数进阶
在第二章中,我们已经讲叙了基本的函数定义与调用方法,以及一些函数属性的作用。但
正如大多数编程语言一样,函数是如此普遍且重要的元素。因而本章继续讨论一些有关函
diff --git a/z/20170819_5.md b/z/20170819_5.md
index 5dc7ec2..9a3b71e 100644
--- a/z/20170819_5.md
+++ b/z/20170819_5.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第五章 VimL 函数进阶
-`+` `book/vimllearn`
+# 第五章 VimL 函数进阶
## 5.2 函数引用
diff --git a/z/20170819_6.md b/z/20170819_6.md
index eb3ad35..f65286e 100644
--- a/z/20170819_6.md
+++ b/z/20170819_6.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第五章 VimL 函数进阶
-`+` `book/vimllearn`
+# 第五章 VimL 函数进阶
## 5.3 字典函数
diff --git a/z/20170821_1.md b/z/20170821_1.md
index a0d6cfd..5ac264a 100644
--- a/z/20170821_1.md
+++ b/z/20170821_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第六章 VimL 内建函数使用
-`+` `book/vimllearn`
+# 第六章 VimL 内建函数使用
一般实用的语言包括语法与标准库,毕竟写程序不能完全从零开始,须站在他人的基石之
上。而要开发更有产品价值的程序,更要站在巨人的肩膀上,比如社区提供的第三方库。
diff --git a/z/20170821_2.md b/z/20170821_2.md
index 4efd88a..365a47f 100644
--- a/z/20170821_2.md
+++ b/z/20170821_2.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第六章 VimL 内建函数使用
-`+` `book/vimllearn`
+# 第六章 VimL 内建函数使用
## 6.2 操作编辑对象
diff --git a/z/20170821_3.md b/z/20170821_3.md
index aeb9d32..c4a17a8 100644
--- a/z/20170821_3.md
+++ b/z/20170821_3.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第六章 VimL 内建函数使用
-`+` `book/vimllearn`
+# 第六章 VimL 内建函数使用
## 6.3 操作外部系统资源
diff --git a/z/20170821_4.md b/z/20170821_4.md
index 1fc65c2..d5d9ec4 100644
--- a/z/20170821_4.md
+++ b/z/20170821_4.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第六章 VimL 内建函数使用
-`+` `book/vimllearn`
+# 第六章 VimL 内建函数使用
## 6.4 其他实用函数
diff --git a/z/20170821_5.md b/z/20170821_5.md
index 06b9329..d154777 100644
--- a/z/20170821_5.md
+++ b/z/20170821_5.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第七章 VimL 面向对象编程
-`+` `book/vimllearn`
+# 第七章 VimL 面向对象编程
面向对象是一种编程思想,并不特指某种编程语言。所以不必惊讶用 VimL 也能以面向
对象的方式来写代码。本章先简单介绍一下面向对象的编程思想,再探讨如何利用 VimL
diff --git a/z/20170821_6.md b/z/20170821_6.md
index fc14ed7..aa0932f 100644
--- a/z/20170821_6.md
+++ b/z/20170821_6.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第七章 VimL 面向对象编程
-`+` `book/vimllearn`
+# 第七章 VimL 面向对象编程
## 7.2 字典即对象
diff --git a/z/20170821_7.md b/z/20170821_7.md
index 19d36c3..68d4a3f 100644
--- a/z/20170821_7.md
+++ b/z/20170821_7.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第七章 VimL 面向对象编程
-`+` `book/vimllearn`
+# 第七章 VimL 面向对象编程
## 7.3 自定义类的组织管理
diff --git a/z/20170922_1.md b/z/20170922_1.md
index 07e3e7c..7067a42 100644
--- a/z/20170922_1.md
+++ b/z/20170922_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第四章 VimL 数据结构进阶
-`+` `book/vimllearn`
+# 第四章 VimL 数据结构进阶
## 4.4\* 正则表达式
diff --git a/z/20171023_1.md b/z/20171023_1.md
index 748aa93..a35f51b 100644
--- a/z/20171023_1.md
+++ b/z/20171023_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第五章 VimL 函数进阶
-`+` `book/vimllearn`
+# 第五章 VimL 函数进阶
## 5.4\* 闭包函数
diff --git a/z/20171028_1.md b/z/20171028_1.md
index 68b3553..043a955 100644
--- a/z/20171028_1.md
+++ b/z/20171028_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第五章 VimL 函数进阶
-`+` `book/vimllearn`
+# 第五章 VimL 函数进阶
## 5.5 自动函数
diff --git a/z/20181121_1.md b/z/20181121_1.md
index c8b5bf9..8bee159 100644
--- a/z/20181121_1.md
+++ b/z/20181121_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第八章 VimL 异步编程特性
-`+` `book/vimllearn`
+# 第八章 VimL 异步编程特性
## 8.1 异步工作简介
diff --git a/z/20181205_1.md b/z/20181205_1.md
index 0118140..2d304ad 100644
--- a/z/20181205_1.md
+++ b/z/20181205_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第八章 VimL 异步编程特性
-`+` `book/vimllearn`
+# 第八章 VimL 异步编程特性
## 8.2 使用异步任务
diff --git a/z/20181210_1.md b/z/20181210_1.md
index ac8b400..5669631 100644
--- a/z/20181210_1.md
+++ b/z/20181210_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第八章 VimL 异步编程特性
-`+` `book/vimllearn`
+# 第八章 VimL 异步编程特性
## 8.3 使用通道控制任务
diff --git a/z/20181212_1.md b/z/20181212_1.md
index b6d61fd..51624b5 100644
--- a/z/20181212_1.md
+++ b/z/20181212_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第八章 VimL 异步编程特性
-`+` `book/vimllearn`
+# 第八章 VimL 异步编程特性
## 8.4 使用配置内置终端
diff --git a/z/20181215_1.md b/z/20181215_1.md
index eefa146..f01ecfc 100644
--- a/z/20181215_1.md
+++ b/z/20181215_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第九章 VimL 混合编程
-`+` `book/vimllearn`
+# 第九章 VimL 混合编程
## 9.1 用外部语言写过滤器
@@ -21,13 +20,13 @@
$ ls -l | vim -
```
-这个命令表示将当前目录列表送入 vim 中编辑,譬如打算在每行前面添加 `mv ` 命令,
-想仔细规划下如何批量重命名。
+这个命令表示将当前目录下的文件列表送入 vim 中编辑,譬如打算在每行前面添加 `mv
+` 命令,想仔细规划下如何批量重命名。
就像许多 Unix 工具一样,启用 vim 时若用 `-` 取代文件名参数,就表示从标准输入读
入内容,所以它很容易配合管道,作为接收管道输入的末端。但由于 vim 常规运用是作
为可视化交互式全屏编辑,它不再产生标准输出,因而也不便继续产生管道输出至下一工
-序。然而, vim 也有批量模式,不会打开交互界面,实际上也是可以强行整合,达到类
+序。然而, vim 也有批量模式,不会打开交互界面,实际上也是可以强行配合,达到类
似 `sed` 的流编辑效果——但这就似乎有点旁门左道了,不是 vim 的常规用法。
当然,管道的配合,只是工具的组合与混用,离“可编程”的概念还比较远。
@@ -37,8 +36,8 @@ $ ls -l | vim -
,它是允许与鼓励对所调用的外部脚本进行编程,但在 vim 这端的用法却是固定的,因
而也可算是另一种“半混合”编程。
-除了自己写通道服务算“合混全”编程外, vim 在这之前还提供了多种脚本语言的内置接
-口,那也算是(同步的)“合混合”编程了。本节先介绍相对简单的过滤器,下一节再介绍
+除了自己写通道服务算“全混全”编程外, vim 在这之前还提供了多种脚本语言的内置接
+口,那也算是(同步的)“全混合”编程了。本节先介绍相对简单的过滤器,下一节再介绍
语言接口。
### 9.1.2 过滤器的概念与使用
@@ -67,9 +66,9 @@ $ ls -l | vim -
行手动输入两个数字行号,也在可视模式下选择一定范围后按 `:` 自动添加 `'<,'>` 表
示所选择的行范围。
-使用过滤器还有个快捷键方式,不必先按 `:` 进入命令,直接在普通模式按 `!` 再接一
-个移动命令(文本对象),也会自动帮你选定这个文本对象,即自动进入命令行模式并填
-充好地址参数,只要继续在 `!` 之后输入想调用的外部程序。
+使用过滤器还有个快捷键方式,不必先按 `:` 进入命令行,直接在普通模式按 `!` 再接一
+个移动命令(文本对象),也会自动帮你选定这个文本对象,并自动进入命令行模式并填
+充好地址参数,用户只要继续在 `!` 之后输入想调用的外部程序。
诚然,过滤器可以直接调用别人写好、已经完善的外部程序。然而,由于以标准输出替换
标准输入的模型如此简单,而每个人的编辑任务又可能多种多样各具个性,在一时找不到
@@ -117,7 +116,7 @@ while (<>) { print "$.$sep$_"; }
如果给脚本添加了可执行权限,可直接将脚本作为过滤器程序,否则就将脚本文件当作
perl 解释器的第一参数。如果脚本不在当前目录,请替换为脚本全路径,或者若将可执
行脚本放在某个 `$PATH` 路径中,也可以直接使用。然后要注意命令参数,会先后经过
-vim 命令行与 shell 命令两层处理,对特殊字符最好加引号或转义,避免出错。例如:
+vim 命令行与 shell 命令行两层处理,对特殊字符最好加引号或转义,避免出错。例如:
```vim
:'<,'>!./catn.pl ')' 2
@@ -134,8 +133,8 @@ Vim 命令行中的 `%` 符号会被展开为当前文件名,即使用引号
在引号中传给 shell (如果文件名中有空格,有无引号影响 shell 将其作为几个参数)
,如果要将百分号传给 shell ,就得用 `\%` 反杠转义。`#` 在 vim 命令行中会被展开
为“上一个编辑过的”文件名,仅用 `\#` 可以将 `#` 传给 shell ,但在 shell 中这符
-号是注释,那又会有问题,所以必须用 `\#` 两层保护,才能将 `#` 符号传入过滤器脚
-本中,输入类似 `1#` `2#` 的编号效果。
+号是注释,那又会有问题,所以必须用 `'\#'` 两层保护,才能将 `#` 符号传入过滤器脚
+本中,输出类似 `1#` `2#` 的编号效果。
记不住这许多特殊符号规则怎么办,很简单呀,多试试就好,或者用保守的 `'\#'` 就差
不多了。而且在 vim 试错了过滤器(参数问题,或脚本本身 bug)不要紧,如果意外修
@@ -143,7 +142,7 @@ Vim 命令行中的 `%` 符号会被展开为当前文件名,即使用引号
当然,有时特意利用 vim 特殊符号的替换意义也可能是有用的,例如你又想文件名放在
行号之前了,类似 `file:1` 的效果。那么就可以在 vim 命令行中传入 `'%'` 参数,如
-果确认当前文件名中没参数,也可以不用引号。当然了,这个过滤器脚本本身的逻辑功能
+果确认当前文件名中没空格,也可以不用引号。当然了,这个过滤器脚本本身的逻辑功能
也要作相应修改了。
所以你看,只要你经常脑洞大开,需求总是在不断变化。然而只要掌握一门脚本语言,哪
diff --git a/z/20181215_2.md b/z/20181215_2.md
index b2c142c..0ccff5c 100644
--- a/z/20181215_2.md
+++ b/z/20181215_2.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第九章 VimL 混合编程
-`+` `book/vimllearn`
+# 第九章 VimL 混合编程
## 9.2 外部语言接口编程
@@ -67,7 +66,7 @@ prefix = $(HOME)
然后,就可以按 Unix/Linux 源码编译安装程序的标准三部曲执行如下命令了:
```bash
-$ configure
+$ make configure
$ make
$ make install
```
@@ -338,8 +337,8 @@ buffer 编号的数字,一般能保证唯一,只要是有效的 buffer 编
Window 对象也有自己的方法,请查阅相应文档,这里就不再罗列了。此外,还提供两个
全局变量用于操作当前 buffer 与当前窗口:
-* `$main:curbuf` 表示当前 buffer ;
-* `$main:curwin` 表示当前窗口。
+* `$main::curbuf` 表示当前 buffer ;
+* `$main::curwin` 表示当前窗口。
由于 `:perl` 命令执行的 perl 代码,就默认在 `main` 的命名空间(包)内,所以一
般情况下可简写为 `$curbuf` 与 `$curwin` 。
diff --git a/z/20181217_2.md b/z/20181217_2.md
index 789e9b8..0414369 100644
--- a/z/20181217_2.md
+++ b/z/20181217_2.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第九章 VimL 混合编程
-`+` `book/vimllearn`
+# 第九章 VimL 混合编程
## 9.3\* Perl 语言接口开发
@@ -11,24 +10,24 @@
典型地,假如要使用(perl)语言接口实现某个较为复杂的功能或插件,其调用流程大概
可归纳如下:
-0. 定义快捷键映射,`nnoremap` ,这不一定必要,可能直接使用命令也方便;
-1. 快捷键调用自定义命令,`command`;
-2. vim 自定义命令调用 vim 自定义函数;
-3. 在 vim 函数中使用 `:perl` 命令调用 perl 函数;
-4. 在 perl 函数中实现业务运算,可能有更长的调用链或引入其他模块;
-5. 在 perl 函数使用 VIM 模块将运算结果或其他效果反馈回 vim 。
+1. 定义快捷键映射,`nnoremap` ,这不一定必要,可能直接使用命令也方便;
+2. 快捷键调用自定义命令,`command`;
+3. vim 自定义命令调用 vim 自定义函数;
+4. 在 vim 函数中使用 `:perl` 命令调用 perl 函数;
+5. 在 perl 函数中实现业务运算,可能有更长的调用链或引入其他模块;
+6. 在 perl 函数使用 VIM 模块将运算结果或其他效果反馈回 vim 。
在以上流程中,前三步是是纯 VimL 编程(细究起来,前两步准备动作还只是使用 vim
-),第 4 步是纯 perl 编程,而第 3 步与第 5 步就是 VimL 与 perl 的接口过渡。接
+),第 5 步是纯 perl 编程,而第 4 步与第 6 步就是 VimL 与 perl 的接口过渡。接
口的使用只能按标准规定,打通一种可能,而要直接实现有意义的功能,重点还是回归到
-第 4 与第 2 步两门语言的掌握程度上。
+第 5 与第 3 步两门语言的掌握程度上。
整个流程是同步的,当 perl 代码执行完毕后,堆栈上溯,一直回到第 1 步的命令完成
,才算一条 vim 的 `Ex` 全部完成,然后 vim 继续响应等待用户的按键。
-但凡编程,要有作用域的意识,在这第 3 步中,首先是在 VimL 的函数的局部作用域中
+但凡编程,要有作用域的意识,在这第 4 步中,首先是在 VimL 的函数的局部作用域中
,首次进入的 perl 代码,是在 perl 的 `main` 命令空间。如果在 perl 的后续调用链
-中,进入了其他命名空间,再想引用本次 vim 命令(第 1 步)或之前 vim 命令中在
+中,进入了其他命名空间,再想引用本次 vim 命令(第 2 步)或之前 vim 命令中在
perl `main` 命名空间定义的变量,就得显式加前缀 `main::` 或简写 `::` 也可。在
perl 代码中,使用 VIM 模块,只能直接影响 vim 的全局变量,它无法获知调用 `:perl`
命令所处的函数作用域或脚本作用域。如果有这个需求,请约定使用的全局变量,并在
@@ -215,7 +214,7 @@ sub ToVimBuffer
这里直接将 `ToVimBuffer()` 函数的参数全部传给 `Append()` ,便支持同时添加多行
(字符串列表)或一行(标量字符串)至 vim buffer 中。须提醒的是 `Append()` 方法
-的第一参数,不能使用 `'$'` 表示最后一行,只是是数字,因为这是在 perl 代码中,
+的第一参数,不能使用 `'$'` 表示最后一行,只能是数字,因为这是在 perl 代码中,
`'$'` 没有特殊行号意义,当作普通字符串转化为数字时,就是 `0` ,结果就会添加到
buffer 最前面而不是最后面。
diff --git a/z/20181219_1.md b/z/20181219_1.md
index d10fe84..f67e253 100644
--- a/z/20181219_1.md
+++ b/z/20181219_1.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第十章 Vim 插件管理与开发
-`+` `book/vimllearn`
+# 第十章 Vim 插件管理与开发
## 10.1 典型插件的目录规范
diff --git a/z/20181219_2.md b/z/20181219_2.md
index e57d812..eae5ea9 100644
--- a/z/20181219_2.md
+++ b/z/20181219_2.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第十章 Vim 插件管理与开发
-`+` `book/vimllearn`
+# 第十章 Vim 插件管理与开发
## 10.2 插件管理器插件介绍
diff --git a/z/20181219_3.md b/z/20181219_3.md
index 70f523c..5114737 100644
--- a/z/20181219_3.md
+++ b/z/20181219_3.md
@@ -1,5 +1,4 @@
-# 《VimL 语言编程指北路》第十章 Vim 插件管理与开发
-`+` `book/vimllearn`
+# 第十章 Vim 插件管理与开发
## 10.3 插件开发流程指引