From de5056511465305e1ef94a934a7f4d166194f2a7 Mon Sep 17 00:00:00 2001 From: lymslive <403708621@qq.com> Date: Tue, 23 Jul 2019 18:18:45 +0800 Subject: [PATCH] =?UTF-8?q?gitbook=20=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content.md | 4 +--- index.html | 2 +- readme.md | 6 +++--- z/20170816_1.md | 3 +-- z/20170816_2.md | 5 +++-- z/20170816_3.md | 5 ++--- z/20170816_4.md | 21 ++++++++++++--------- z/20170816_5.md | 13 ++++++------- z/20170817_1.md | 3 +-- z/20170817_2.md | 3 +-- z/20170817_3.md | 3 +-- z/20170817_4.md | 3 +-- z/20170817_5.md | 3 +-- z/20170818_1.md | 3 +-- z/20170818_2.md | 3 +-- z/20170818_3.md | 3 +-- z/20170818_4.md | 3 +-- z/20170818_5.md | 3 +-- z/20170818_6.md | 3 +-- z/20170819_1.md | 3 +-- z/20170819_2.md | 3 +-- z/20170819_3.md | 3 +-- z/20170819_4.md | 3 +-- z/20170819_5.md | 3 +-- z/20170819_6.md | 3 +-- z/20170821_1.md | 3 +-- z/20170821_2.md | 3 +-- z/20170821_3.md | 3 +-- z/20170821_4.md | 3 +-- z/20170821_5.md | 3 +-- z/20170821_6.md | 3 +-- z/20170821_7.md | 3 +-- z/20170922_1.md | 3 +-- z/20171023_1.md | 3 +-- z/20171028_1.md | 3 +-- z/20181121_1.md | 3 +-- z/20181205_1.md | 3 +-- z/20181210_1.md | 3 +-- z/20181212_1.md | 3 +-- z/20181215_1.md | 27 +++++++++++++-------------- z/20181215_2.md | 9 ++++----- z/20181217_2.md | 25 ++++++++++++------------- z/20181219_1.md | 3 +-- z/20181219_2.md | 3 +-- z/20181219_3.md | 3 +-- 45 files changed, 92 insertions(+), 130 deletions(-) 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 插件开发流程指引