2015-02-13 15:40:18
-
问: 记事本程序非常非常多, 你为什么偏爱Notepad2呢?
-
答: 记事本应该是查看处理文本数据使用最频繁的程序了吧. 你知道, 我自己是做计算的, 也算是业余程序员. 对做计算的人来说, 选择一款趁手的记事本不仅可以提高工作效率, 也可以提高生活质量, 甚至还可以让你多活点时间呢. (笑) 可惜, 微软Windows系统默认的记事本实在是太古老了, 而且这么多年来一直就没有什么大的变化. 当然, 微软这么做有它自己的理由, 同时却也给了其他记事本程序以可乘之机. 正如你所说, 市面上的记事本程序非常多, 或许是所有程序中最多的一类. Wiki上有一个不完全的文本编辑器列表, 如果感兴趣的话可以去看看. 可选择的多了, 争论自然也多, 而人是容易形成偏见的, 形成偏见后就有点宗教战争的感觉来. 比较出名是论战有EMACS PK VI/VIM, UltraEdit PK EmEditor, Notepad++ PK Notepad2, 当然还有其他一些不知名的. 善用佳软有几篇文章对这方面的情况有所介绍. 我对这些倒看得还算开, 也没有什么大的偏见. 我之所以喜欢Notepad2, 是因为我是做计算的, 经常需要打开计算的输出文件查看结果, 这些输出文件大部分都是简单的文本文件, 我只需要简单地打开, 查看, 搜索, 处理一下就可以了. 但我需要经常这么做, 每天可能要做上百次. 所以你就需要一个简单, 快速, 但是又稍微带点高级功能的记事本. 它足够简单, 小巧, 因此打开关闭迅速, 不浪费时间, 同时它也需要内置简单的处理功能, 如正则查找替换, 列编辑, 行处理, 文本块处理等. 另外我也经常需要查看代码或是编辑简单的脚本, 这就需要它支持基本的语法高亮. 我试用过很多记事本程序, 最后发现Notepad2能满足我的绝大部分需要, 同时给我的感觉最好. 所以它就成了我默认的记事本工具.
-
问: Notepad2的汉化版本也已经很多了, 你为什么还要再出一个版本呢? 有必要么?
-
答: 你说的对. 因为记事本是比较简单的程序, 所以很多人学汉化的时候都会拿它来练手. Notepad2是开源的, 可以得到源代码并直接从源代码进行编译, 因此Notepad2有许多不同的编译版本. Notepad2的汉化版本, 就我从网上搜集到的, 就有八九种之多. 比较知名的是tracky, xfly, zhfi和semidio汉化的版本. 这些能在网上找到的汉化版本, 我都试用过, 在汉化时也参考过. 但试用过很多版本之后, 我决定还是要自己编译一个版本. 这不仅是因为我能做, 你知道, 很多程序员都有造轮子的偏执, (笑) 而是因为我对这些版本都不满意, 因为它们缺少一些我需要的重要功能.
-
问: 那你的版本和其他版本相比, 有什么不同呢?
-
答: 我这个版本的汉化是直接在源代码中进行的, 汉化时参考了我所能找到的所有版本. 虽然不敢说是目前最好的汉化版本, 至少也不比其他的差. 更重要的是, 我对Notepad2的源代码进行了三处比较大的改进:
- 默认显示的回车换行符很难看, 我将其改为更美观的形式
- 增加了一些语法高亮方案, 如fortran, matlab, markdown等
- 改进了列编辑功能.
- 对运行命令做了一点小修改
-
问: 什么是列编辑功能? 使用它有什么优势吗?
-
答: 不知你知不知道, Notepad2是基于Scintilla库的, 有好多记事本程序都是基于这个库的. Scintilla的列编辑功能很强大. 可惜的是, 在原版本的Notepad2中这个功能被关闭了, 这样列编辑功能就弱了很多, 使用很不方便. 我将其打开, 让Notepad2支持列选择, 列粘贴, 列插入和列删除, 方便了使用. 列编辑的使用方法和Word里一样, 按住
Alt
键进行列选择, 然后可以进行复制粘贴删除等操作了. 下面是一个示例这种操作对数据处理很有帮助. 但与此相关的还有一个不连续选择的问题, 我没有解决.
-
问: 你是怎么增加新的语法方案的? 要是有人想添加新的语法方案, 要怎么做?
-
答: 这个有点复杂, 我也是试了多次才成功的. 主要参考的是Notepad2自带的
Readme
中的简单说明How to add or modify Syntax Schemes
, 还有下面的资料How to compile NotePad2 and add custom syntax highlighting. 当然最重要的是源代码了, 不是说源代码是最好的文档嘛. 仔细参考已有的语法方案, 多测试, 就够了. -
问: Notepad2有什么缺点么?
-
答: 当然, 任何软件都有缺点. Notepad2的缺点就是文件有中英文夹杂的时候解码有时候会出错, 显示乱码. 这可能和程序作者不属性CJK编码有关. 另一个软件EmEditor是日本人开发的, 它的解码功能就完善很多, 极少出错.
有一些汉化版本在菜单中添加了一些功能, 如添加右键菜单, 关联文件类型, 替换系统记事本. 这些可以利用外部脚本办到, 但添加到菜单中更方便一些. 如果可能, 我会将这些功能逐渐添加进去. 有必要的话, 我也会慢慢添加一些新的功能. 但乱添加功能会使得本来小巧的Notepad2变得臃肿, 就得不偿失了.
-
问: 谢谢你.
-
答: 不客气. 别忘了, 你可以在这里下载到我编译的版本. 它是32位的, 我在32位XP和64位Win 7上都测试过, 可以直接使用. 同时压缩包中还附带了一份配置文件和一个设置脚本. 你要是想用Notepad2替换系统记事本或是添加右键菜单, 直接双击运行
!设置.bat
就可以了.
附: 将系统记事本替换为Notepad2
目前可用的方法有两种
- 直接替换方法
删除系统中所有的notepad.exe, 并用Notepad2将其替换. 步骤如下:
- 结束记事本进程
- 提升权限
- 替换
参考批处理文件
# Language: bat
@echo off
takeown /f c:\windows\notepad.exe
takeown /f c:\windows\system32\notepad.exe
echo 请保存所有已打开的记事本文件
pause
echo 正在结束记事本进程…
taskkill /f /im notepad.exe 2>nul
icacls %windir%\notepad.exe /grant %username%:f /t
icacls %windir%\system32\notepad.exe /grant %username%:f /t
copy /y Notepad2.exe %windir%\notepad.exe
copy /y Notepad2.exe %windir%\system32\notepad.exe
copy /y notepad2.ini %windir%\system32\notepad.ini
echo 替换完成
notepad
此方法虽然可行, 但对系统进行了修改, 可能会引起问题.
- 利用映像劫持
此方法只修改注册表项, 比前一种方法更好. 具体步骤:
- 打开注册表创建如下注册表项:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe
如果无法修改, 需要先右键取得权限.
杀毒软件系统保护功能可能导致无法创建, 若出现此情况, 请先关闭杀毒软件. - 在notepad.exe注册表项中,创建名为
Debugger
的字符串值(REG_SZ
) - 修改字符串值Debugger的数据为Notepad2.exe的完整路径, 最后以
/z
参数结尾.
如"D:\Program Files\Notepad2\Notepad2.exe" /z
恢复时删除相应的注册表项即可.
上面的步骤可利用批处理文件或注册表文件实现.
批处理脚本
# Language: bat
echo 请确认是以管理员权限运行本批处理文件!
cd /d "%~dp0"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v "Debugger" /d "\"%~dp0Notepad2.exe\" /z" /f
rem 恢复
rem reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /f
注册表文件
# Language: reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]
"Debugger"="\"D:\\Xpro\\Notepad2\\Notepad2.exe\" /z"
; 恢复
; [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]