请您解释一下以下示例中的语法,或者给我发一个链接,其中更详细地解释个别符号? vim中的帮助不完整
:set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
目前还不清楚?
=~'\\S'?'<1':1
'string1'string2'string3
是什么意思?:1
是什么意思?谢谢
答案 0 :(得分:34)
foldexpr
选项应该包含一个计算的表达式
到指定的特定格式的整数或字符串
数字存储在v:lnum
全局中的行的折叠级别
在评估时变量。
让我们从上到下遵循此foldexpr
示例的逻辑。
getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
在顶层,整个表达式是三元运算符A ? B : C
。
如果B
,运算符的结果是A
表达式的值
计算结果为非零,否则为C
表达式的值
(见:help expr1
)。在这种情况下,B
是字符串文字
'<1'
和C
是1
的数字('<1'
和1
的含义为折叠
级别说明符见:help fold-expr
)。
A
表达式由&&
加入的两个条件组成
操作者:
getline(v:lnum) =~ '^\\s*$' && getline(v:lnum+1) =~ '\\S'
两种情况都具有相同的形式
getline(N) =~ S
getline
函数返回行的内容(在当前
缓冲区)由作为参数传递的行号引用(参见
:help getline
)。评估foldexpr
时,v:lnum
变量包含折叠级别应该为的行数
计算
=~
运算符测试其左操作数是否与常规操作符匹配
由右侧字符串操作数给出的表达式,并返回布尔值
(请参阅:help expr4
,特别是expr4
部分附近的内容)。
因此,A
条件旨在检查v:lnum
- 行
匹配'^\\s*$'
模式和v:lnum
旁边的行 - 第一行
匹配'\\S'
模式。
正则表达式模式在表达式中指定为
字符串文字。字符串文字有两种句法形式,可以是
使用双引号或单引号引用。这些之间的区别
表单是双引号字符串可以包含各种控件
以反斜杠开头的序列。该序列允许指定
不能轻易打字的特殊字符(双引号,
例如 - 它写\"
)。另一方面,单引号字符串,
不允许这样的反斜杠序列。 (有关的完整描述
单引号和双引号字符串请参阅:help expr-string
和:help
literal-string
。)
双引号字符串语法的显着结果是
反斜杠符号本身必须进行转义(\\
)。这就是为什么单身
引用的字符串通常用于指定正则表达式:有
无需经常要求反斜杠符号。人们可以注意到,
尽管如此,反斜杠仍然以这些模式逃脱
以上。这是因为有些符号(包括反斜杠)有
在Ex命令中的特殊含义(当然包括:set
)。什么时候
按 Enter 启动命令
:set foldexpr=...
Vim首先解释一些字符序列(参见:help
cmdline-special
)。特别是,\\
序列被视为
一个反斜杠。
将所有内容放在一起,表达式测试是否行号
v:lnum
在其旁边的行中仅包含空白字符
(编号v:lnum+1
)具有任何非空白字符(请参阅:help pattern
至
掌握模式的意义)。如果是,则表达式求值为
字符串'<1'
,否则评估为1
。