×

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是用来编辑文本的,你将频繁地跟这一类型打交道。

执行下面的代码:

:echom "Hello"

Vim将输出Hello。目前为止,依然如此。

连接(Concatenation)

在日常编程中你经常需要把字符串连接到一起。执行下面的命令:

:echom "Hello, " + "world"

发生什么了?不知为何,Vim显示0

这就是问题所在:Vim的+运算符_仅仅_适用于数值。当你把一个字符串作为+的参数时, Vim会在执行加法前尝试把它强制转换成一个Number。(译注:在21章的练习里你真的喝了啤酒没) 执行下面的命令:

:echom "3 mice" + "2 cats"

这次Vim显示5,因为字符串被相应地转换成32

当提到"Number"时,我明确_指的是_Number类型。Vim不会强制转换字符串为Float类型! 为求证我的话,试试下面的命令:

:echom 10 + "10.10"

Vim显示20,因为在强制转换10.10成一个Number时,小数点后的内容都被丢弃了。

你需要使用连结运算符来连接字符串。执行下面命令:

:echom "Hello, " . "world"

这次Vim显示Hello, world.是Vim中的"连接字符串"运算符,可以用来连接字符串。 它不会在其间插入空格或别的什么东西。

Vim会在.两边进行强制转换。试试这个命令:

:echom 10 . "foo"

Vim将显示10foo。首先它把10强制转换成字符串,接着把它跟右边的字符串连接在一起。 不过当涉及到Float类型时,情况有点糟糕。执行这个命令:

:echom 10.1 . "foo"

这次Vim抛出一个错误,声称我们把Float当作String了。Vim乐于让你在执行加法时把String当作Float, 却_不爽_你在连接字符串时把Float当作String。

故事的最后告诉我们一个道理:Vim酷似Javascript:它有时允许你逍遥自在地马虎对待类型差异, 但切莫这样做:因为出来混,迟早都要还的。(because it will come back to bite you at some point)

写Vimscript的时候,确信你清楚写下的每一个变量的类型。如果需要改变变量类型,你就得使用一个函数显式改变它, 即使那不是必要的。不要依赖Vim的强制转换,毕竟世上_没有_后悔药。

特殊字符

就像大多数编程语言,Vimscript允许你在字符串中使用转义字符串来表示"打不了"的字符。 执行下面命令:

:echom "foo "bar""

字符串中的"将如你所愿地被替换成双引号。转义字符串在大多数情况下都会如你所愿。 执行下面的命令:

:echom "foo\bar"

Vim显示foobar,因为\是表示''的转义字符串,一如大多数编程语言。 现在执行下面的命令(注意那是echo不是echom):

:echo "foonbar"

这次Vim将显示两行,foobar,因为n会被替换为换行。现在试试下面的命令:

:echom "foonbar"

Vim将显示类似foo^@bar的诡异信息。当你对字符串使用echom而不是echo时, Vim将输出字符串中_额外的_字符,这意味着有时echom的输出跟echo的会有所不同。 ^@在Vim里表示"换行符"。

字符串字面量

Vim也允许你使用"字符串字面量"(译注:如Python中的r"")来避免转义字符串的滥用。 执行下面命令:

:echom 'n\'

Vim显示n\。使用单引号将告诉Vim,你希望字符串所见即所得,无视转义字符串。 一个例外是一行中连续两个单引号将产生一个单引号。(译注:相当于某种转义)试试这个命令:

:echom 'That''s enough.'

Vim将显示That's enough.。两个单引号是字符串字面量里_唯一_的特殊序列。

在本书稍后的部分,我们将重新审视字符串字面量的更多内容。(那时我们会深陷于正则表达式)

真值(Truthiness)

你可能想知道Vim怎么对待用在if语句中的字符串。执行下面的命令:

:if "foo"
:  echo "yes"
:else
:  echo "no"
:endif

Vim将显示no。如果你搞不懂为何如此,你应该重读关于条件语句的那一章(译注:第21章), 因为我们在那里已经讨论过了。

练习

阅读:help expr-quote。查看在一般的Vim字符串中允许的转义字符串列表。找出如何插入一个tab字符。

尝试找出一种方法,_不_使用转义字符串来插入一个tab字符。提示:阅读:help i_CTRL-V

阅读:help literal-string


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)