![Nano 语法突出显示格式错误的正则表达式?](https://linux22.com/image/1356007/Nano%20%E8%AF%AD%E6%B3%95%E7%AA%81%E5%87%BA%E6%98%BE%E7%A4%BA%E6%A0%BC%E5%BC%8F%E9%94%99%E8%AF%AF%E7%9A%84%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%EF%BC%9F.png)
我在 google code 上找到了这个用于 nano 的 javascript 语法高亮文件,下载了它并将其包含在我的 /etc/nanorc 文件中:
File: /usr/share/nano/js.nanorc
## all *js files ( e.g. Firefox user.js, prefs.js )
## Old version
#syntax "jsfiles" "(\.|/|)js$"
#color green "//.*$" start="\/\*" end="\*\/"
#color blue "'(\\.|[^'])*'"
#color red ""(\\.|[^\"])*""
#color brightgreen "\<(true)\>"
#color brightred "\<(false)\>" "http\:\/\/.*$"
#color brightmagenta "[0-9](\\.|[^\"])*)"
## New updated taken from http://wiki.linuxhelp.net/index.php/Nano_Syntax_Highlighting
syntax "JavaScript" "\.(js)$"
## Default
color white "^.+$"
## Decimal, octal and hexadecimal numbers
color yellow "\<[-+]?([1-9][0-9]*|0[0-7]*|0x[0-9a-fA-F]+)([uU][lL]?|[lL][uU]?)?\>"
## Floating point number with at least one digit before decimal point
color yellow "\<[-+]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([EePp][+-]?[0-9]+)?[fFlL]?"
color yellow "\<[-+]?([0-9]+[EePp][+-]?[0-9]+)[fFlL]?"
## Keywords
color green "\<(break|case|catch|continue|default|delete|do|else|finally)\>"
color green "\<(for|function|if|in|instanceof|new|null|return|switch)\>"
color green "\<(switch|this|throw|try|typeof|undefined|var|void|while|with)\>"
## Type specifiers
color red "\<(Array|Boolean|Date|Enumerator|Error|Function|Math)\>"
color red "\<(Number|Object|RegExp|String)\>"
color red "\<(true|false)\>"
## String
color brightyellow "L?\"(\\"|[^"])*\""
color brightyellow "L?'(\'|[^'])*'"
## Escapes
color red "\\[0-7][0-7]?[0-7]?|\\x[0-9a-fA-F]+|\\[bfnrt'\"\?\\]"
## Comments
color magenta start="/\*" end="\*/"
color magenta "//.*$"
但是,现在每当我使用 nano 打开任何文件时,都会提示有错误。文件中每一行包含正则表达式的行都会打印此行:
Error in /usr/share/nano/js.nanorc on line 11: Regex strings must begin and end with a " character
我仍然可以打开任何文件,并且语法高亮仍然适用于其他文件类型,但没有 javascript 高亮。
有人能帮我吗?我对 nano 还很陌生(实际上对 linux 也一样),但我看不出这些正则表达式有什么问题……它们都以“s”开头和结尾。
答案1
一个极端但可能出现的情况:
如果在 Windows 上使用 Cygwin,请确保行尾为 Unix 样式 ( \n
),而不是 Windows 样式 ( \r\n
)。我遇到了同样的问题,这是我在 StackExchange 网站上找到的唯一链接。这可能是一个极端情况,但它会导致同样的问题
答案2
一般来说,你可以采取“分而治之”的方法。复制文件。删除一半,尝试配置。如果语法有错误,则错误在文件中的那一半 - 重复(删除一半)。如果没有,则错误在你删除的那一半。使用你分割出来的那一半,然后从中删除另一半,直到找到一行有问题的行。
我不知道文件格式,但我的猜测是
#color red ""(\\.|[^\"])*""
它以“”开头,然后立即以“”结尾,然后中间是正则表达式。我猜你需要转义内部引号:
#color red "\"(\\.|[^\"])*\""