支持按行号区域文本选择的NotePad++插件开发

Notepad++ 学习(二)快捷键大全:提升工作效率的必备指南 阅读详情

           最近发现NotePad++不支持按行号区间的文本复制,就想自己动手开发一个NotePad++插件,支持输入起始行号和结束行号,然后复制该区域的文本到新文档或者复制到系统剪切板,方便文本的操作。效果如下图:

   

        本文主要介绍NotePad++插件开发的基本流程以及相关的注意点。

1、Notepad++介绍

Notepad++是使用C++开发的开源免费的文本编辑器,它是一个多国语言版的编辑器,包含简体中文,使用它可以方便地编辑C、C++、Java、C#、XML、HTML、PHP、CSS等等纯文本文件,支持正则搜索、文件夹搜索、编码转换、文件比较等,可以媲美UltraEdit,最重要的是支持自己扩展插件的开发。

NotePad++官方网站的地址是:http://notepad-plus-plus.org/

Sourceforge地址:http://sourceforge.net/apps/mediawiki/notepad-plus

另外,Npp是基于开源控件Scintilla 开发的。Scintilla官网地址:http://www.scintilla.org/

插件中心:http://docs.notepad-plus-plus.org/index.php/Plugin_Central

2、NotePad++开发过程

      开发一个NotePad++插件大概需要六步:

      第一,下载Np++插件模板工程(http://notepad-plus.sourceforge.net/commun/pluginDemoTemplate/NppPluginTemplate.zip),并且解压到本地。

       第二,用VS打开工程中的NppPluginTemplate.vcproj 项目,可以重命名该工程。

    第三,在PluginDefinition.h头文件中定义插件名字,即

     const TCHAR NPP_PLUGIN_NAME[] = TEXT("Notepad++ plugin template");

    第四,定义插件中菜单的个数const int nbFunc = 2;

    第五,在PluginDefinition.cpp中将菜单名字和回调函数绑定。

    第六,实现相关菜单的回调函数。

3、与NotePad++主界面交互的主要数据结构

a.交互句柄

struct NppData {
	HWND _nppHandle;
	HWND _scintillaMainHandle;
	HWND _scintillaSecondHandle;
};

该数据结构包含和NP++的交互的句柄,其中包含主窗口和次窗口句柄。该数据成员在加载插件的时候传入,以供插件和NP++主界面进行消息交互。

通过接口extern "C" __declspec(dllexport) void setInfo(NppData notpadPlusData)传入到插件,编写插件时,需要保存传过来的 notpadPlusData的值。

 b.菜单与回调函数绑定

  

struct FuncItem {
	TCHAR _itemName[nbChar];
	PFUNCPLUGINCMD _pFunc;
	int _cmdID;
	bool _init2Check;
	ShortcutKey *_pShKey;
};
 该结构定义了插件菜单名与相应的回调函数的对应关系。如

//注册菜单回调函数
FuncItem CRunlogMenu::arrFuncItems[N_NBFUNCITEMS] = {
    { TEXT("Line Range Copy"), funcRangeCopy, 0, false, NULL },
    //{ TEXT("Statistics"),           funcStatistics,     0, false, NULL },
    { TEXT(""),                      NULL,             0, false, NULL }, // separator
    { TEXT("About"),                 funcAbout,        0, false, NULL }
};


4、与NotePad++的消息交互

   与主界面的交互都是通过发送NPPM_开头的消息进行的,如获取当前文件的全路径名:

TCHAR str[100];
int strLen = 100;
::SendMessage(m_nppData._nppHandle, NPPM_GETNPPDIRECTORY, (WPARAM) strLen, (LPARAM) str);
其他相关的NPPM_消息的介绍见: http://docs.notepad-plus-plus.org/index.php/Messages_And_Notifications

5.获取当前文档文本相关属性

  操作当前文本都是通过SCI消息来获取,如获取选择的文本内容

   首先获取当前文档句柄:  

int currentView = 0;
    SendNppMsg( NPPM_GETCURRENTSCINTILLA, 0, (LPARAM) ¤tView );
    return ( (currentView == 0) ?
      m_nppData._scintillaMainHandle : m_nppData._scintillaSecondHandle );
然后采用该句柄发送SCI_GETSELTEXT消息

::SendMessage(m_hSciWnd, uMsg, wParam, lParam);

下面给出几个比较重要的SCI消息,用于在开发插件的过程中参考:

SCI_GETTEXTRANGE(<unused>, Sci_TextRange *tr)
This collects the text between the positions cpMin and cpMax and copies it to lpstrText (see structSci_TextRange in Scintilla.h). If cpMax is -1, text isreturned to the end of the document. The text is 0 terminated, so you mustsupply a buffer that is at least 1 character longer than the number ofcharacters you wish to read. The return value is the length of the returnedtext not including the terminating 0.

 

获取总行

SCI_GETLINECOUNT
This returns the number of lines in thedocument. An empty document contains 1 line. A document holding only an end ofline sequence has 2 lines.

 

获取文档总字节数SCI_GETTEXTLENGTH
SCI_GETLENGTH

Both these messages return the length of thedocument in byte

 

获取文档是否修改

SCI_GETMODIFY
This returns non-zero if the document ismodified and 0 if it is unmodified. The modified status of a document is determinedby the undo position relative to the save point. The save point is set by SCI_SETSAVEPOINT, usually when you have saved data to a file.

 

选择文本

SCI_SETSEL(int anchorPos, intcurrentPos)
This message sets both the anchor and the currentposition. If currentPos is negative, itmeans the end of the document. If anchorPos is negative, itmeans remove any selection (i.e. set the anchor to the same position as currentPos). The caret is scrolled into view after this operation.

 

跳到某一行

SCI_GOTOLINE(int line)
This removes any selection and sets the caret atthe start of line number line and scrolls the view(if needed) to make it visible. The anchor position is set the same as thecurrent position. If line is outside the linesin the document (first line is 0), the line set is the first or last.

 

获取当前的位置

SCI_GETCURRENTPOS
This returns the current position.

 

获取鼠标位置SCI_GETANCHOR
This returns the current anchor position.

 

选择所有文本

SCI_SELECTALL
This selects all the text in the document. Thecurrent position is not scrolled into view.

 

获取某行的首位置

SCI_POSITIONFROMLINE(int line)
This returns the document position thatcorresponds with the start of the line. If line is negative, the positionof the line holding the start of the selection is returned. If line is greater than the lines in the document, the return valueis -1. If line is equal to thenumber of lines in the document (i.e. 1 line past the last line), the returnvalue is the end of the document.

 

获取某行的长度

SCI_LINELENGTH(int line)
This returns the length of the line, includingany line end characters. If line is negative orbeyond the last line in the document, the result is 0. If you want the lengthof the line not including any end of line characters, use SCI_GETLINEENDPOSITION(line) - SCI_POSITIONFROMLINE(line).

 

拷贝当前选择的文本

SCI_GETSELTEXT(<unused>,char *text NUL-terminated)
This copies the currently selected text and aterminating 0 byte to the text buffer. The buffersize should be determined by calling with a NULL pointer for the textargument SCI_GETSELTEXT(0,0). This allowsfor rectangular and discontiguous selections as well as simple selections. See MultipleSelection for information on how multipleand rectangular selections and virtual space are copied.


6、注意事项

        对于Unicode模式下文本的操作需要转换,否则会出现乱码:

#ifdef UNICODE
   WCHAR	wText[65];
   ListView_GetItemText(_hListCtrl, _pCurProp->cursorItem, _pCurProp->cursorSubItem, wText, SUBITEM_LENGTH);
   wText[_pCurProp->cursorPos] = (TCHAR)wParam;
   ::WideCharToMultiByte(CP_ACP, 0, wText, -1, text, SUBITEM_LENGTH, NULL, NULL);
#else
   ListView_GetItemText(_hListCtrl, _pCurProp->cursorItem, _pCurProp->cursorSubItem, text, SUBITEM_LENGTH);
#endif

PS:附本次开发的基于行号文本区域复制的插件下载地址,解压后将NppPluginTextSelect.dll放在NotePad++的安装目录Notepad++\plugins下即可,然后重新启动NotePad++软件,在【插件】菜单中查找【Text Selection Helper】菜单项。

http://download.youkuaiyun.com/detail/xiaoding133/8912559

Notepad++:程序员首选的多功能文本编辑器 Notepad++ 是一款广受欢迎的源代码编辑器,它不仅免费,还具备强大的功能,专为满足程序员和开发者的需要而设计。Notepad++ 以其轻量级、易于使用且可高度扩展的特点脱颖而出,在业界拥有大量的用户群体。它支持插件扩展,可以实现包括语法高亮、代码折叠、多语言支持、自动完成代码、查找和替换等在内的高级编辑功能。Notepad++ 的核心优势在于它的可定制性。它允许用户根据个人偏好和项目需求,通过安装不同的插件来增强编辑器的功能。 阅读详情

相关推荐

Notepad++源代码编辑器深入解析

Notepad++是一款广受欢迎的开源文本和源代码编辑器,专为Windows操作系统设计。它以轻量级、高效能为特点,支持多种编程语言的语法高亮,并且具备强大的代码编辑功能。不仅如此,Notepad++还提供了插件系统,允许用户根据自己的需求进行扩展。本章将对Notepad++的背景及其主要功能做一个概览,为后续章节的深入讨论打下基础。尽管Notepad++已经支持众多语言,但总有一些特定的脚本或标记格式可能尚未内置支持。

weixin_42388898的博客 4298

notepad++获取指定范围列内容

使用场景:一次使用通用电商商品信息查询API,

dj1540225203的博客 4389

全面解析Notepad++的安装与高级配置

本文还有配套的精品资源,点击获取 简介:本文详细介绍了Notepad++这款免费且功能强大的源代码编辑器的安装过程,并解释了安装后各主要文件的功能。文章还提供了如何进行高级配置的方法,让Notepad++更加符合个人使用习惯,以及其作为文本编辑器的便捷性,适合不同层次的用户提高工作效率。 1. Notepad++安装详解 安装Notepad++是一个直接而高...

weixin_42515392的博客 2259

notepad++查询指定内容并复制

要求查询文本内容中所有的。

weixin_43401380的博客 7365

Notepad++ 64位环境下的HexEditor插件使用指南

HexEditor 插件为 Notepad++ 添加了强大的二进制编辑能力,支持在 Notepad++ 中直接进行十六进制级别的查看和编辑操作。它提供了直观的十六进制界面,并能同时显示 ASCII 字符表示,极大地便利了开发者处理二进制文件。安装 HexEditor 插件的过程非常简单,只需通过 Notepad++ 的插件管理器即可轻松完成。以下是安装步骤:打开 Notepad++。进入 "插件" 菜单,选择 "插件管理器"。在插件管理器中,选择 "可用" 标签页。

weixin_30661119的博客 1149

Notepad++官方版安装指南与功能介绍

Notepad++是一个开源、免费的文本和源代码编辑器,由Don Ho在2003年首次发布,专为Windows操作系统设计。由于其轻量级、高效、功能丰富且扩展性强,迅速在开发者社区中获得青睐。与传统的Notepad不同,Notepad++提供语法高亮、代码折叠、插件支持等高级特性,使其成为专业开发人员不可或缺的工具之一。Notepad++的菜单栏位于主窗口的最上方,包含文件、编辑、搜索、视图、编码、插件、帮助等常用操作选项,这些选项允许用户执行各种文本编辑任务。

weixin_28922227的博客 1152

notepad 列选择

notepad  支持列选择,按住alt键进行选择就可以选择我们想要选择的列

mmggcc的专栏 1197

关于DHCP Option60的认识

<br />       最近在网络建设过程中,必须面对一个实际存在的问题:当只有一根线入户时,该如何解决CATV和宽带业务的共存呢?这时就要考虑用到DHCP Option60了,那么DHCP Option60到底是如何来实现业务区分的呢?<br />首先先来看下DHCP协议,在DHCP协议中,定义了一个option字段,该字段主要是用来扩展DHCP协议的,Option 60 (Vendor class identifier)是DHCP报文中的一个选项字段,code为60,可以标识终端类型,根据不同的终

luoyingchuan的专栏 7940

安装vscode后该注意哪些设置

vscode配置基本配置Tab 键化为空格统一结束符安装NPM安装yarn引用 基本配置 vscode安装后虽然可以直接使用,但如果完成以下简单设置不仅可以提高开发效率,还可以避免一些出乎意料的错误。 Tab 键化为空格 首先,我们先观察右下角的状况是否为空格,如果如下图所示,那么即是使用将tab键替代为两个空格了,这里是可以点击的,不妨试试。 然后在设置面板里使用如下配置,将Tab Size的值设置为2。 统一结束符 项目上线、项目协作,如果不注意结束符的统一,可能会发生难以察觉的错误,为了避免这些错

kramer_light的博客 1289

0基础手把手搭建 Trae\+Seedance2\.0 真人短剧生成智能体(可直接运行)

前言:本文专为0基础新手编写,全程无复杂代码、无专业术语,一步一截图提示(操作路径清晰),只需跟着点鼠标、复制粘贴,就能搭建出可自动生成真人短剧的智能体,生成的短剧可直接导出发布。核心工具:Trae(字节跳动AI IDE,免费)+ Seedance2.0(真人视频生成API,公测免费),无需提前学习编程、设计,全程10-15分钟搞定。 适用人群:0基础小白、想快速生成真人短剧(自媒体、短视频创作者)、无需懂技术即可实现自动化短剧生成的人群。

skygulangfendouz的专栏 1058

lighttools用透镜旋转手动创建菲尼尔透镜

学过很多软件,都没有留下痕迹,很多年之后只记得学过的软件常用的一些功能,稍微难一些的再次用起需要重新学,但如果留下点痕迹,重新再用就会很快。lighttools无意之中接触了,记一点点笔记吧。...

kingsai2012的博客 4329

在Notepad++中快捷选中多行

选取第line1到line2行: [Ctrl] + G : 输入目标行数line1 单击右键:Begin/End Select [Ctrl] + G : 输入目标行数line2 单击右键:Begin/End Select

mercy_ps的博客 5360

SPSSAU 中介效应分析实战:Bootstrap 95%置信区间解读的3个关键步骤

本文详细解析了SPSSAU中介效应分析中Bootstrap 95%置信区间的解读方法,涵盖三种典型场景的判别标准与应对策略。通过实战操作指南,帮助研究者准确判断中介效应显著性,特别针对边界模糊和小样本情况提供专业建议,提升统计分析结果的可靠性。

weixin_33691817的博客 497

我的Notepad++插件推荐

从167个插件中推荐22个实用插件

硫酸锌01的博客 1万+

深入解析HAL_UART_Receive_IT:如何高效配置串口中断接收

本文深入解析了STM32 HAL库中`HAL_UART_Receive_IT`函数的工作原理与高效配置方法。该函数并非直接接收数据,而是作为中断接收的启动器和配置器,通过开启相关中断,由`UART_Receive_IT`在后台完成数据搬运。文章详细对比了中断与轮询模式的区别,并提供了不定长数据接收的完整实战流程、常见问题避坑指南及高级应用技巧,帮助开发者构建稳定高效的串口通信。

weixin_29162439的博客 629

解决WSL2网络隔离:Ubuntu子系统共享Windows代理的3种方法

本文详细解析了WSL2的网络隔离特性,并提供了三种在Ubuntu子系统中共享Windows代理的实用方法:环境变量法、配置文件法和系统服务法。通过具体代码示例和方案对比,帮助开发者快速解决WSL2网络访问问题,实现一键设置代理,提升开发效率。

weixin_29295541的博客 450

从入门到精通:Notepad++ 使用秘籍大公开

Notepad++是一款功能强大的免费开源文本编辑器,支持27种编程语言的语法高亮和代码折叠。文章从基础操作到高级功能全面介绍了其使用方法:包括文件管理、多行编辑、列编辑、书签功能等核心技巧;详细讲解了插件安装方法,推荐了NppFTP、Compare等实用插件;还提供了界面主题、快捷键、代码模板等个性化设置指南。通过系统讲解Notepad++的各项功能,帮助用户提升文本编辑和代码编写效率,打造专属的编辑器环境。

大雨淅淅的博客 1万+

PyTorch GPU版本安装避坑指南:解决RuntimeError: No CUDA GPUs are available报错

本文详细解析了PyTorch GPU版本安装过程中常见的`RuntimeError: No CUDA GPUs are available`报错问题,从硬件驱动检查、CUDA Toolkit与cuDNN安装到PyTorch GPU版本的正确配置,提供了全面的避坑指南和实战验证方法,帮助开发者高效搭建深度学习开发环境。

r2s3t4的博客 296

Notepad++ 使用技巧

自定义界面与设置用户可以根据自己的喜好自定义 Notepad++ 的界面和设置,如更改主题和配色方案、创建自定义快捷键、调整编辑器首选项等。插件扩展Notepad++ 支持插件,通过“插件”菜单可以安装各种插件,以扩展其功能。例如,Find in Files 插件允许在多个文件中同时搜索;AutoHide 插件可以自动隐藏工具栏和状态栏以获得更干净的工作区;XML Tools 插件简化 XML 文档的编辑和验证等。导入导出语法风格。

2403_86762465的博客 2591

单光子雪崩二极管(SPAD):原理、极高增益机制与微光探测解析

本文系统阐述了单光子雪崩二极管(SPAD)的工作原理及其在弱光探测中的应用。SPAD通过工作在盖革模式下的碰撞离化效应实现单光子探测,其核心机理包括:1)采用p+-n-n+结构实现高电场分布;2)通过雪崩倍增过程获得10^6量级增益;3)采用主动/被动淬灭机制实现快速恢复。文章详细分析了SPAD的关键性能参数(如光子探测效率、暗计数率等)及其在量子通信、激光雷达等领域的应用优势,揭示了该器件在极微弱光信号探测中的独特价值。

Fun_LiDAR的博客 1041

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【无标题】notepad++的使用

要剪切文本,请选择要剪切的文本,然后在菜单栏中选择“编辑”>“剪切”,或使用快捷键“Ctrl + X”。要复制文本,请选择要复制的文本,然后在菜单栏中选择“编辑”>“复制”,或使用快捷键“Ctrl + C”。要粘贴文本,请将光标放置在要粘贴文本的位置上,然后在菜单栏中选择“编辑”>“粘贴”,或使用快捷键“Ctrl + V”。要查找文本,请在菜单栏中选择“搜索”>“查找”,或使用快捷键“Ctrl + F”。要替换文本,请在菜单栏中选择“搜索”>“替换”,或使用快捷键“Ctrl + H”。

m0_59912950的博客 4376

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Notepad++的高级功能及插件使用说明(含安装包)

Notepad++ 的高级功能和插件使得这款文本编辑器更加强大和灵活。

laochao2020的博客 2774

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Notepad++ 安装配置全攻略:从版本选择到效率插件实战

文本编辑器是程序员和系统管理员处理代码、配置文件和日志的基础工具,其核心价值在于轻量、快速响应和高度可定制性。在众多编辑器中,Notepad++ 因其免费开源、支持多语言高亮和强大的插件生态,成为Windows平台下经典的效率工具。理解其工作原理,如通过插件扩展功能、利用正则表达式进行批量文本处理,能极大提升日常开发与运维效率。特别是在处理配置文件对比、数据清洗和轻量脚本编辑等场景时,合理的配置至关重要。本文聚焦于Notepad++的安装与配置,深入解析32位与64位版本的选择策略、插件管理器的使用以及正则

anjueci1221的博客 362

Notepad++:下载安装及使用指南

Notepad++是一款功能强大的开源文本编辑器,广泛用于文本和代码编辑。本文介绍了Notepad++的下载安装过程,包括选择合适版本和安装步骤。文章还详细介绍了其基本功能,如语法高亮、查找替换、多标签页操作及插件管理。进一步探讨了高级功能,包括代码折叠、多行编辑、宏录制与回放、自定义主题等,帮助用户提升工作效率。最后,解决了常见的安装与使用问题。Notepad++适用于编程、文本处理等多种场景,是提高编辑效率的有力工具。

weixin_43679228的博客 3665
上一篇: The Joel Test:软件开发成功12法则
下一篇: 提高 Linux 上 socket 性能
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值