View on GitHub

severalfly 个人博客

severalfly 个人博客,一起分享知识

Download this project as a .zip file Download this project as a tar.gz file

sublime text 这款轻量级文本编辑器,用了四年了,一直非常顺手,提供的插件简直神奇一样的存在。虽然 vscode 提供了基本相同的功能,但是 vscode 太丑了呀,用了一段时间,还是回到了 sublime text 的怀抱。

工作原因,经常需要把一串json文本格式化后查看,此时,安利sublime 的 pretty json 插件,一个快捷键就可以格式化,非常漂亮。因为文本是从其他地方拷贝过来的,不可避免的带着一些换行符,pretty json 居然不能格式化待换行符的文本,此时有一个解决方法:提前把换行替换掉,sublime 提供了正则匹配换行符的功能。此方法可以替换掉换行,后面的格式化json 也能顺理成章地完成。

下面要说但是了。

但是,在做替换换行符之前,可能在做其他的替换操作,比如把 aaaaa 替换为 bbbbb ,这时,就需要在替换页面把 aaaaa 删除,添加 \n,把 bbbbb 删除,再执行替换操作。

这种方式虽然能解决,针对这么一个完全是重复性的工作,居然需要这么多次操作,不能忍。然后就想到自己开发一款属于我自己的插件,来执行这个操作,想想任务可能非常艰巨,搜索之后,发现并没有想象中的困难,参考原文 ,需要一些python 基础,即使看不懂也没有关系,替换掉换行只需要简单几步,下面详细说说。

一、点击编辑器系统菜单上的 Tools->New Plugin 菜单。此时 sulime 会打开一个编辑页面,提供默认的插件样例,我们在此基础上进行修改。保存在下面位置

(OSX): Users/Username/Library/Application Support/Sublime Text 3/Packages

(WIN): C:\Users\Username\AppDataRoaming\Sublime Text 3\Packages

注意把username 换成你自己的用户名

按上述位置保存我们的插件,比我的命名为 deleteNewLine-leon.py

Sublime Text会自动扫描这个目录,并加载里面的插件文件。也就是说,放在这个目录下的插件是直接激活启用的。如果你的插件有问题,有错误,Sublime Text加载失败,错误信息会在console窗口里提示。开启console窗口的方法是点击菜单View->Show Console。

默认代码是这样的

import sublime
import sublime_plugin

class ExampleCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.insert(edit, 0, "Hello, World!")

可以看到,模板中插件类的类名是ExampleCommand,按Sublime Text插件的规则,这个插件的运行名称就是“example”。我们可以在console里运行这个插件: 在console里输入下面的命令view.run_command(‘example’) 会看到”Hello, World!”字样出现在编辑器里。这说明这个插件已经可以使用了。

分析下这个简单代码,ExampleCommand 表示插件运行时的名称;TextCommand表示此插件为一个文本操作插件;view.insert 表示在某个位置插入字符。

综合来看,没什么稀奇的东西,就是普通 python 代码而已,另外我们还不知有哪些方法可以使用。但是目前对我们来说这些都不重要,重要的是我们已经能把一个插件走通了。

对于我们替换换行的插件,代码修改为如下

import sublime
import sublime_plugin
class DeletenewlinesCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        for region in reversed(self.view.find_all("\n")): 
            if not region.empty(): 
                self.view.replace(edit, region, "") 

注意几个点,

  1. 类名修改了,也就意味着我们需要运行 view.run_command('deletenewlines') 来执行我们的插件;
  2. 加了一个 for 循环,为检查每一行;
  3. 加了if 判断,提高我们插件的性能;
  4. self.view.insert 修改成了 self.view.replace 就是替换;

运行 view.run_command('deletenewlines') 就能发现,我们当前打开的视图里面的换行符,全没了,插件运行成功!

很惊讶,之前每次去除换行辣么麻烦,现在一个简单命令就可以了。下节,我们把插件放入到菜单,并设置一个快捷键,你会发现,原来去除换行只需要一个简单的快捷键操作。

点个在看分享给你的朋友