所以我正在学习Vimscript和Regex。我正在尝试检测当前行是否为空。空是指""
或" "
(任意数量的空格/制表符):
function! IsCurrentLineEmpty()
return IsLineEmpty(getline('.'))
endfu
function! IsLineEmpty(line) // returns 1 if the line is empty, 0 otherwise
if match(a:line, "^\s*$") != -1 // also tried \s+ instead of \s*
return 1
endif
endfu
如果我将光标放在空行或空格/制表符上,IsCurrentLineEmpty
总是返回0
我尝试了其他正则表达式,例如^[ \t]+|[ \t]+$
(\s\t
和\s
而不是' \t'
),但没有一个正常工作。
任何帮助将不胜感激!感谢。
答案 0 :(得分:3)
正如@vexe所指出的,你只需要逃避反斜杠。但您也可以简化您的功能:
function! IsLineEmpty(line)
return match(a:line, "^\\s*$") != -1
endfu
另一种解决方案是使用单引号而不是双引号:
return match(a:line, '^\s*$') != -1
另一个解决方案是使用Vim的正则表达式匹配运算符:
return line =~ '^\s*$'
或者,您可以测试该行是否包含任何非空白字符:
return line !~ '[^\s]'