Блокнот + выберите текст с переносом

Я не мог найти решение проблемы, которая мешала использованию блокнота ++.

Когда вы дважды щелкаете текст, чтобы выделить этот текст и другие подобные ему слова, слова camelCase или under_score работают отлично, но когда hyphen-words-are-clicked это не воспринимается как одно слово и выделяет только сегмент между "-".

вопрос:, как вы можете настроить блокнот ++, чтобы переносимые слова обрабатывались как одиночные слова? или кто-нибудь знает текстовый редактор, который делает это?

видел это, но не уверен, как его реализовать: http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Word_Customisation

Это было действительно полезно: Где хранятся записанные макросы в Notepad ++?

Ответ 1

Notepad ++ полагается на Scintilla для выбора слов. Как заметил caoanan в своем ответе, Scintilla можно настроить с помощью переменной SCI_SETWORDCHARS. Вы можете установить эту переменную в Notepad ++ с помощью простого NppExec script:

  • Установить NppExec
    • Меню Plugins -> plugin Manager -> Show Plugin Manager
    • найдите NppExec, установите флажок и нажмите Install
  • Создайте script

    • Меню Plugins -> NppExec -> Execute ...
    • напишите этот код (вы можете добавить другие символы, например: $# @в конце списка):

      NPP_CONSOLE 0
      sci_sendmsg SCI_SETWORDCHARS 0 "CDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-"
      
    • нажмите Сохранить...
    • Теперь вы можете выполнить его, нажав OK
  • (optionnal) Выполняется при запуске Notepad ++
    • Меню Plugins -> NppExec -> Advanced Options...
    • Выберите script в Execute this script, когда Notepad ++ начнет выходить вниз

Ответ 2

Я столкнулся с той же проблемой при редактировании исходных кодов Lisp/Scheme с помощью Notepad ++.

Лечение лежит в базовой библиотеке 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

Я еще не знаю этого параметра в Notepad ++. Поскольку вы спросили о любом другом текстовом редакторе, который делает это, я бы рекомендовал вам использовать Sublime Text. Это действительно классный текстовый редактор с множеством умных функций. Держу пари, тебе понравится. По умолчанию он не рассматривает переносимые слова как одно слово. Но это слишком легко настроить настройки для этого. Все, что вам нужно сделать, это перейти в 'Preference-> Setting-Default', где вы найдете следующую настройку:

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

Оттуда просто удалите дефис, и мы закончили!

Ответ 5

Обходной путь:

  • В окне "Поиск" установите текст для поиска в пространстве

  • В ярлыке ярлыка (раздел главного меню) назначьте "Найти дальше" Ctrl + Right и "Найти предыдущий" в Ctrl + Left

Теперь, пока текст поиска - это просто пробел, он будет фактически единственным разделителем. Если вам нужны другие разделители, например запятая и период, установите текст поиска в [,.].

Ответ 6

Если у вас нет прав администратора и нет Plugin Mgr, вы можете установить большинство плагинов, загрузив файл dll/zip и сохранив dll в подпапку "plugins" под вашей установкой npp. Затем перезапустите npp.