【问题标题】:Vimscript regex empty lineVimscript 正则表达式空行
【发布时间】:2018-03-31 00:36:49
【问题描述】:

所以我正在学习 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'),但没有一个真正奏效。

任何帮助将不胜感激!谢谢。

【问题讨论】:

  • 尝试使用'^\s*$'"^\\s*$" 而不是"^\s*$"
  • 谢谢!忘记了我必须逃避反斜杠。如果需要,请转换为答案。

标签: regex vim


【解决方案1】:

正如@vexe 所指出的,您只需要转义反斜杠。但你也可以简化你的功能:

function! IsLineEmpty(line)
    return match(a:line, "^\\s*$") != -1
endfu

另一种解决方案是使用单引号而不是双引号:

return match(a:line, '^\s*$') != -1

另一种解决方案是使用 Vim 的正则表达式匹配运算符:

return line =~ '^\s*$'

或者,您可以测试该行是否包含任何非空白字符:

return line !~ '[^\s]'

【讨论】:

    猜你喜欢
    • 2017-10-21
    • 1970-01-01
    • 2022-11-03
    • 2012-07-03
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多