在使用 Notepad++ 编辑 Lisp/Scheme 源代码时,我遇到了同样的问题。
解决方法在于底层的 Scintilla 库 (SciLexer.dll)。
我以一种“直率”的方式尝试过——破解代码并重建 SciLexer.dll。
请注意添加到以下代码中的“-”
字符分类.cxx
void CharClassify::SetDefaultCharClasses(bool includeWordClass) {
// Initialize all char classes to default values
for (int ch = 0; ch < 256; ch++) {
if (ch == '\r' || ch == '\n')
charClass[ch] = ccNewLine;
else if (ch < 0x20 || ch == ' ')
charClass[ch] = ccSpace;
else if (includeWordClass && (ch >= 0x80 || isalnum(ch) || ch == '_' || ch == '-'))
charClass[ch] = ccWord;
else
charClass[ch] = ccPunctuation;
}
}
或者,如ScintillaDoc.html中所述的“智能”方式
SCI_SETWORDCHARS(<unused>, const char *characters)
Scintilla 有几个对单词进行操作的函数,这些单词被定义为来自特定字符集的连续字符序列。此消息定义哪些字符是该集合的成员。在处理此函数之前,字符集被设置为默认值。例如,如果您的字符集中不允许使用“_”,请使用:SCI_SETWORDCHARS(0,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");