Sublime Text進階(一) 定義自己的Command

前言

還記得剛實習(xí)的時候,那時候經(jīng)常使用sql,然后需要查找一堆特定的id返回來的數(shù)據(jù),
id存在Excel表格的一列里面,我們需要將id復(fù)制出來兩邊加上雙引號,然后用逗號分隔放在sql的in()里面.
單純的我將數(shù)據(jù)復(fù)制到文本編輯器里面协饲,然后一個一個加雙引號加逗號,然后再變成一行.
你們能想象在數(shù)據(jù)多一些的時候,那酸爽的程度...

好在隔壁的大佬解救了我,向我介紹了Sublime Text 和里面的批量編輯功能


image
image

這一神奇又裝逼的效果成功的吸引了我,從此過上了吸Sublime Text 的生活...


對上圖操作分析我們可以發(fā)現(xiàn)做了下面步驟

 ctrl + a   = 全選
 ctrl + shift + l = 選中行批量編輯
 ctrl + home = 跳到行首
 插入字符串 = "
 ctrl + end = 跳到行尾
 插入字符串 = ",
 delte = 右刪除
 ctrl + end = 跳到行尾
 backspace = 左刪除

上面的操作大大縮短了我前面提到的場景花費的時間,在不短的一段時間里,經(jīng)常敲這一段代碼,甚至閉著眼也能打出上面一套連招.但是對于喜歡懶到極致的想法:我可不可以更快,甚至只按一個鍵就實現(xiàn)上面的操作呢?


設(shè)置過自定義快捷鍵的小伙伴們往核,就會知道每一個keys對應(yīng)的其實是一個Sublime封裝好的command,如:

{ "keys": ["ctrl+a"], "command": "select_all" },
{ "keys": ["ctrl+shift+l"], "command": "split_selection_into_lines" },

可以看到我們的 "ctrl+a" 其實對應(yīng)的就是 "select_all" 命令, "ctrl+shift+l" 對應(yīng)的就是 "split_selection_into_lines" ,我們可以從字面意思判斷該快捷鍵的功能,同時想知道某個功能的快捷鍵對應(yīng)的是什么的時候,可以在keys binding里面搜索關(guān)鍵詞找到對應(yīng)的keys.

既然一個"keys"對應(yīng)的是一個命令,那么可不可以一個"keys"對應(yīng)多個命令呢?這就是本篇文章要講的核心內(nèi)容.


正文

sublime.log_commands(True)

在sublime里面輸入 ctrl + ` 打開console面板,輸入 sublime.log_commands(True) 開啟log模式. 之后的每一次操作,都會在console里面顯示出來.

image
image

創(chuàng)建一個 command

import sublime
import sublime_plugin
class XxxCommand(sublime_plugin.WindowCommand):
    def run(self, reverse=False):
        window = self.window
        window.run_command("select_all")
        window.run_command("split_selection_into_lines")

用上面的模板創(chuàng)建一個xxx.py(文件名可以隨意,建議對應(yīng)class name)存到/User目錄下面,當保存的時候,Sublime會自動重新加載User下面修改/新增的py文件.
此處可以不需要安裝python環(huán)境,因為Sublime有自帶Python,只需要保存,Sublime Text就會重新加載.
根據(jù)這個特性可以用print()來輸出一些log,在初學(xué)python的時候很方便的測試.


image
image

如果你使用ctrl+b去編譯的話,可能會報下列錯誤,因為sublime_plugin包并不在python的libs里面,需要自行導(dǎo)入sublime的包到libs下.

ModuleNotFoundError: No module named 'sublime_api'

sublime會根據(jù)class名生成對應(yīng)的command,注意class name 要使用駝峰式結(jié)構(gòu),且一定為Command結(jié)尾

XxxCommand = xxx
AaaBbbCommand = aaa_bbb
AaaBbbCccCommand = aaa_bbb_ccc

新建一個keys Mapping

當我們保存上面的文件xxx.py 到/User目錄下面后,使用ctrl+`可以看到sublime 已經(jīng)重新加載了xxx.py文件,那么此時在sublime 里面其實已經(jīng)有了xxx命令了,我們在到Key Bindings里面添加我們的Keys Mapping

{ "keys": ["f5"], "command": "xxx" },

此時我們使用f5,即相當于執(zhí)行了xxx命令,然后就會執(zhí)行XxxCommand里面的run方法,而依次執(zhí)行 select_all, split_selection_into_lines 命令


image
image

window.run_commad()

Runs the named WindowCommand with the (optional) given args. This method is able to run any sort of command, dispatching the command via input focus.

run_command(string, <args>)

參考官方文檔API 可以看到run_command有兩個參數(shù),
第一個參數(shù)是命令的名字,第二個參數(shù)是命令的入?yún)?如果有一些命令有入?yún)⒌脑?可以填參數(shù),下面是使用的例子

import sublime
import sublime_plugin
class xxxCommand(sublime_plugin.WindowCommand):
    def run(self, reverse=False):
        window = self.window
        window.run_command("select_all")
        window.run_command("split_selection_into_lines")
        window.run_command("move_to",{"extend":False,"to":"bol"})
        window.run_command("insert", {"characters": "\""})
        window.run_command("move_to",{"extend":False,"to":"bol"})
        window.run_command("move_to",{"extend":False,"to":"eol"})
        window.run_command("insert", {"characters": "\","})
        window.run_command("right_delete")
        window.run_command("move_to",{"extend":False,"to":"eol"})
        window.run_command("left_delete")

效果


image
image

相關(guān)命令的參數(shù)可以先打開Log,然后輸入對應(yīng)命令的鍵,再根據(jù)輸出的log就確定需要哪些參數(shù)了.


先到這先,希望對你有幫助.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末预柒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌征冷,老刑警劉巖抛丽,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件样漆,死亡現(xiàn)場離奇詭異,居然都是意外死亡长捧,警方通過查閱死者的電腦和手機嚣鄙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來串结,“玉大人拗慨,你說我怎么就攤上這事》盥” “怎么了赵抢?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長声功。 經(jīng)常有香客問我烦却,道長,這世上最難降的妖魔是什么先巴? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任其爵,我火速辦了婚禮冒冬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摩渺。我一直安慰自己简烤,他們只是感情好,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布摇幻。 她就那樣靜靜地躺著横侦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绰姻。 梳的紋絲不亂的頭發(fā)上枉侧,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機與錄音狂芋,去河邊找鬼榨馁。 笑死,一個胖子當著我的面吹牛帜矾,可吹牛的內(nèi)容都是我干的翼虫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼屡萤,長吁一口氣:“原來是場噩夢啊……” “哼蛙讥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起灭衷,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤次慢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后翔曲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迫像,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年瞳遍,在試婚紗的時候發(fā)現(xiàn)自己被綠了闻妓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡掠械,死狀恐怖由缆,靈堂內(nèi)的尸體忽然破棺而出猾蒂,到底是詐尸還是另有隱情,我是刑警寧澤舔箭,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布层扶,位于F島的核電站镜会,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏戳表。R本人自食惡果不足惜扒袖,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一季率、第九天 我趴在偏房一處隱蔽的房頂上張望描沟。 院中可真熱鬧,春花似錦泞遗、人聲如沸席覆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耙蔑。三九已至孤荣,卻和暖如春盐股,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寥院。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工秸谢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人塑煎。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓最铁,卻偏偏與公主長得像垮兑,于是被迫代替她去往敵國和親系枪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容