--- a/trunk/doc/if_lua.txt
+++ b/trunk/doc/if_lua.txt
@@ -1,4 +1,4 @@
-*if_lua.txt*    For Vim version 7.3.  最近更新: 2013年1月
+*if_lua.txt*    For Vim version 7.4.  最近更新: 2013年8月
 
 
 		  VIM 参 考 手 册         by Luis Carvalho
@@ -12,9 +12,10 @@
 2. vim 模块             	|lua-vim|
 3. 列表用户数据			|lua-list|
 4. 字典用户数据			|lua-dict|
-5. 缓冲区用户数据		|lua-buffer|
-6. 窗口用户数据			|lua-window|
-7. luaeval 函数	 		|lua-luaeval|
+5. 函数引用用户数据		|lua-funcref|
+6. 缓冲区用户数据		|lua-buffer|
+7. 窗口用户数据			|lua-window|
+8. luaeval 函数	 		|lua-luaeval|
 
 {Vi 没有任何以上的命令}
 
@@ -102,9 +103,27 @@
 和 "vim.lastline"。该模块也包含一些对缓冲区、窗口以及当前行查询的例程、Vim 调
 用和命令执行,以及其它各种操作。
 
-	vim.list()		返回空列表 (见 |List|)。
-
-	vim.dict()		返回空字典 (见 |Dictionary|)。
+	vim.list([arg])		返回空列表或者,如果给出 "arg" 为带有数值键值
+				1, ..., n 的Lua 表 (即 "sequence"),返回列表
+				l,l[i] = arg[i] 对 i = 1, .., n (见 |List|)。
+				非数值的键值不用于列表的初始化。转换规则参见
+				|lua-eval|。示例: >
+					:lua t = {math.pi, false, say = 'hi'}
+					:echo luaeval('vim.list(t)')
+					:" [3.141593, 0], 'say' 被忽略
+<
+
+	vim.dict([arg])		返回空字典或者,如果给出 "arg" 为 Lua 表,返回
+				字典 d,d[k] = arg[k] 对所有 "arg" 中的字符串
+				键值 k (见 |Dictionary|)。数值键值转化为字符
+				串。非字符串的键值不用于列表的初始化。转换规则
+				参见 |lua-eval|。示例: >
+					:lua t = {math.pi, false, say = 'hi'}
+					:echo luaeval('vim.dict(t)')
+					:" {'say': 'hi'}, 数值键被忽略
+<
+	vim.funcref({name})	返回对应函数名 {name} 的函数引用 (参见
+				|Funcref|)。等价于 Vim 的 "function"。
 
 	vim.buffer([arg])	如果 "arg" 是数值,返回缓冲区列表中编号为
 				"arg" 的缓冲区。如果 "arg" 为字符串,返回完整
@@ -120,8 +139,8 @@
 
 	vim.type({arg})		返回 {arg} 的类型。等价于 Lua 的 "type" 函数,
 				但若 {arg} 是列表、字典、缓冲区、窗口则分别返
-				回 "list"、"dict"、 "buffer" 或 "window。
-				示例: >
+				回 "list"、"dict"、"funcref"、"buffer" 或
+				"window"。示例: >
 					:lua l = vim.list()
 					:lua print(type(l), vim.type(l))
 					:" userdata list
@@ -206,7 +225,39 @@
 <
 
 ==============================================================================
-5. 缓冲区用户数据					*lua-buffer*
+5. 函数引用用户数据					*lua-funcref*
+
+函数引用用户数据代表 Vim 的函数引用变量。定义时带有 "dict" 属性的函数引用需通
+过赋给某字典的一个键值来使其 "self" 对应该字典 (见下例)。函数引用 "f" 有以下属
+性:
+
+属性
+----------
+	o "#f" 是 "f" 引用的函数名
+	o "f(...)" 调用 "f" 引用的函数 (带参数)
+
+示例:
+>
+	:function I(x)
+	:  return a:x
+	:  endfunction
+	:let R = function('I')
+	:lua i1 = vim.funcref('I')
+	:lua i2 = vim.eval('R')
+	:lua print(#i1, #i2) -- 都应返回 'I'
+	:lua print(i1, i2, #i2(i1) == #i1(i2))
+	:function Mylen() dict
+	:  return len(self.data)
+	:  endfunction
+	:let mydict = {'data': [0, 1, 2, 3]}
+	:lua d = vim.eval('mydict'); d.len = vim.funcref('Mylen')
+	:echo mydict.len()
+	:lua l = d.len -- 把 d 视为 'self'
+	:lua print(l())
+<
+
++==============================================================================
+6. 缓冲区用户数据					*lua-buffer*
 
 缓冲区用户数据代表 vim 的缓冲区。缓冲区用户数据 "b" 包含以下属性和方法:
 
@@ -254,7 +305,7 @@
 <
 
 ==============================================================================
-6. 窗口用户数据						*lua-window*
+7. 窗口用户数据						*lua-window*
 
 窗口对象代表 vim 窗口。窗口用户数据 "w" 有以下属性和方法:
 
@@ -285,7 +336,7 @@
 <
 
 ==============================================================================
-7. luaeval 函数						*lua-luaeval*
+8. luaeval 函数						*lua-luaeval*
 
 和 "vim.eval" 对应,"luaeval" 在 Vim 中接受 Lua 值的传入。"luaeval" 接受一个
 表达式字符串以及一个可选的参数,并返回表达式计算的结果。语义上,等价于在 Lua
@@ -297,7 +348,11 @@
 	    return chunk(arg) -- return typval
 	end
 <
-注意 "_A" 接收给 "luaeval" 的参数。示例: >
+注意 "_A" 接收给 "luaeval" 的参数。Lua 数值,字符串,列表,字典和函数引用用户
+数据转化为 Vim 对应的类型,Lua 布尔型转化为数值。试图转换其他 Lua 类型,包括
+非列表、字典、函数引用的用户数据,会抛出错误。
+
+示例: >
 
 	:echo luaeval('math.pi')
 	:lua a = vim.list():add('newlist')