【问题标题】:notepad++ select hyphenated textnotepad++ 选择连字符的文本
【发布时间】:2013-05-26 05:35:51
【问题描述】:

对于一直阻碍使用 notepad++ 的问题,我找不到解决方案。

当您双击文本以突出显示该文本和其他类似的文本时,camelCaseunder_score 单词效果很好,但是当hyphen-words-are-clicked 不会将其视为单个单词,而只会突出显示“-”之间的部分。

问题:如何自定义notepad++,以便将连字符的单词视为单个单词?或者有人知道这样做的文本编辑器吗?

看到了这个,但不知道如何实现它:http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Word_Customisation

这真的很有帮助:Where are the recorded macros stored in Notepad++?

【问题讨论】:

  • 好久没问了。你还在用 Notepad++ 吗?
  • @benny-ben 切换到 sublime text

标签: text-editor notepad++


【解决方案1】:

Notepad++ 依赖 Scintilla 进行单词选择。正如 caoanan 在他的回答中注意到的那样,可以使用 SCI_SETWORDCHARS 变量配置 Scintilla。您可以使用简单的 NppExec 脚本在 Notepad++ 中设置此变量:

  1. 安装 NppExec
    • 菜单Plugins -> plugin Manager -> Show Plugin Manager
    • 找到 NppExec,选中复选框并点击安装
  2. 创建脚本

    • 菜单Plugins -> NppExec -> Execute ...
    • 编写此代码(您可以在列表末尾添加其他字符,例如 .$#@):

      NPP_CONSOLE 0
      sci_sendmsg SCI_SETWORDCHARS 0 "CDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-"
      
    • 点击保存...
    • 您现在可以通过按 OK 来执行它
  3. (可选)Notepad++ 启动时执行
    • 菜单Plugins -> NppExec -> Advanced Options...
    • Notepad++ 启动时执行此脚本下拉菜单中选择您的脚本

【讨论】:

  • 这对我有用,但我必须使用以下字符集(不知道为什么原版对我不起作用:“abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-”
  • @Damien 我试过了,但是当我移动到另一个文件时,我每次都必须再次运行脚本。能避免吗?
  • 如何将我的答案标记为已弃用?使用当前版本的 Notepad++,Benny 解决方案更好
【解决方案2】:

2018

我尝试使用已发布的解决方案,但是当我移动到另一个文件时,我每次都必须再次运行该脚本。所以我这样做了,在菜单中:

Settings > Preferences > Delimiter

选择:

  • 将您的字符添加为单词的一部分

插入连字符:

-

它成功了。

【讨论】:

    【解决方案3】:

    我在使用 Notepad++ 编辑 Lisp/Scheme 源代码时遇到了同样的问题。

    解决方法在于底层的 Scintilla 库 (SciLexer.dll)。

    我尝试了一种“直率”的方式——破解代码并重建 SciLexer.dll。
    注意以下代码中添加的'-'

    CharClassify.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");

    【讨论】:

      【解决方案4】:

      http://sourceforge.net/p/notepad-plus/discussion/1290590/thread/39ba5cd8/

      安装 Npp_Exec 插件并从此线程复制字符串,添加您希望 Npp 将其视为单词的一部分的符号。

      【讨论】:

        【解决方案5】:

        我还不知道 Notepad++ 中的那个选项。因为,您已经询问过任何其他这样做的文本编辑器,我建议您使用Sublime Text。这是一个非常酷的文本编辑器,具有许多智能功能。我打赌你会喜欢的。默认情况下,它不会将连字符的单词视为单个单词。但是为此自定义设置太容易了。您需要做的就是转到'Preference-&gt; Setting-Default',您会在其中找到以下设置:

        "word_separators": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?",
        

        从那里,只需删除连字符,我们就完成了!

        【讨论】:

          【解决方案6】:

          解决方法是:

          • 在“查找”窗口中,将要查找的文本设置为空格

          • 在快捷方式映射器(主菜单部分)中,将“查找下一个”分配给 Ctrl+Right,将“查找上一个”分配给 Ctrl+Left

          现在,只要搜索文本只是一个空格,它实际上就是唯一的分隔符。如果您需要其他分隔符,例如逗号和句点,请将 Find 文本设置为 [ ,.]。

          【讨论】:

            【解决方案7】:

            如果您没有管理员权限且没有插件管理器,则可以通过下载 dll/zip 文件并将 dll 保存到 npp 安装下的“插件”子文件夹来安装大多数插件。然后重启npp。

            【讨论】:

            • 不,他们没有——每个人都认为其他阅读帖子的人要么拥有管理员权限,要么知道如何在没有管理员权限的情况下安装。我已经修正了这个假设。我在工作中没有管理员权限,我以前从未使用过 npp,而且我发现很难找到关于如何在没有管理员权限的情况下安装我的第一个插件的说明。事实上,我什至不确定这是否可能。任何没有插件经理的人找到这篇文章都会受到启发。
            猜你喜欢
            • 1970-01-01
            • 2016-08-06
            • 1970-01-01
            • 1970-01-01
            • 2012-01-02
            • 2011-09-21
            • 2021-07-19
            • 1970-01-01
            • 2016-10-14
            相关资源
            最近更新 更多