前言

我之前一直想写一个记录自己笔记的软件,可以给因为我都记录在桌面的便签上很乱,以至于便签上满满的全是字母,很难看,但是我有不想写图形化界面,所以最终我选择了写一个sublime 插件,功能就是记录和查询我找到的一些api,以及linux一些命令,和一些代码片段(sublime text 3带有代码片段功能,不过书写格式较为复制,我只喜欢复制粘贴然后改几个变量,有记录和查询功能就可以了)。

开始编程

首先要了解一些基本的知识,为了后面写插件理解

  1. sublime 自带一个python,这个pythonsublime里面集成的,因为sublime插件都是python脚本,你可以通过 ctrl +` 来进入这种交互,在sublime中叫 console(控制台)
  2. 基于前一点,我们可以知道,如果写的插件想要调用自己安装的第三方库是不可能的,因为编程使用的pythonsublime自带的python完全是两个环境,就连版本可能都不一样
  3. 调试插件不能再使用你系统中安装的 python ,必须使用 sublime自带的python来调试,其实这些都是基于第一点,怎么调试后面会讲到

打开sublime--------tools-----developer-----new plugin

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

这段代码不能使用 ctrl+b执行,首先要保存,保存在默认目录里面就可以,名字随便起
那怎么执行这个插件呢?
两种办法:

  1. 打开 console(ctrl+`),在底部输入 sublime.active_window().run_command('example')回车出现,Hello,World!

  2. ctrl+shirft+p输入 key bindings回车,进入快捷键配置,配置一个快捷键

{ "keys": ["ctrl+t"], "command": "example" }

其实类的名字除去Command就是这里面命令的名字,跟文件名字没有关系
保存后,ctrl+t 就执行这个插件了

其实这个插件的作用就是在你编辑的位置插入 Hello world!
关于具体里面的api 可以参考官方文档
http://www.sublimetext.com/docs/3/api_reference.html

插件示例

import sublime
import sublime_plugin
import sys
import os
import threading
import time class InputCommand(sublime_plugin.TextCommand):
def run(self, edit): # 初始化
path = os.path.join(os.environ['HOME'],'notes')
if not os.path.exists(path):
os.makedirs(path)
self.path = path
self.code_file_path = os.path.join(self.path,'code.txt')
self.api_file_path = os.path.join(self.path,'api.txt')
self.linux_file_path = os.path.join(self.path,'linux.txt')
if not os.path.exists(self.code_file_path):
f = open(self.code_file_path,'w')
f.close()
if not os.path.exists(self.api_file_path):
f = open(self.api_file_path,'w')
f.close()
if not os.path.exists(self.linux_file_path):
f = open(self.linux_file_path,'w')
f.close() list_data = [
"new code snippets",
"new api snippets",
"new linux command",
"search code snippets",
"search api snippets",
"search linux command",
] self.fun_list = [
'new_code',
'new_api',
'new_linux',
'search_code',
'search_api',
'search_linux'
] sublime.active_window().show_quick_panel(list_data, self.on_run) def on_run(self,index):
if index != -1:
threading.Thread(target=eval('self.'+self.fun_list[index])).start() def new_code(self):
sublime.active_window().open_file(self.code_file_path)
# sublime.Window.open_file("hello",sublime.TRANSIENT) def new_api(self):
def on_start(args):
self.save(args+"\n",self.api_file_path)
sublime.active_window().show_input_panel('输入api(中文说明和命令间用#分割):','',on_start, None,None) def new_linux(self):
def on_start(args):
self.save(args+"\n",self.linux_file_path)
sublime.active_window().show_input_panel('输入linux命令(中文说明和命令间用#分割):','',on_start, None,None) def search_code(self):
data_list = self.read(self.code_file_path).split('####\n')
self.data = data_list
sublime.active_window().show_quick_panel([[i.split('\n')[0][1:],i[i.find("\n")+1:]] for i in data_list if i], self.on_select) def search_api(self):
data_list = self.read(self.api_file_path).split('\n')
self.data = [i.split('#')[1] for i in data_list if i]
sublime.active_window().show_quick_panel([i.split('#') for i in data_list if i], self.on_select) def search_linux(self):
data_list = self.read(self.linux_file_path).split('\n')
self.data = [i.split('#')[1] for i in data_list if i]
sublime.active_window().show_quick_panel([i.split('#') for i in data_list if i], self.on_select) def read(self,filepath):
f = open(filepath,'r')
data = f.read()
f.close()
return data def save(self,args,filepath):
with open(filepath,'a') as f:
f.write(args)
sublime.Window.status_message(sublime.active_window(),"已保存") def on_select(self,index):
sublime.set_clipboard(self.data[index])
sublime.Window.status_message(sublime.active_window(),"已复制到剪切板") # self.view.insert(edit, 0, "fuck this World!")

这个插件就是我前面说的我自己记录笔记的插件,其实就是简单的调用一些sublime的api,以及对文本进行读和写

关于sublime text 3写一个插件的更多相关文章

  1. 2分钟 windows下sublime text 3安装git插件:

    12:35 2015/11/182分钟 windows下sublime text 3安装git插件:推荐博客:http://blog.csdn.net/naola2001/article/detail ...

  2. 10秒钟sublime text 3安装SVN插件

    注意:此处我提前已经安装了towerSVN,你可能需要提前安装好 towerSVN,之前安装redis之后我才明白,安装插件时安装软件好像 是一个必要的步骤,也就是说安装插件只是让你能在这里使用你已 ...

  3. Sublime Text 中使用Git插件连接GitHub

    sublime Text的另一个强大之处在于它提供了非常丰富的插件,可以帮助程序员来适合大多数语言的开发.这些插件通过它自己的Package Controll(包管理)组件来安装,非常方便.一般常用的 ...

  4. 使用Sublime text 3打造一个小巧但强大的Go语言开发IDE

    版权声明:欢迎转载,转载请注明出处! https://blog.csdn.net/iTaacy/article/details/76716049 使用Sublime text 3打造一个小巧但强大的G ...

  5. 给Sublime Text 2安装CTags插件

    以Windows操作系统为例介绍安装过程: 安装ctags应用程序. 到CTags的官方网站下载最新版本,解压后将ctags.exe文件放到系统的搜索路径中. 安装Sublime Text 2的Pac ...

  6. Sublime text代码补全插件(支持Javascript、JQuery、Bootstrap框架)

    Sublime text代码补全插件(支持Javascript.JQuery.Bootstrap框架)   插件名称:javascript-API-Completions 支持Javascript.J ...

  7. sublime text 3安装Anaconda插件之后写python出现白框

    sublime test 3安装anaconda插件之后写python代码会出现白框,这是应为anaconda自带了pep8语法检查, 有一些是语法错误,能够检查出来还是能有用的.但有一些不过是一些代 ...

  8. 杂谈:用 Sublime Text 2 写 ActionScript3

    Sublime Text这是程序员最喜爱的编辑器,说说在win7下使用Sublime Text来编写as文件以及编译与运行swf. 准备工作 1.Sublime Text 2 2.Java 的JDK( ...

  9. Sublime Text快捷键和常用插件推荐

    Sublime Text快捷键: Ctrl+Shift+P:打开命令面板 Ctrl+P:搜索项目中的文件 Ctrl+G:跳转到第几行 Ctrl+W:关闭当前打开文件 Ctrl+Shift+W:关闭所有 ...

  10. Sublime text 3安装svn插件

    这几天在研究sublime text 3的使用,感觉还不错,现在想让他能够支持svn,所以就写一下怎么安装svn插件吧~ 首先先说一下这个官方的插件网站 点我进入~ 进入之后,最上边的第一个就是点击安 ...

随机推荐

  1. 洛谷P7112 行列式求值

    行列式求值 这是一个让你掉头发的模板题 行列式的定义 行列式 (\(\texttt{Determinant}\)) 是一个函数定义,取值是一个标量. 对一个 \(n\times n\) 的矩阵 \(A ...

  2. Windows LDAP加固之替换LDAP加密证书

    之前两篇文章介绍了LDAP的安全加固,其中提到了TLS加密LDAP通信.对于通常的网页加密,RDP加密都可以在对应的管理界面中选择使用哪个证书来加密.那么对于LDAP服务,怎么确定当前使用的是哪张证书 ...

  3. Windows打印服务器上无法删除打印机

    这几天遇到了一个问题,在Windows 2008的打印服务器上的打印机无法删除.具体表现是可以在设备和打印机里删除打印机,然后刷新一下,它们又出来了.这些打印机早就不存在了,并且这些打印机的图标呈半透 ...

  4. 合理编写C++模块(.h、.cc)

    模块划分 合理编写模块的 demo.h.demo.cc 下例为C++为后端服务编写的探活检测服务 health_server.h #ifndef HEALTH_SERVER_H #define HEA ...

  5. 一文搞懂容器运行时 Containerd

    文章转载自:https://www.qikqiak.com/post/containerd-usage/ 在学习 Containerd 之前我们有必要对 Docker 的发展历史做一个简单的回顾,因为 ...

  6. Redis可视化工具(支持ssh链接)

    1.Redis Desktop Manager RedisDesktopManager,简称RDM,这是一款很出名的Redis可视化管理工具,支持Windows,Mac,Ipad,LInux 开源地址 ...

  7. C++自学笔记 Composition:对象组合

    继承是实现软件重用的一种方式. 在C++中拥有另一种实现软件重用的方式----- Composition:对象组合 用已经有的对象制造新的对象 (设计一个类的时候它的成员变量可以是另一个类的对象) 对 ...

  8. 驱动开发:内核枚举IoTimer定时器

    今天继续分享内核枚举系列知识,这次我们来学习如何通过代码的方式枚举内核IoTimer定时器,内核定时器其实就是在内核中实现的时钟,该定时器的枚举非常简单,因为在IoInitializeTimer初始化 ...

  9. Request保存作用域

    Request保存作用域,作用范围是在当前请求中有效. 1.客户端重定向 2.服务器内部转发

  10. 【C++】GoogleTest进阶之gMock

    gMock是什么 当我们去写测试时,有些测试对象很单纯简单,例如一个函数完全不依赖于其他的对象,那么就只需要验证其输入输出是否符合预期即可. 但是如果测试对象很复杂或者依赖于其他的对象呢?例如一个函数 ...