相信许多人都是从NotePad++开始接触代码的。最开始为游戏编写脚本的我,自然也不例外。
这款软件绝对堪称经典,作为和使命召唤4同时期的产物,在今天看来,他的身上仍然有着许多亮点。比如ALT+SHIFT按列选择
、全文搜索
、好用的正则表达式
集成、特别好用的宏录制
、插件系统
等常用功能。
单单宏录制这一点,Android Studio/IDEA 就被打败了,Android Studio 的宏录制无法很好地记录文本替换操作,比如替换剪贴板内容,Android Studio根本就不会记录下粘贴来的、要被替换地文本,除非你一个字母一个字母地打出来。
NotePad++的全文搜索界面虽然没有Android Studio好看,也无法实时修改,但胜在能同时保留多个搜索结果,至今仍然风光无两。配合多实例模式,更是用起来如鱼得水。
文档列表面板
此乃将所有标签页列出来的左侧面板。(缺点是不能搜索无法拖动。)可以配合快捷键 Ctrl/Command + Shift + PageUp/Down 移动标签页。
我的想法是,当此面板有显示的时候,用CTRL+TAB切换标签页就可以直接不显示原来的对话框了,岂不美哉?
列选 ALT + 鼠标拖动
快速列选 左键点击,ALT + SHIFT + 左键点击
切换标签页 Ctrl + Tab
向上切换标签页 Ctrl + SHIFT +Tab
移动标签页 Ctrl + SHIFT +PAGE UP / PAGE DOWN
代号:NOTMAD
NotMad
的含义:代码可以疯狂YY,海阔天空无垠无限。但口出狂言就是不对了,滥用影响力实在令人扼腕叹息!
编译:PowerEditor模块可以直接编译,核心组件需要boost。(偷懒可以直接复制发行版中的dll文件。)
我的改进当然集中在界面和用户体验上,核心库我可改不了,没那个精力,那得需要个专家才行。
⛲⛲⛲⛲⛲⛲⛲⛲
经典的小图标还算养眼,但大图标看起来太扎眼,满满的荆棘感。于是,修改一波走起!直接复用Android Studio自带的向量图标库,先用我的Vector Path Tweaker 简单编辑,然后让AS自动生成v4 hdpi的png图片,最后PhotoPea中润色一下就可以导出.ico文件给notepad++用了!让notepad++也Material Design起来吧!
虽然挺累,但结果我挺满意,且没有任何版权问题(试问Apache协议+GPL协议===???)。其中,“保存”
的图标是图库原图,我的解读如下:整体外形代表文件或文件系统,矩形代表存储区域,一个点代表一个磁头。这样,“保存全部”的图标,由file图标+storage图标
“合成”而来,其画面上含有多个磁头和多个存储区域,也就可以解读成多次写入了。
原版,正则表达式默认不可以向后搜索,虽然有一点问题,但其实是可以的。
正则表达式不支持全词匹配?来来来,是谁告诉你的,看我不打爆它的狗头,不就是首尾自动添加\b
嘛?
左侧文档列表(document list panel /doc swicther)
只能在设置中打开关闭,但其实应该在视图菜单中增设选项。
我认为更恰当的名字是Tab List,标签列表
。不过,这都是第三个名字了……
参考 https://github.com/notepad-plus-plus/notepad-plus-plus/issues/3526
模态形式的捷键对话框存储在栈空间,打开时无法操作主程序,关闭后立即销毁,无法长存。
快捷键对话框有搜索、定制的功能,理应长存,至少保留一定时间的上下文,不然,每次操作都要重新打开对话框、重新定位,岂不累死烦死?
修改为非模态形式客参考 Style Configurator (搜索IDM_SETTING_SHORTCUT_MAPPER、IDM_SETTING_SHORTCUT_MAPPER), 在 NppCommands.cpp 中处理,实例化Notepad_plus.cpp中已经定义的_pShortcutMapper指针变量,然后显示之。
5.1 固定对话框
使跳转对话框可多次使用。而不是“定位”一下就关闭了。
5.2 记忆跳转行
关闭后仍然记得上次我要他跳转的行位置。(其实是不清空)
5.3 放宽输入限制
手写_ttoi
函数,高鲁棒地将TCHAR转换为int,可识别aaa123aaa
中的数字123
。
5.4 支持行偏移
支持行偏移比如:123:10
,定位第123行第10列。
Notepad++的插件,默认是不支持显示大图标的,只有经典图标可供放置在工具栏上面。
现改进此项不足,让插件支持大图标。以 LocationNavigate 插件为例,增制了四个图标:
支持大图/小图标的动态切换,然后为插件提供了默认的大图图标,图中是PythonScript :
将 LocationNavigate 迁至64位还是花费了些功夫,主要之前不熟悉win32的API,比如64位需用LONG_PTR、GetWindowLongPtr、SetWindowLongPtr
替换LONG、GetWindowLong、SetWindowLong
,不然寻址出错,会报Access Violation。
令人欣喜的是,修改后,适配了修改版Notepad++的插件仍然兼容普通版本。