Notepad зависает при открытии больших файлов

Обновлено: 30.06.2024

Notepad++ это бесплатный редактор текстовых файлов (замена стандартного Блокнота) с поддержкой синтаксиса большого количества языков программирования, ориентирован для работы в операционной системе MS Windows.
Этот проект базируется на компоненте Scintilla (очень мощном компоненте для редактирования) написанном на C++ с использованием только Win32 API и STL (что гарантирует максимальную скорость выполнения при минимальном размере программы), распространяется под лицензией GPL.

Сворачивание блоков
Подсветка текста и возможность сворачивания блоков, согласно синтаксису языка программирования.

Поддержка подсветки синтаксиса языков

WYSIWYG - печать на принтере выводит так, как видишь на экране с учётом цвета
Если у вас есть цветной принтер, вы можете печатать ваши листинги программ или что вы хотите в цвете, так как вы видите на экране в окне редактирования, а не в черно-белом варианте.

Настраиваемый пользователем режим подсветки синтаксиса
Данная возможность дает полную свободу пользователю в определении синтаксиса языка программирования: выделение цветом директив и операторов языка программирования, ключевые слова и правила сворачивания части текста для более удобной работы с текстом программы, ключевые слова и другие операторы языка программирования. ( см. скриншоты ).

Авто-завершение набираемого слова
Для большинства поддерживаемых языков программирования, пользователь может сделать его собственный список API функций (или скачать его со страницы скачиваний). Как только файл со списком готов, нажмите Ctrl+Space для запуска данной возможности. Более подробную информацию о возможностях Авто-завершения, вы можете найти в разделе Авто-завершение КакСделать.

Одновременная работа с множеством документов
Вы можете редактировать сразу несколько документов.

Одновременный просмотр нескольких документов
Вы можете просматривать сразу 2 документа. Это подразумевает, что вы можете видеть и редактировать 2 документа в одно и тоже время (скриншот). Вы можете просматривать и редактировать в двух окнах отображения один и тот же документ в разных местах. Изменение документа в одном окне просмотра будет автоматически перемещено во второе окно просмотра ( т.е. вы редактируете один документ, который имеет клона во втором окне просмотра).

Поддержка регулярных выражений Поиска/Замены
Вы можете искать и заменять одну строку в документе, используя регулярные выражения.

Открыть файл, нажать Ctrl+F, перейти на вкладку "Заменить", внизу отметить "расширенный формат"
Если захочется убрать Tab`ы лишние:
Найти: \t
Заменить: - пустое поле (или пробел, или еще что-то - по желанию)

по аналогии можно заменить и клавиатурный Enter или сделать так что бы все слова преобразовать в одну колонну с переносом по Enter после каждого пробела

\n - перенос строки, \r - символ возврата каретки, \t - табуляция. Клавиатурный Enter - это два символа: \r\n

Notepad++ также поддерживает регулярные выражение, если вы не знаете что это и для чего то можете почитать здесь.

Полная поддержка перетягивания фрагментов текста
Вы можете открыть документ, просто перетянув иконку файла на программу. Вы так же можете переместить текст в вашем документе, его часть или отдельное слово, выделив его и перетянув на новое место.

Динамическое изменение окон просмотра
Вы можете установить или изменить положение окон просмотра в любое время (поддерживаются 2 режима : с разделением по вертикали или по горизонтали).

Увеличение и уменьшение текста
Это еще одна отличная функция компонента Scintilla. Просто посмотрите скриншот.

Поддержка большого количества языков
Поддерживаются версии Windows со специальным языковым окружением: Китайским, Японским, Корейским, Арабским и Иврит. Вы можете увидеть Notepad++ на Китайской версии Windows , на Арабской версии Windows и версии Windows с Ивритом в действии.

Пометки
Пользователю достаточно кликнуть на поле пометок (это вертикальная полоска, расположенная справа от поля нумерации строк) или нажать Ctrl+F2 для установки символа пометки текущей строки. Для нахождения пометки, просто нажмите F2 (Следующая пометка) или Shift+F2 (Предыдущая пометка). Чтобы убрать все пометки, нажмите в меню "Поиск" -> "Поиск" -> "Пометки" -> "Убрать все" или "Search" -> "Find" -> "Mark" -> "Clear". Смотрите скриншот.

Поле пометок включается и выключается в следующем пункте меню: Опции -> Настройки -> Правка -> [v] Отображать поле Закладок.

Выделение скобок при редактировании текста
Когда курсор стоит между символами [no] < >[ ] ( )[/no] , оба символа подсвечиваются для удобства, так же это способствует более быстрому определению начала и конца блока.

Запись макросов
Чтобы избавиться от некоторой рутинных действий, вы можете сделать несколько макросов и установить для них клавиши быстрого запуска.

nativeLang.7z - обновляется по мере выхода новой версии.
1. Порядок строк совпадает с оригинальным русификатором и можно проверить разницу в любой программе сранения, например WinMerge. Перевод делался на основе русификатора Дм.Федорова и оригинального, и своего понимания того, что делает тот или иной элемент интерфейса.


В стандартном блокноте для всех версий Windows, начиная примерно с 2001 года, имеется ошибка, про которую практически все знают, но никто не собирается её исправлять. И это понятно, ведь это не критическая уязвимость, ничьей безопасности она не угрожает. Да и пользуется ли кто блокнотом вообще?

Тем не менее, сам факт довольно странный, поэтому мы попробуем найти эту ошибку в коде 64-битного и 32-битного notepad.exe от windows 7, исправим её, и выясним наконец, почему же она возникла. Заключается ошибка в следующем:

Если в блокноте включена опция «перенос по словам» (word wrap), то после сохранения файла начинаются всевозможные глюки: строки начинают разъезжаться, курсор улетает, текст вводится не туда, куда вы ожидаете, и так далее.

Для начала попытаемся поточнее выяснить, что же происходит. Откроем или введём какой-нибудь текст с длинными строками, чтобы они переносились. Сохраним файл. Если теперь попытаться его редактировать, например, добавив слово «синими», строки будут переноситься неправильно, ломая форматирование:


Если уменьшать окно блокнота, строки разрезаются (это видно на заглавной картинке), а при растягивании остаются на месте, не заполняя увеличивающееся окно. Как будто в каждой строке появился жесткий «перевод строки» в том месте, где она заканчивалась в момент сохранения. Видимо текст каким-то образом портится в памяти:


Если же теперь снова сохранить файл, станет ещё хуже. Все строки переформатируются, но окно не обновится. Поэтому курсор может переместиться в другое место, а если начать вводить текст, окажется, что вы вводите его не в то место, где находится курсор, а совсем в другое. Программисты, которые писали notepad, рассуждали логично: при сохранении файла ничего в окне не должно поменяться, поэтому и нет смысла его обновлять. Но в нашем случае с учётом этой ошибки весь текст меняется. Воспроизвести ситуацию может каждый пользователь windows, потому что последняя версия, где этой ошибки не было — Windows'98, и вряд ли у кого она ещё осталась.

Итак, по всей видимости, при сохранении файла что-то идёт не так и текст портится. Как найти это место в коде? Откроем notepad.exe в каком-нибудь отладчике. Как известно, в 64-битной системе для совместимости имеется два блокнота: 32- и 64-битный, надо не перепутать их.

Введём текст, на котором легко будет увидеть, как он портится при переносе строк. Наберём в одну строку «first text line second text line», а затем уменьшим окно так, чтобы она разрезалась посередине.


Резонно будет предположить, что запись делается с помощью функции WriteFile. Оказывается, она вызывается в коде целых 6 раз. Недолго думая, поставим точки останова на все 6 вызовов. Запускаем блокнот и нажимаем «сохранить». Выполнение останавливается здесь:


Посмотрим все регистры, где содержатся параметры вызова. В rcx у нас 104, это непонятно что. A rdx = 002D45E0, это похоже на адрес в памяти. Посмотрим, что там.


Отлично. Отсюда у нас идёт запись. Попробуем выполнить код дальше, чтобы посмотреть, где он портится. Однако почти сразу данные затираются, а это значит, что это всего лишь временный буфер, а сам текст хранится где-то ещё. Посмотрим выше по программе.


Ага, перед сохранением текст видимо преобразовывается из многобайтовой кодировки в однобайтовую. Точно так же, как в прошлый раз, посмотрим параметры. rax = 002D45E0, здесь у нас пока нули. Это как раз то место, куда попадёт результат. esi = 20, это длина текста. есх = 4еЗ, без комментариев. edx = 400, то же самое. А вот r8 = 002D6780:


Снова продолжим выполнение, наблюдая за содержимым этого участка памяти. Через несколько десятков команд мы выходим из подпрограммы, выполняются какие-то переходы, вызовы, но мы, не обращая на это внимания, продолжаем давить на «step over», выполняя код по шагам, и следя только за окном с текстом. И вот в какой-то момент он изменяется. Как видим, между 1 и 2 строкой появились коды 0d, 0d, 0a:


Как обычно бывает, мы проскочили нужную команду, постоянно давя на кнопку, поэтому придётся повторить всё ещё раз, запомнив, где примерно это произошло. Теперь по мере приближения к нужному месту в коде, замедляемся, и точно определяем, что текст испортился вот на этом вызове:


Можно попробовать, что будет, если не делать этот вызов. Снова доходим до этого места, и прямо тут, в отладке, изменяем RIP (регистр, где хранится адрес выполняемого в данный момент кода) на 00000000FFA38EE1, как будто мы пропустили этот call, который нам всё испортил. Удивительно, всё работает, текст не ломается!

Тут надо сказать, что в таких случаях обычно не разбираются, что это за подпрограмма, что она делает и зачем, а просто выкидывают её из EXE-файла. Это можно сделать разными способами, например, забить её всю NOP'ами, или изменить условный переход по равенству «je», который так кстати имеется сразу перед ней, на безусловный «jmp».


Параметр wParam: true — вставить символы, false — удалить их.


Где же здесь параметр, равный 1? Всё очень просто — он в регистре r8. Для сокращения кода компилятор никогда не использует прямую пересылку нуля в регистры. Такая команда занимает б байтов: 2 байта код операции, 4 байта — 32-битный ноль. Вместо этого регистр XOR-ится сам с собой, в итоге получается ноль, и это занимает всего 3 байта. После этого r9, который равен нулю, пересылается в r8 с добавлением единицы (выделена зеленым). Эта операция тоже занимает всего 4 байта. Вот эту зеленую 1 нам и надо поменять на 0, и тогда текст не будет портиться.

А теперь найдём эту же процедуру в 32-битной версии блокнота. Если не хочется повторять все те же манипуляции с отладкой, её можно найти простым поиском числа 0C8h.



Средство чтения больших текстовых файлов

Голый хвост


Это приложение поддерживает просмотр в режиме реального времени и может мгновенно прокрутить вниз до любой строки во всем файле. Кроме того, вы можете использовать это приложение для просмотра файлов по сети, а также поддерживает перенос строк. Кроме того, вы можете изменить шрифт, интервал и другие параметры, связанные со шрифтом. Если вы планируете использовать просмотр в реальном времени, вы можете легко следить за концом файла, независимо от того, насколько быстро он изменяется.

Кроме того, вы также можете просматривать несколько файлов одновременно с помощью вкладок. Вкладки имеют визуальный индикатор, поэтому вы можете видеть состояние файла, не открывая вкладки. Конечно, вы можете переставлять вкладки как по горизонтали, так и по вертикали. Вы также можете выделить любую строку, которую хотите, чтобы лучше заметить ее по всему файлу. Это приложение имеет много замечательных функций, и если вам нужно просмотреть большой текстовый файл, это приложение идеально подойдет для этого.

  • ЧИТАЙТЕ ТАКЖЕ: Блокнот получает улучшения DPI в Windows 10 Anniversary Update

EditPad Lite


LogExpert


Universal Viewer Free


TopGun


Файл слишком большой для Notepad может быть большой проблемой, особенно если вы часто работаете с большими файлами.Вы можете легко решить эту проблему, используя любой из бесплатных инструментов, которые мы упомянули, поэтому обязательно попробуйте их.

Блокнот ++ зависает при закрытии

я использую Notepad++ на Windows 8.1 . До недавнего времени оно закрывалось нормально, когда я нажимал X, но теперь, когда я это делаю, оно не закрывается, а скорее останавливает приложение. Когда я несколько раз нажимаю X, окно становится белым и Windows говорит, что программа больше не отвечает, тогда я могу сделать Windows убить процесс.

Пытаясь решить эту проблему, я удалил его, используя обычный Windows программа удаления программы, но она тоже не сработала, она навсегда застряла на


Поскольку текущий установщик / деинсталлятор не может быть прекращен, я решил убить его, используя Task Manager .

Кажется, проблема с

потому что он используется некоторым процессом, даже когда Notepad ++ не запущен.

  • В вашем вопросе нет информации для диагностики того, что происходит не так.
  • @DavidPostill: Скажите, пожалуйста, что еще добавить?
  • 1 NppShell_06.dll - это интеграция оболочки (открывается с помощью) для notepad ++, поэтому она будет открыта как часть проводника. Вы можете попробовать удалить интеграцию с оболочкой и посмотреть, решит ли это вашу проблему. См. Раздел Как удалить интеграцию оболочки Notepad ++?
  • @DavidPostill: Я хочу сохранить это, но раньше он всегда работал нормально. Когда расширение оболочки отключено или включено, проблема иногда возникает, а иногда нет. Странный.
  • У меня нет других идей: /

Текущее обсуждение в Twitter Notepad ++ заключается в том, что это плагины DSpellCheck или Plugin Manager.

Я удалил DSpellCheck, и эта проблема была исправлена,

Согласно текущему обновлению на веб-сайте Notepad ++, в версии 6.7.9 была ошибка, и они исправили ее в версии 6.7.9.1.

Их заявление:

Читайте также: