Skip to content

Commit

Permalink
gitbook 化
Browse files Browse the repository at this point in the history
  • Loading branch information
lymslive committed Jul 23, 2019
1 parent 4399c1d commit de50565
Show file tree
Hide file tree
Showing 45 changed files with 92 additions and 130 deletions.
4 changes: 1 addition & 3 deletions content.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
# VimL 语言编程指北路

## 初稿目录
# 《VimL 语言编程指北路》目录

+ [前言 ](z/20170816_1.md)

Expand Down
2 changes: 1 addition & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<meta http-equiv="refresh" content="0; URL=vm.cgi?p=content">
<meta http-equiv="refresh" content="0; URL=_book/">
<title> VimL 语言编程指北路 </title>
</head>
<body>
Expand Down
6 changes: 3 additions & 3 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
全书正文分十章,约摸可再划分为基础篇、中级篇与高级篇三部分,现已完成初稿。后面
有可以计划再补上番外实战篇,写几章开发具体插件实例的实现思路。

[进入目录](./content.md)
[目录 content.md](./content.md)

初稿在本地我用自己的笔记插件 [vnote](https://github.com/lymslive/vnote) 写的,
保存在笔记本 [notebook](https://github.com/lymslive/notebook)
Expand All @@ -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 开源协议。允许自由扩散,以及援用部分段落解说与示例代码。但
不允许将整书或整章节用于商业出版。笔者本人保留将来联系出版社以传统纸媒出版的权
Expand Down
3 changes: 1 addition & 2 deletions z/20170816_1.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》前言
`+` `book/vimllearn`
# 前言

这是一篇有关 Vim 脚本语言的入门与进阶教程。是“指北”,不是“指南”,所以如果不慎
指错了路,切勿见怪。不过要相信地球是圆的,绕了一圈之后,希望还是能找对目标的。
Expand Down
5 changes: 3 additions & 2 deletions z/20170816_2.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第一章 VimL 语言主要特点
`+` `book/vimllearn`
# 第一章 VimL 语言主要特点

## 1.1 Hello World 的四种写法

Expand Down Expand Up @@ -193,6 +192,8 @@ VimL 语言就是基于 `ex` 命令的,再加上一些流程控制,就成了
向,也可以不增加可视化而偏向自动化。依每人的性格习惯不同,可能会在 Vim 的可视
化与自动化之间找到适合自己的不同的平衡点。

<!--
—— 楼上的天花乱坠地在说些什么呀
—— 不知道耶,再看看吧
-->
5 changes: 2 additions & 3 deletions z/20170816_3.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第一章 VimL 语言主要特点
`+` `book/vimllearn`
# 第一章 VimL 语言主要特点

## 1.2 同源 ex 命令行

Expand Down Expand Up @@ -92,7 +91,7 @@ vim 仍处于编辑 `helloworld.txt` 状态中。
:q<CR>
$ vim -u vimrc.vim helloworld.txt
```
可见,重新打开 `helloworld.txt` 文件后也自动设置了行号与折行。你可以换行这个参
可见,重新打开 `helloworld.txt` 文件后也自动设置了行号与折行。你可以换这个参
数启动 vim 对比下效果,确认是 `vimrc.vim` 的功效:
```bash
$ vim -u NONE helloworld.txt
Expand Down
21 changes: 12 additions & 9 deletions z/20170816_4.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第一章 VimL 语言主要特点
`+` `book/vimllearn`
# 第一章 VimL 语言主要特点

## 1.3 弱类型强作用域

Expand Down Expand Up @@ -57,8 +56,8 @@ Vim 作为一个可视化的编辑器,给用户呈现的,能让用户交互
`buffer`(缓冲文件),`window`(窗口),`tabpage`(标签页)。可以把它们想象为
互有关系的容器:

* 缓冲对应着一个正在编辑中的文件,在不必究的情况下可认为与文件等同。(不过不一
定对应着硬盘上的一个文件,比较新建的尚未保存的文件,以及一些特殊缓冲文件)缓
* 缓冲对应着一个正在编辑中的文件,在不细究的情况下可认为与文件等同。(不过不一
定对应着硬盘上的一个文件,比如新建的尚未保存的文件,以及一些特殊缓冲文件)缓
冲也可认为是容纳着文件中所有文本行的容器,就像是简单的字符串列表了。
* 窗口是用于展示缓冲文件的一部分在屏幕上的容器。Vim 可编辑的文件很大,极有可能
在一个屏幕窗口中无法显示文件的所有内容吧,所以窗口对应于缓冲文件还有个可视范
Expand All @@ -82,7 +81,7 @@ Vim 作为一个可视化的编辑器,给用户呈现的,能让用户交互
缓冲文件的变量,要么先用其他命令将目标缓冲文件切换为当前编辑的缓冲文件,或者
调用其他的内置函数来访问。
* 如果一个缓冲文件“消失”了,那么与之关联的所有 `b:` 变量也消失了。
* 窗口与标签页的“消失”能比较形象与容易地理解,关闭了就算消失了。但 Vim 内容对
* 窗口与标签页的“消失”能比较形象与容易地理解,关闭了就算消失了。但 Vim 内部对
缓冲的管理比较复杂,未必是从窗口上不见了就代表“消失”了。
* 不过在一般 VimL 编程中,可暂不必深究缓冲文件什么时候“消失”。只要记着一个
`b:` 变量必定与一个缓冲文件关联着,不同的缓冲文件使用相同的 `b:` 变量是安全的,
Expand Down Expand Up @@ -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` 分别用于表示逻辑值“真”与“
Expand All @@ -191,6 +194,6 @@ echo s:
。要检查当前 vim 版本是否支持某个 `v:` 变量,只要用 `:help` 命令查阅一下即可。
而且 `v:` 本身也是个字典集合变量,可用 `:echo v:` 命令查看所有这类变量。

`&` 前缀的变量表示选项的,相当于把选项变量化,以便于在 VimL 中编程。所支持
`&` 前缀的变量表示选项的值,相当于把选项变量化,以便于在 VimL 中编程。所支持
的选项集,也是由 Vim 版本决定的,用户当然无法定义与使用不存在的选项。这部分内
容在后面讲选项设置时再行讨论。
13 changes: 6 additions & 7 deletions z/20170816_5.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
# 《VimL 语言编程指北路》第一章 VimL 语言主要特点
`+` `book/vimllearn`
# 第一章 VimL 语言主要特点

## 1.4\* 自动加载脚本机制

前文已提及,vim 脚本主要用 `:source` 命令加载,然而很多情况下又不需要手动执行
该命令。只要将脚本放在特定的目录下,vim 就有个机制自动搜寻并加载的机制
该命令。只要将脚本放在特定的目录下,vim 就有个机制能自动搜寻并加载

### Vim 插件搜索目录

Expand All @@ -13,7 +12,7 @@
脚本文件的。你可以在命令行输入 `:echo &rtp` 查看当前运行的 vim 有哪些“运行时目
录”,一般都会包含 `~/.vim` 这个目录。

* 除了 vim 启动是的第一个配置文件 `vimrc`,运行时需要加载的脚本,一般都是从
* 除了 vim 启动时的第一个配置文件 `vimrc`,运行时需要加载的脚本,一般都是从
`&rtp` 目录列表中搜索的。
* vim 启动时,会在所有 `&rtp` 目录下的 `plugin/` 搜索 `*.vim` 文件,并加载所有
找到的脚本文件。需要注意的是在 `plugin/` 子目录下的所有脚本也会自动加载。除
Expand All @@ -32,7 +31,7 @@
### VimL 的自动加载函数(延时加载)

Vim 一直有个追求的目标是启动快。当插件越来越多时,vim 启动时要解析大量的脚本文
件,就会被拖慢了。这时就出现另一个 `autoload` 自动加载函数的机制,这个巧妙的方
件,就会被拖慢了。这时就出现了一个 `autoload` 自动加载函数的机制,这个巧妙的方
法可算是 VimL 发展的一个里程碑吧。而在这之前,须由用户在 `plugin/*.vim` 的复杂
脚本中用极具巧妙的编程技巧,才好实现延时加载。

Expand All @@ -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` 目录下都找不到,那就是个错误了。
Expand All @@ -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()`
* 从使用便利性上,一般是会定义快捷键或命令来调用 `#` 函数,并在首次使用时触发
相关脚本的加载。
Expand Down
3 changes: 1 addition & 2 deletions z/20170817_1.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第二章 VimL 语言基本语法
`+` `book/vimllearn`
# 第二章 VimL 语言基本语法

## 2.1 变量与类型

Expand Down
3 changes: 1 addition & 2 deletions z/20170817_2.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第二章 VimL 语言基本语法
`+` `book/vimllearn`
# 第二章 VimL 语言基本语法

## 2.2 选择与比较

Expand Down
3 changes: 1 addition & 2 deletions z/20170817_3.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第二章 VimL 语言基本语法
`+` `book/vimllearn`
# 第二章 VimL 语言基本语法

## 2.3 循环与遍历

Expand Down
3 changes: 1 addition & 2 deletions z/20170817_4.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第二章 VimL 语言基本语法
`+` `book/vimllearn`
# 第二章 VimL 语言基本语法

## 2.4 函数定义与使用

Expand Down
3 changes: 1 addition & 2 deletions z/20170817_5.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第二章 VimL 语言基本语法
`+` `book/vimllearn`
# 第二章 VimL 语言基本语法

## 2.5\* 异常处理

Expand Down
3 changes: 1 addition & 2 deletions z/20170818_1.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第三章 Vim 常用命令
`+` `book/vimllearn`
# 第三章 Vim 常用命令

在第二章已经介绍了 VimL 语言的基本语法,理论上来说,就可以据此写出让 vim 解释
执行的合法脚本了。然而,能写什么的脚本呢?除了打印“Hello World!”,以及高级点的
Expand Down
3 changes: 1 addition & 2 deletions z/20170818_2.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第三章 Vim 常用命令
`+` `book/vimllearn`
# 第三章 Vim 常用命令

## 3.2 快捷键重映射

Expand Down
3 changes: 1 addition & 2 deletions z/20170818_3.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第三章 Vim 常用命令
`+` `book/vimllearn`
# 第三章 Vim 常用命令

## 3.3 自定义命令

Expand Down
3 changes: 1 addition & 2 deletions z/20170818_4.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第三章 Vim 常用命令
`+` `book/vimllearn`
# 第三章 Vim 常用命令

## 3.4 execute 与 normal

Expand Down
3 changes: 1 addition & 2 deletions z/20170818_5.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第三章 Vim 常用命令
`+` `book/vimllearn`
# 第三章 Vim 常用命令

## 3.5\* 自动命令与事件

Expand Down
3 changes: 1 addition & 2 deletions z/20170818_6.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第三章 Vim 常用命令
`+` `book/vimllearn`
# 第三章 Vim 常用命令

## 3.6\* 调试命令

Expand Down
3 changes: 1 addition & 2 deletions z/20170819_1.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第四章 VimL 数据结构进阶
`+` `book/vimllearn`
# 第四章 VimL 数据结构进阶

在第 2.1 章已经介绍了 VimL 的变量与类型的基本概念。本章将对变量类型所指代的数
据结构作进一步的讨论。
Expand Down
3 changes: 1 addition & 2 deletions z/20170819_2.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第四章 VimL 数据结构进阶
`+` `book/vimllearn`
# 第四章 VimL 数据结构进阶

## 4.2 通用的字典结构

Expand Down
3 changes: 1 addition & 2 deletions z/20170819_3.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第四章 VimL 数据结构进阶
`+` `book/vimllearn`
# 第四章 VimL 数据结构进阶

## 4.3 嵌套组合与扩展

Expand Down
3 changes: 1 addition & 2 deletions z/20170819_4.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第五章 VimL 函数进阶
`+` `book/vimllearn`
# 第五章 VimL 函数进阶

在第二章中,我们已经讲叙了基本的函数定义与调用方法,以及一些函数属性的作用。但
正如大多数编程语言一样,函数是如此普遍且重要的元素。因而本章继续讨论一些有关函
Expand Down
3 changes: 1 addition & 2 deletions z/20170819_5.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第五章 VimL 函数进阶
`+` `book/vimllearn`
# 第五章 VimL 函数进阶

## 5.2 函数引用

Expand Down
3 changes: 1 addition & 2 deletions z/20170819_6.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第五章 VimL 函数进阶
`+` `book/vimllearn`
# 第五章 VimL 函数进阶

## 5.3 字典函数

Expand Down
3 changes: 1 addition & 2 deletions z/20170821_1.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第六章 VimL 内建函数使用
`+` `book/vimllearn`
# 第六章 VimL 内建函数使用

一般实用的语言包括语法与标准库,毕竟写程序不能完全从零开始,须站在他人的基石之
上。而要开发更有产品价值的程序,更要站在巨人的肩膀上,比如社区提供的第三方库。
Expand Down
3 changes: 1 addition & 2 deletions z/20170821_2.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第六章 VimL 内建函数使用
`+` `book/vimllearn`
# 第六章 VimL 内建函数使用

## 6.2 操作编辑对象

Expand Down
3 changes: 1 addition & 2 deletions z/20170821_3.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第六章 VimL 内建函数使用
`+` `book/vimllearn`
# 第六章 VimL 内建函数使用

## 6.3 操作外部系统资源

Expand Down
3 changes: 1 addition & 2 deletions z/20170821_4.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第六章 VimL 内建函数使用
`+` `book/vimllearn`
# 第六章 VimL 内建函数使用

## 6.4 其他实用函数

Expand Down
3 changes: 1 addition & 2 deletions z/20170821_5.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第七章 VimL 面向对象编程
`+` `book/vimllearn`
# 第七章 VimL 面向对象编程

面向对象是一种编程思想,并不特指某种编程语言。所以不必惊讶用 VimL 也能以面向
对象的方式来写代码。本章先简单介绍一下面向对象的编程思想,再探讨如何利用 VimL
Expand Down
3 changes: 1 addition & 2 deletions z/20170821_6.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第七章 VimL 面向对象编程
`+` `book/vimllearn`
# 第七章 VimL 面向对象编程

## 7.2 字典即对象

Expand Down
3 changes: 1 addition & 2 deletions z/20170821_7.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第七章 VimL 面向对象编程
`+` `book/vimllearn`
# 第七章 VimL 面向对象编程

## 7.3 自定义类的组织管理

Expand Down
3 changes: 1 addition & 2 deletions z/20170922_1.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第四章 VimL 数据结构进阶
`+` `book/vimllearn`
# 第四章 VimL 数据结构进阶

## 4.4\* 正则表达式

Expand Down
3 changes: 1 addition & 2 deletions z/20171023_1.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第五章 VimL 函数进阶
`+` `book/vimllearn`
# 第五章 VimL 函数进阶

## 5.4\* 闭包函数

Expand Down
3 changes: 1 addition & 2 deletions z/20171028_1.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第五章 VimL 函数进阶
`+` `book/vimllearn`
# 第五章 VimL 函数进阶

## 5.5 自动函数

Expand Down
3 changes: 1 addition & 2 deletions z/20181121_1.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第八章 VimL 异步编程特性
`+` `book/vimllearn`
# 第八章 VimL 异步编程特性

## 8.1 异步工作简介

Expand Down
3 changes: 1 addition & 2 deletions z/20181205_1.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第八章 VimL 异步编程特性
`+` `book/vimllearn`
# 第八章 VimL 异步编程特性

## 8.2 使用异步任务

Expand Down
3 changes: 1 addition & 2 deletions z/20181210_1.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 《VimL 语言编程指北路》第八章 VimL 异步编程特性
`+` `book/vimllearn`
# 第八章 VimL 异步编程特性

## 8.3 使用通道控制任务

Expand Down
Loading

0 comments on commit de50565

Please sign in to comment.