整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

notepad++已成往事,文本编辑器选这些

notepad++已成往事,文本编辑器选这些

于npp作者的一系列无脑言论,使得作为一个极易上手、使用简便的文本编辑器的npp现在也是越来越不受待见。那么,我们今天就来扒一扒,除了npp,还有哪些同样简单便捷、启动快、易上手的文本编辑器。

第五名——SciTE

SciTE,一个支持Windows和Linux平台使用的开源的文本编辑器,开始时只是为了演示Scintilla强大功能而开发的。此后它成为一个功能全面的编辑器,windows下安装包不到2M。你可以通过用户自定义的配置文件来扩展默认功能。

一方面,这个软件入门简单。基本文本编辑器的功能它都具备:多格式(HTML、RTF、PDF、XML)文件导出,文本搜索替换、几十种语法高亮显示等。

另一方面,这个软件配置复杂。因为它默认情况下很多功能还没有展现,需要我们手动设置,而这个设置过程也相当复杂,如果没有正确的配置,他就会出现很多问题,比如选择中文时候出现乱码,缩进格式出错等等。

考虑到它的配置复杂且默认是英文菜单界面,所以,把它排名第五。推荐喜欢极简风的朋友使用或极客朋友挖掘、自定义配置使用。

第四名——NotePad 3

Notepad 3是一个快速、基于Scintilla的轻量级文本编辑器,同样支持语法高亮等文本编辑器普遍具备的基础功能,这点不用多说。值得一提的是,Notepad3安装后会直接替代记事本,也就是你每次创建或新打开.txt文本文档都会默认使用Notepad 3, 想想人家当初的主要目标也是替换掉 Windows 自带记事本。Notepad 3在windows下的安装包仅3M,且默认中文菜单界面,所以无论是作为常用文本编辑器,还是作为windows记事本来使用,都是比较推荐的。

第三名——Ultra Edit

UE作为一款老牌、流行的文本编辑器,默认安装后支持中文界面。不仅支持搜索替换、代码高亮等文本编辑功能,还支持ASCII/ANSI files编码的脚本。可以在对应的语法文件下进行函数和类的跳转,是不是有点智能IDE的意思了,还支持宏录制等一下进阶玩法。但是,这个软件并不是开源软件,30天的试用期后需要付费使用,安装包大概90M左右。

第二名——Sublime Text 3

在作者认为Sublime Text 3 和 UE,如果仅从功能上来看,作者认为两者各有千秋,不分伯仲,但是从安装包体积、用户使用界面,以及扩展包源丰富性而言,作者更倾向于ST3,ST3的编辑界面更加好看些。ST3支持快捷键丰富,进行工程编辑时,可以通过命令来快速进行文件跳转、类跳转、行跳转,犹如使用idea进行代码跟进一样。Sublime安装后默认为英文界面,可以通过安装插件包修改为中文界面,目前是作者使用较为频繁的一个编辑器。

第一名——VS code

世界上最好的文本编辑器——VS code!

VS code排第一,相信大家无可争议,绝对的No.1,严格来说,把VS code仅仅定位为一个文本编辑器,实在是杀鸡用牛刀,大材小用了。但是就仅仅讨论文本编辑功能来说,VS code也是十分跟手,代码跳转、代码片段运行、文本搜索替换等都是入门标配,且是大厂出品,UI美观性更不必说,VS code除了本身功能全面、便捷外,还有一个更让人们依赖的是它丰富的插件库,你几乎可以找到工作中处理代码和文本所需要的所有插件,配合插件后,vscode简直如丝般润滑。

其实,文本编辑器本身核心功能差不多都一样,至于选择哪款,还是取决于你是追求小巧便捷,还是功能丰富;是喜欢开箱即用,还是手动定制(比如宏开发)。

希望,上面推荐的几款编辑器,能够满足大家工作需求。

工具,顺手即可~

. getchar和system(“pause”)

相同点:都可以实现“暂停”效果

但实际过程,有区别。

getchar()是从输入缓冲区中读取一个字符。如果输入缓冲区(使用scanf输入的任何数据都是先被保存在输入缓冲区中!)中没有任何数据,那么就暂停,直到用户输入任意数据并回车,程序才继续往下执行。使用getchar()时,如果输入缓冲区中还有数据,那么就不能实现暂停效果。

system(“pause”)则与输入缓冲区没有任何关系,会直接暂停程序的执行,直到用户按下任意一个按键(不需要在最后输入回车符),才会继续执行。system(“pause”)还会有自动输出提示信息:“请按任意键继续. . .”而且这个提示信息是固定的,不能修改。

2. 头文件的作用

如果在程序中使用了某个c语言预定了的函数,比如printf, 就需要把这个函数的“函数声明”(相当于函数的“介绍”)包含到这个文件中。而这些函数的声明都已经存放在对应的头文件中,比如printf函数的函数声明在stdio.h, 所以需要在程序中使用 #include <stdio.h>

在实际开发中,也会常常定义自己的头文件,用来保存一些函数的函数声明,其他文件如果想使用这些函数,就包含这个头文件。具体用法在项目实战环节再详细介绍。

3. void

作用1:作为函数的返回类型

函数的返回类型为void, 就表示这个函数没有返回值。

作用2:作为函数的参数

函数后面的()用来写参数,如果没有参数,建议写void, 告诉编译器,这个函数没有参数。如果不写,编译器也会认为没有参数。但是可能会告警,因为编译器怕你忘记写参数了,如果写void, 就是明确告诉编译器,这个函数是没有参数的。

作用3:

作为void*, 表示指向任意类型的指针,在指针部分详细介绍。

4. main函数

实际项目中,会很多函数,大项目中有几千甚至几万个函数。main函数是程序的入口,也就是程序运行时,首先从main函数开始执行

5. 变量

变量的存储位置

当程序员定义一个变量比如, char x;这个变量x占用一个字节,但是这个变量的具体存储位置,是编译器来决定的,程序员不能决定。但是程序员可以使用 &x来获得变量x的存储地址。

变量的含义:

学习编程,有一个捷径,就是不要去纠结什么语法知识。二是从解决问题入手。

程序的目的就是为了解决问题的.

如果程序写对了,但是解决不了问题,那这个程序也就是没有任何意义的。

比如拥有一个问题,需要计算两个数的和,也就是做加法。

需要你来设计一个程序,来实现这个加法功能。

那么你就需要使用某个东西,来保存用户输入的两个整数。

用什么来保存呢?

使用“变量”!

需要定义几个变量呢?

至少要定义3个。

分别用来保存用户输入的两个整数,以及他们的和。

int a;

int b;

int s; //计算的结果。

6. printf和fprintf

printf 就是向屏幕打印信息

fprintf是向指定的文件打印信息。而一般的文件,都是保存在磁盘的,也就是硬盘。比如文件 C:/tmp/hello.c

printf其实是fprintf的一种特殊情况,就是把信息打印到一个特殊的文件(标准输出设备),而默认的标注输出设备就是屏幕(控制台的屏幕)

7. gets和fgets

gets和fgets也是类似的。gets是从键盘读取一行字符串。fgets是从指定的文件读取一行字符串。gets是fgets的一种特殊情况,就是向一个特殊的文件读取,这个特殊的文件就是标准输入设备,而默认的标准输入设备就是键盘。

8. 数组的理解

比如每个星期有7天,你准备每天都要去跑步锻炼,计划每天跑步的运动量。

假设:

星期日:3000米,

星期1:5000米

星期2:4000米

星期3:3000米

星期4:1000米

星期5:2000米

星期6:8000米

此时就可以定义一个数组:

int run[7]={3000, 5000, 4000, 3000, 1000, 2000, 8000};

这个数组的数组名称是run, 包含7个整数。第一个整数用run[0]表示, 只有一个数组用run[6]表示。

这7个整数连续存储在内存中,第一个run[0]的存储地址最小,run[1]紧跟着存储在run[0]后面。

run包含7个成员,每个成员都是一个整数,每个整数占用4个字节,所以run一共占用 4*7=28个字节。所以: sizeof(run)==28

9. 编译报错-implicit declaration

10. if的条件判断

任何if判断语句,都要满足条件为真,才执行

这里的条件为真,不是说其中某个变量的值是真是假,而是指整个表达式的值是否为真。

比如,file的值为NULL(也就是0, 就是假)

if (file) {

//不会执行

}

if (file==NULL) { // 虽然file是假,但是 file==NULL 就是真!

///会执行

}

11. 逻辑值

普通表达式和真假没有关系1+2 和真假无关strcmp(name1, name2)和真假无关,这个函数的值就是一个整数。但是所有比较运算的结果,都是逻辑镇,也就是真或者假比如:1+2==3 结果是 真strcmp(name1,name2)==0 结果是真或者假1+2 > 3 结果是假

12. fscanf

13. 回车符

\r\n是属于文件的格式问题。

当把回车符(\n) 保存为\r\n时,这个回车符,在文件中实际占用两个字节,分别为'\r' '\n'。当使用fgets读取这个文件时,会把文件中的'\r' '\n' 这两个字节,识别为一个字符 '\n'

所以:字符串 “123\n”在文件中占用5个字节, 即保存为"123\r\n",但是在使用fgets读取这一行时,读到的只是 “123\n”, 也就是把\r\n识别为一个字符\n, 另外在最后加上一个字符串结束符>所以:字符串 “123\n”在文件中占用5个字节, 即保存为"123\r\n",但是在使用fgets读取这一行时,读到的只是 “123\n”, 也就是把\r\n识别为一个字符\n, 另外在最后加上一个字符串结束符\0<

(注意,字符串结束符>(注意,字符串结束符\0,仅在c语言中使用,用来表示字符串的结束,在文件中是没有字符串结束符的,除非特别的去写入这个字符)<,仅在c语言中使用,用来表示字符串的结束,在文件中是没有字符串结束符的,除非特别的去写入这个字符)


14. gcc没有安装

如果系统是windows7或者windowsXP, 按照这个视频来做,建议一边看一边做:


如果系统是windows10, 按照这个视频来做,建议一边看一边做:(群文件里有)


软件MinGW到群里直接下载:


15. 输入缓冲区

我们在使用scanf或者getchar或者gets输入数据时,从键盘输入的数据,都是先进入”输入缓冲区“。

scanf先在输入缓冲区中检查时候有数据,如果输入缓冲区中有数据,就直接从输入缓冲区中读取数据。

如果输入缓冲区中是空的,程序就会暂停,等待用户输入数据。

比如:scanf("%c", &x);

如果输入abc和回车, 但是实际只读一个字符,所以输入缓冲区中还会剩下 'a' , 'b' 和 '\n'

如果后面还有一个输入语句:

scanf("%c", &y); 或者 y=getchar();

此时就直接从输入缓冲区中读取一个字符 'b', 用户就没有机会输入数据了。

或者右面还有一个输入语句:

scanf(("%d", &y);

此时直接从输入缓冲区中读取一个整数,但是输入缓冲区中是’a’和’b’, 并不是整数,导致用户没有机会输入数据,而去把’a’和’b’当整数输入,结果当然是输入失败。

如果输入缓冲区中还剩下数据,就导致后面的scanf或者getchar语句执行时,程序不会暂停让用户输入,而是直接从输入缓冲区中获取数据。

如果输入缓冲区中还有回车符,就会导致后面的gets语句执行时,程序不会暂停让用户输入,而是直接从输入缓冲区中读取一个空行!(就是一个空字符串),因为 gets是遇到回车符符就结束。

为了解决这个问题,就可以使用 fflush(stdin);

fflush(stdin) 就会把输入缓冲区的所有数据都清空。

使得后面的scanf或者getchar能够暂停,让用户重新输入新的数据。

补充:scanf语句中使用 %d 或者 %f 或者 %lf时, 或自动跳过 空格,回车符,和制表符。只有%c , 不会跳过任何字符。

16. 字符串结束符

我们编写的源程序,比如 hello.c

这些程序其实是给人看的,计算机并不懂,计算机也不能执行 hello.c需要使用编译器(比如gcc) 把这个程序hello.c转换为计算机能够识别的可执行文件(.exe文件)比如: gcc hello.c就会把hello.c 转换为 可执行文件 a.exe这个a.exe文件此时还是保存在硬盘里。

当在cmd窗口中, 执行这个a.exe文件时,

会把硬盘中的a.exe文件 复制到内存中执行!

a.exe在内存中执行的过程中,

如果从文件user.txt读取一个字符串,并保存到数组中时,

那么此时会在数组中的字符串最后加一个字符串传结束符

17. getc和fgetc

getc和fgetc的作用是一样的。getc其实是一个宏,宏的具体用法在后面会详细介绍。getc的定义如下:#define getc(fp) fgetc(fp)也就是说,代码中如果有 getc(file),就会把它替换成:fgetc(file)在一般的使用场合中,使用 getc和fgetc的效果是一样的

18. close和fclose

这个是我的误操作了, 应该使用fclosefclose是C语言的接口close也是关闭文件的作用,但是 close是系统级的接口,也就是说,比fclose更底层,更接近操作系统的函数。

19. fscanf的多行匹配

对于如下文本:

张三丰 Tel:13507318888 Addr:武当

刘备 Tel:13802289999 Addr:成都

马云 Tel:13904256666 Addr:杭州

马化腾 Tel:13107551111 Addr:深圳

可以循环使用如下代码读取:

fscanf(file, "%s Tel:%s Addr:%s\n", name, tel, addr);

但是不加回车符,使用如下语句也能读取:

fscanf(file, "%s Tel:%s Addr:%s", name, tel, addr);

这是是因为:

使用fscanf(file,"%s Tel:%s Addr:%s",name_tmp,tel,addr),匹配到第一行的第2个%s时,刚好把第一个行中,除了最后的回车符以外,匹配完。此时第一行还剩下一个回车符。接着进入第2轮循环,又开始使用scanf匹配,但是注意,是从文件的上一次匹配结束的位置继续匹配,也就是第一行行尾的回车符为止,在这个格式字符串中,第一个是%s,所以会跳过第一行行尾的回车符,从而匹配成功。

如果文件的内容是这样的格式,就必须在格式字符串的最后加上\n了

姓名:张三丰 电话:13243879188

姓名:张四风 电话:13243879199

总结:需要特别注意fscanf的格式字符串中最后的\n的作用。

20. notepad++/vs乱码



然后重新创建一个文件,就默认是ANSI编码了,在cmd就可以正常输出中文了

vs乱码:

如果控制台的编码和程序的编码一致,还是有中文乱码,就需要修改控制台的属性,

右击控制台标题栏,选择“属性”,勾选“使用旧版控制台”

然后再重新运行。


21. scanf的返回值

scanf的返回值,表示成功输入的数据个数。

例如:

int x;

scanf("%d", &x);

当输入100时,x的值是100

如果输入a, 那么将导致scanf执行失败,此时x的值还是原来的值,而x没有设置初始值,所以将是一个不确定的值,一般会是一个很大的值。

如果要考虑合法性,可以使用:

int x;

int ret;

ret=scanf("%d", &x);

if (ret <=0) {

printf("输入错误");

exit(1);

}

scanf的返回值,表示成功输入的数据个数。

22. <或<=

<=表示小于或者等于,

5 < 6 是真

5 < 5 是假

5 <=6 是真

5 <=6 就相当于:

5 < 6 || 5==6

根据实际需求使用,可以随时使用< 或 <=

比如, 需要循环10次,可以使用

for (int i=0; i<10; i++)

也可以使用

for (int i=0; i<=9; i++)

23. 结构体的含义

这样问,说明还没有理解结构体的含义。结构体变量,包含多个子变量。比如已经定义了结构体 struct student类型。这个结构体类型中,含有name成员(一个字符数组)那么如果有如下两个结构体变量:struct studen s1;struct student s2;那么s1中含有name成员s2中也含有name成员如果只用name来表示,就无法区别是s1的name还是s2的name结构体,本质上是一种“数据类型”,和int类型、char类型同等地位!结构体,不是一个变量!使用结构体,可以定义任何多个这种结构体类型的变量。

24. 弹出窗口

#include <windows.h>
#include <stdio.h>
int main() {
 int ret;
 
 ret=MessageBox(NULL,"我爱你!","",MB_OKCANCEL|MB_SETFOREGROUND);
 if   (ret==1) {
 MessageBox(NULL,"我再想想..","", MB_OK|MB_SETFOREGROUND);
 }   else if (ret==2) {
 MessageBox(NULL,"开玩笑的","",MB_OK|MB_SETFOREGROUND);
 }
 
 return   0;
}


25. 远程后不能控制系统

https://jingyan.baidu.com/article/6b182309976683ba58e159c3.html


26. 4996错误

关闭VS警告 warning C4996

vs认为scanf, f_open等函数不安全,编译时,会出现如上4996警告。

方法1:修改项目的项目属性


方法2:

在出现问题的文件中的头文件后面,添加:

#pragma warning(disable:4996)


27. TeamViewer的使用

安装:


28. break和continue的作用

break使用的场合比较多,在while语句,for语句,switch语句,都可以使用。在while语句和for语句中,break的作用,就是直接结束结束循环,跳转到该循环语句之后的语句执行。在多重嵌套循环中,break只能跳出所在那一层循环。在switch语句中,break的作用,就是直接结束switch语句,跳转到switch后面的语句执行。continue语句,在while语句,for语句中都可以使用。在while或for语句中,如果遇到continue语句,就直接结束本次循环,进入下一轮循环的判定语句。特别注意的是,在for循环中,如果遇到了continue语句,还是会先执行for语句中第3个表达式,然后再判断第2个表达式。

29. strlen


30. 逗号表达式

#include <stdio.h>
 
int main(void){
 int   x,y;
 //先计算x=10
 x=10, 11, 12; 
 
 //(10,11,12)这个逗号表达式的值的12,最后执行赋值运算
 y=(10,11,12); 
 
 printf("x=%d\n",   x);
 printf("y=%d\n",   y);
 return   0;
}
 

31. vs不能使用scanf等函数

方法一:把scanf改为scanf_s;.

方法二:无需在程序最前面加那行代码,只需在新建项目时取消勾选“SDL检查”即可;

方法三:若项目已建立好,在项目属性里关闭SDL也行;

32. scanf,fscanf 读字符串

33. strcmp

34. 扩展名

windowsXP配置方式


再单击确定。

windows10:


35. 密码输入

#include<conio.h>
#include<stdio.h>
 
int main(void)
{
 char   pwd[32];
 int   ch;
 int   i=0;
 while   (1) {
 ch=getch();
 if   (ch=='\r') {
 break;
 }
 pwd[i]=ch;
 i++;
 putch('*');
 }
 pwd[i]=0;
 printf("\n您输入的密码是:%s\n", pwd);
 return   0;
}
 

或者:

void input_pwd(char *pwd, int max_len) {
 char   c;
 int   i=0;
 
 printf("Please   input pwd: ");
 
 while   (1) {
 c=getch();
  // getch不从输入缓冲区中读取
 //在getch中,把回车按键输入,识别为回车符'\r'
 //在getchar中,把回车按键输入,识别为换行符'\n'
 if   (c=='\r' || i >=max_len) { 
 pwd[i]=0;
 break;
 }
 pwd[i++]=c;
 printf("*",   c);
 }
}

36 虚拟机打开失败


需要重启系统,然后按一个快捷键(不同的电脑,按键不同,可以搜索“自己的电脑型号 进入BIOS”),进入BIOS

然后在BIOS界面中,找到一个 virtualization相关的一个选项,设置为Enable, 然后按F10退出重启即可。

37 可执行文件名同名

如果程序文件名是 hello.c

那么编译时使用:gcc hello.c

得到的可执行文件就是 a.exe

如果再使用: gcc test.c

得到的可执行文件 a.exe就会覆盖原来的a.exe

可以使用 -o选项来指定生成的可执行文件名

例如:

gcc hello.c -o myHello 得到的可执行文件的文件名是 myHello

gcc test.c -o myTest 得到的可执行文件的文件名是 myTest

-o后面可以使用任意名称。

38 变量的作用域

变量的定义,比如 int s=0; 或 int s;

如果这个变量的定义放在某个 { }内,那么这个变量只能在这个大括号内生存,也就是说,只能在这个大括号有效

{
 int s=0;
 {
 int s=10; 
 printf("s=%d\n", x); //打印s=10, 如果小范围的某个变量,如果和外面的某个变量同名,那么在这个小范围内,都认为是小范围的变量

 }
 printf("s=%d\n", x); //打印s=0
}
 

比如,如果你的某个同班同学叫马云,那么在这个班里,凡是说马云的,都是说班上的这个同学。

出了班级,在学校里或者在社会上,凡是说马云的,就是阿里巴巴的马云。


39 循环体内变量的初始化


例如:

#include <stdio.h>
int main(void) {
 int   i;
 for   (i=0; i<10; i++) {
 int   s=0;
 s   +=1;
 printf("s=%d\n",   s); //始终打印s=1
 }
 return   0;
}
 

40 逗号表达式

(表达式1, 表达式2, 表达方式3, ... , 表达式n)

当用()把多个表达式括起来,中间用逗号隔开时, 一起构成一个整体,称为逗号表达式.

整个逗号表达式的值, 是()中最右边一个表达式的值.

比如(3, 5, 8)的值是8, (1+2, 2+5, 3+4)的值是 3+4, 也就是7


36.

41 loadimage出错

42 类的定义中初始化数据成员

在类的定义中,直接对数据成员初始化,在老标准的C++中是不支持这样做的。

但是在C++11中,是支持这种写法的!

vs2010, 只支持少部分c++11特性,大部分C++11的新特性都不支持。

在类的定义中,直接对数据成员初始化,在vs2010中也是不支持的,但是在vs2015或者更高的版本中支持。

43 丢失api-ms-win-crt-conio-|1-1-0.dll

解决方案:

https://jingyan.baidu.com/article/851fbc3797531e3e1f15abea.html?qq-pf-to=pcqq.group

44 for循环不支持

for( int i=0; i<10; i++) {

//

这种方式(在for循环的第一行中的第一个分号之前,定义变量)在老版本的C语言中,是不支持的。在C++中是支持的。

新版本(C99版本)支持,

在编译时,最后加一个 -std=c99 来指定编译版本。

比如: gcc hello.c -std=c99

45代码战争忘记密码



然后在该邮箱中,打开邮件中的重置链接。

如果重置失败,就只有重新注册一个新账号。

46. 305输出1

305 按%c输出, 就是按照char类型输出char只有1个字节,而305需要2个字节才能表示,所以就只取最低字节也就是305, 最低字节是 305-256=49而49按%c输出,就是输出ASCII值为49的字符, 就是字符1所以输出1

47. scanf_s错误

//scanf_s("%s", x, ); //在vc++中正确,在vs中错误

scanf_s("%s", x, sizeof(x)); //正确

scanf_s中,最好再加上一个参数,从来最多接收多少个字节的数据。

在vc++(vs的c++版本)中,不需要第3个参数来表示最大数据长度

在vs中,必须要使用第3个参数来表示最大数据长度

scanf_s("%s", x, sizeof(x));

在vc++中,输入ctrl+z 回车 scanf_s就返回EOF(-1)

在vs中,连续输入两次或三次ctrl+z 回车, scanf_s才返回EOF(-1)

48. 不显示行号



49. vs2010安装失败

Github只是一个提供存储空间的服务器,用来存储git仓库

Github已经成为了管理软件开发以及发现已有代码的首选方法

Github公有仓库免费,私有仓库要收费

你可以参与别人的开源项目,也可以让别人参与你的开源项目

提示:

VS2010 "缺少dlmgr.dll 无法继续执行代码。重新安装程序可能会解决此问题

64位系统:    复制dll文件到C:\Windows\System32    复制dll文件到C:\Windows\SysWOW6432位系统:    复制xdll到C:\Windows\System32

50. vc++错误:VS2010 error MSB8008: 指定的平台工具集(v140)未安装或无效.请确保选择受支持的 Platforom


把平台工具集,改为v100


整理不易,点个赞吧~~~如果想和我一起学习,请关注我或者私信我,我会给大家准备一套免费的C/C++学习资料

最全的免费教程也可以点击下方的 “了解更多”

次分享的工具名字叫NotePad++,IT人员必备,从工作开始用到现在,七八年了...

这个工具口碑很好,几乎身边的同事多多少少都用(还有些人同时用editPlus)

Notepad++是旨在替代Windows默认的notepad而生,比notepad的功能强大很多很多。

说说他的几个优点


1、自动保存(福音,不必多说)

文本编辑过程中最怕的就是各种意外情况还没来得及保存,比如死机、进程僵死、奔溃等,如果你用了 Notepad++,完全不用担心,默认情况下它会实时的将正在编辑的内容保存一份副本到 %appdata% 下,每次打开未保存的文件都会自动从副本中恢复,完全不用担心任何编辑数据丢失!除非磁盘损坏,对于个人用户而言,我想Notepad++配合云盘的实时同步功能,做到数据三个九或者四个九的可靠性也就不难了吧?

2、编辑只读文件(运维和软件测试人员谁用谁知道)

偶尔会编辑一些系统文件,比如 C:WindowsSystem32driversetchosts,编辑完成要保存时才知道文件只读,没有权限,在 linux vim 下,咱们可以 :w !sudo tee % 直接编辑只读文件,但是在 windows 下怎么办呢?难道再把文件翻出来右键去除属性?这么做太繁琐了!Notepad++下【编辑】→【去除只读标记】即可快速解决。

3、列编辑(我大部分情况下在Excel里解决,因为我excel还是比较强的~)

现在要给一段文本的每行开头加一个 tab 怎么办?要不要来个 shell 命令 sed -r '/^/ /' 处理下?Notepad++里按下 alt 键即可进入列编辑模式,然后按下 tab 即可为选中的每一行执行相同的操作。

那如果要给每行的开头加一个连续的数字做行号呢?要不要在 excel 里自动填充后 copy 过来?Notepad++里按下 alt+c 组合键即可进入列编辑插入模式,设置相应的初始值、步长即可。

4、监视日志(问题定位没有这个真不行,另外linux平台的日志也一般都用这个看,能打开的文本比较大)

如果日志文件发生变化了,如何获取最新的日志?如果是低频的修改,notepad++ 会自动检测到内容变更,提示你是否要加载最新的文件,但如果是频繁的变更,例如一秒一次 :

while sleep 1; do echo $((i++)) >> 111.txt; done

又该如何处理呢?难道只能 shell 下 tail -f ?

幸运的是,notepad++ 已为咱们内置了这个功能:【视图】→【监视日志】

5、查找替换(扩展模式非常好用,正则表达式也无敌)

notepad++ 的查找替换非常强大,完全支持 PCRE 风格正则,并能在单独窗口输出匹配内容,或者更友好的方式标记出查找结果。

比如需要将多行合并为一行怎么办?只需要勾选扩展模式然后输入 即可。

再比如如何对某个文件进行重复行去重,难道要上传到linux下 sort|uniq 来一发?

Notepad++下只需要输入正则表达式 ^(.*?)$s+?^(?=.*^$),并勾选匹配新行即可。

6、格式、编码与符号(没见过乱码的人理解不了)

Notepad++ 在【编码】菜单里内置了几乎所有的编码支持,可以自由切换,调试编码问题非常方便。

针对linux和mac、windows换行符不兼容问题,notepad++ 也可以很方便的支持,在底部状态栏双击可以很容易的切换:

有时候文本中包含一些肉眼不可见的特殊字符,导致程序处理过程中出现一些莫名其妙的问题,比如回车换行符、utf8 BOM 标记等,咱们可以开启 【视图】→【显示符号】→【显示所有字符】,让所有的字符无所遁形,一目了然:


linux下有 diff,windows 下专门用于文件比较的软件也不少,但是大多都是收费的,比如 Beyond Compare,而在 notepad++下,这个问题异常简单:只需要按下 Alt+D 即可!

这一切的背后其实是 notepad++ 利用了自带的插件 compare

7、在 PPT 中插入格式化高亮代码(开发人员可以试试,不过估计开发写PPT的不多~)

有时候技术分享需要在 PPT 中插入一段语法高亮、格式整齐的代码,但你发现没有,无论是从 IDE 编辑器还是 HTML 网页复制粘贴到 PPT 里,格式、颜色都会错乱或丢失,本质原因是在 office 内部 PPT 的定位不是做一个强大的文本编辑器(Word),而是以图片可视化输出为主让用户表达观点(Power + Point)的一个产品,所以网上也有同学想出了各种办法来“曲线救国”,比如先粘贴到 word,然后再复制粘贴到 PPT,或者直接 截图粘贴到 PPT 里,但这都不是我们想要的。

这里借助 notepad++ 我们可以很方便的实现这个需求:

(1)首先借助 notepad++ 自带的 NppExport 复制代码内容及格式为 RTF 到剪贴板

(2)然后在 PPT 中,按下 Ctrl+Alt+V 粘贴即可,颜色及排版不会有任何变化

看到没?一共就两步,按下两组快捷键即可轻松解决 PPT 里粘贴代码格式错乱或丢失这个恼人的问题。

额外说明

当然之前notepad++因为对中国不友善,网上也有很多人抵制,这里就有人带了一波节奏。

https://www.oschina.net/news/110987/no-notepad-plus-plus

对于这样的事情,仁者见仁智者见智,这种言论肯定是要抵制,至于工具使用,大家可以自己判断。

总体上notepad++还是一个不错的工具,轻便,扩展功能没有vs、atom、sublime齐全,但完全够用,响应还非常快。