×

vi 命令手册

vi/vim 命令大全

vim 命令手册

Vim 关于Vim 安装Vim 用法Vim 配置vim 配置.vimrc方案vim 配置.vimrc方案1vim 配置.vimrc方案2Vim 文件合并Vim 技巧和建议Vim 插件Vim 参阅

Vimscript 编程参考

Vimscript 前言Vimscript 鸣谢Vimscript 预备知识Vimscript 打印信息Vimscript 设置选项Vimscript 基本映射Vimscript 模式映射Vimscript 精确映射Vimscript LeadersVimscript 编辑你的Vimrc文件Vimscript AbbreviationsVimscript 更多的MappingsVimscript 锻炼你的手指本地缓冲区的设置和映射Vimscript 自动命令Vimscript 本地缓冲区缩写Vimscript 自动命令组Operator-Pending 映射Operator-Pending 更多映射Vimscript 状态条Vimscript 负责任的编码Vimscript 变量Vimscript 变量作用域Vimscript 条件语句Vimscript 比较Vimscript 函数Vimscript 函数参数Vimscript 数字Vimscript 字符串Vimscript 字符串函数Vimscript Execute命令Vimscript Normal命令Vimscript 执行normal!Vimscript 基本的正则表达式Grep 运算符Operator 第1部分Grep 运算符Operator 第2部分Grep 运算符Operator 第3部分Vimscript 列表Vimscript 循环Vimscript 字典Vimscript 切换Vimscript 函数式编程Vimscript 路径Vimscript 创建一个完整的插件Vimscript 基本插件配置方式用Pathogen配置插件Vimscript 检测文件类型Vimscript 基本语法高亮Vimscript 高级语法高亮Vimscript 基本折叠Vimscript 高级折叠Vimscript 段移动原理Vimscript Potion段移动Vimscript 外部命令Vimscript 自动加载Vimscript 文档Vimscript 发布Vimscript 还剩下什么?

Vimscript 变量


到目前为止我们已经讲完了单行命令。在本书后面的三分之一个章节中将会把Vim脚本当作一个脚本语言。这部分东西不会像前面的你学到的东西一样马上可以学以致用,不过这是为本书的最后一部分打基础,最后一部分会讲解创建一个插件所需要的各个方面的东西。

我们开始吧。我们首先要了解的是变量。执行下面的命令。

:let foo = "bar"
:echo foo

Vim会显示barfoo现在是一个变量,我们将一个字符串"bar"赋值给它。现在执行这些命令:

:let foo = 42
:echo foo

Vim会显示42,因为我们将foo赋值为整型42

从这些小例子似乎可以看出Vim脚本是动态类型的。事实并非如此,我们之后会说明。

作为变量的选项

你可以通过一种特殊语法将_选项_作为变量来设置。执行下面的命令:

:set textwidth=80
:echo &textwidth

Vim会显示80。在名称的前面加一个&符号是告诉Vim你正在引用这个选项,而不是在使用一个名称刚好相同的变量。

我们来看下Vim是怎么处理布尔选项的。执行下面的命令:

:set nowrap
:echo &wrap

Vim显示0。然后再试试这些选项:

:set wrap
:echo &wrap

这次Vim会显示1。这些输出很明确提示Vim会将整型0当作"false",整型1当作"true"。我们可以更进一步假设Vim会将所有的非0值整型当作"truthy",而事实确实如此。

我们也可以使用let命令来_设置_作为变量的选项。执行下面的命令:

:let &textwidth = 100
:set textwidth?

Vim会显示textwidth=100

既然set可以搞定选项的设置,那我们为什么还要用let呢?执行下面的命令:

:let &textwidth = &textwidth + 10
:set textwidth?

这一次Vim显示textwidth=110。当你用set来设置某个选项,你只能给它设置一个常量值。当你使用let并将它作为一个变量来设置,你可以使用Vim脚本的所有强大之处来决定它的值。

本地选项

如果你想将某个选项作为变量来设置它的_本地_值,而不是_全局_值,你需要在变量名前面加前缀。

在两个分隔的窗口中分别打开两个文件。执行下面的命令:

:let &l:number = 1

然后切换到另一文件,然后再执行下面的命令:

:let &l:number = 0

注意第一个窗口会出现行号,而第二个没有。

作为变量的寄存器(Register)

你也可以将_寄存器_当作变量来读取和设置。执行下面的命令:

:let @a = "hello!"

现在把光标放到文本中的某个地方然后敲击"ap。这个命令会告诉Vim“在这里粘贴寄存器a中的内容”。我们设置了这个寄存器的内容,所以Vim会将hello!粘贴到你的文本中。

还可以读寄存器的内容。执行下面的命令:

:echo @a

Vim会输出hello!

在你的文件中选择一个单词然后用y复制,再执行下面的命令:

:echo @"

Vim会输出你刚才复制的单词。"寄存器是“未命名(unnamed)”寄存器,在复制的时候没有指定寄存器的文本都会放到这里。

在你的文件中执行搜索/someword,然后执行下面的命令:

:echo @/

Vim会输出你刚刚使用的搜索模式。这样你就可以通过编程来读_和修改_当前的搜索模式,有些时候这会很有用。

练习

检查你的~/.vimrc文件,然后将其中的一些setsetlocal命令替换为它们的let形式。记住布尔选项仍然需要被设置为某个值。

尝试将某个布尔选项设置为0和1之外的值,例如wrap。当你将它设置为一个不同的数字时会怎么样?如果设置为字符串又会是什么情况?

回到你的~/.vimrc文件,然后恢复所有的修改。在set可以搞定的时候,永远都不要用let,这是因为let更难于阅读。

阅读:help registers,然后看看你可以进行读和写的寄存器列表。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)