Use Tcl in Vim
Vim是功能强大的文本编辑器。Tcl是一门小巧灵活的脚本语言。
在Vim中其实也是可以使用Tcl的。
在Vim中使用Tcl的直接好处是可以很多操作可以不用去学习和记忆Vim自身的脚本命令。
在次之外,如果逐渐变成重度用户的话,一些常用操作可以通过Tcl脚本的方式保存起来。
这可以看作是一种类似于sed
和awk
的文本操作。
在Vim中与Tcl初次见面
下面的命令会在Vim窗口底部输出字符串"hello"。
: tcl puts "hello"
修改当前窗口中第7行的内容:
: 7tcldo set line "this is line 7"
执行一个Tcl脚本
: tclfile tcl-in-vim.tcl
生成递增序列文本 "Line 1"到"Line 100"
:tcl <<
for {set n 1} {$n<=100} {incr n} {
$vim::current(bufferr) append end "Line $n"
}
Tcl 与 Vim的主要接口
:tcl
用于执行Tcl命令:tcldo
用于对指定范围的文本应用Tcl命令- Tcl变量
$line
和$lnum
分别表示文本内容和对应行号 - 可以通过修改
$line
的值来修改对应行的文本内容
- Tcl变量
:tclfile
用于执行Tcl脚本文件::vim::window
命令用于与Vim窗口(Window)交互::vim::buffer
命令用于与Vim缓冲区(Buffer)交互::vim::command
命令用于执行Vim的Ex命令::vim::expr
命令用于计算Vim脚本语言形式的表达式::vim::option
命令用于操作Vim的各种选项$::vim::current
变量包含当前窗口和当前缓冲区(Buffer)
利用".vimrc.tcl"初始化Vim里的Tcl环境
如果真的决定使用Vim来操作Tcl,一定会有一些常用函数希望家默认加载进去。
可以通过在.vimrc
文件中用下列命令初始化Vim里的Tcl环境
if has("tcl")
tclfile $VIM/.vimrc.tcl
endif
比如考虑到$::vim::current
变量输入起来并不方便,我们可以定义如下函数
proc vim {args} {
$::vim::current(buffer) {*}$args
}
proc range {min max} {
set values [list]
for {} {$min<=$max} {incr min} {
lappend values $min
}
return $values
}
如此一来,上面的生成递增文本序列的操作就可以写成下面这个样子
: tcl foreach n [range 1 100] { vim append end "Line $n" }
确认你的Vim支持Tcl
并不是所有的Vim默认都支持Tcl。
可以下面的Vim命令检查当前Vim是否支持Tcl。
: version
如果支持的话,会看到输出中有+tcl
或者+tcl/dyn
字样。
如果显示的是-tcl
的话,则当前Vim编译时没有打开对Tcl的支持。
Windows版本的Vim通常都是默认支持Tcl的。
让Vim正确加载Tcl动态链接库
即使当前Vim支持Tcl,也需要正确加载对应的动态链接库才行。在Windows上,主要就是对应的tcl85.dll
或者tcl86.dll
。
Tcl动态链接库的加载遵从相应的dll文件搜索路径,也遵从Tcl初始化的要求——主要是正确加载相应的init.tcl
初始化文件。