给任意的操作设置快捷键
sublime 对单词转换有三个操作:upper_case
,lower_case
和title_case
, 但是奇怪的是前两个都有快捷键,但是第三个却没有,这一点不能忍。但是默认配置里甚至都没有设置它,要怎么改?
找到 sublime 操作的名字
要给 title_case 设置快捷键的第一个问题就是,我们得知道这个操作的名字叫什么,这样才能修改用户设置的快捷键。
打开 console, 让它打印出每一个操作的命令:
sublime.log_commands(True)
现在去Edit
菜单下面选择title case
, 然后 console 里面就会把这个操作打印出来:
title_case
知道了名字,那设置起来就好办了:
// User/Default(OSX).sublime-keymap
[
// ...
{ "keys": ["super+k", "super+t"], "command": "title_case" },
]
给创建快捷键本身设置快捷键
既然学会了,那干脆把调出User/Default(OSX).sublime-keymap
这个设置的操作也设置一个快捷键好了。点preference/key binding -user
, 然后 console 里就会显示这个操作:
command: open_file {"file": "${packages}/User/Default ($platform).sublime-keymap"}
那就是说这个操作的名字叫做open_file
, 参数是后面这些,那去设置一下:
{
"keys": ["super+k", "super+s"],
"command": "open_file", "args": { "file": "${packages}/User/Default ($platform).sublime-keymap"}
},
现在要改快捷键就可以用快捷键super+k,super+s
了。
然后就可以轻松地哪里想改改哪里了。
添加 close_other 快捷键
关闭当前标签用 cmd + w 就行了,所以每个 tab 的关闭键对我都无关紧要了,因为我从来不会用鼠标去点。但是我发现"关闭其他标签"这个动作却没有快捷键。这个动作在默认的快捷键设置里面也没有。所以第一步就是找到这个动作的名字是什么。前面提到了,在 console 敲入:
sublime.log_commands(True)
然后点右键点击"close other tabs", 然后就会在 console 里面看到原来这个动作的名字叫做"close-others-by-index"。但是不幸的是这个操作不能直接设置快捷键,为什么呢?因为这个操作需要当前的 group 和 index 作参数。group 指的是所在的屏(如果没有分屏的话,当前的 group 就是0),index 指的是当前标签在当前屏的第几位。
我们首先需要写一个插件: Tools/developers/new plugins
// closeOthers.py
import sublime, sublime_plugin
class closeOthersCommand(sublime_plugin.TextCommand):
def run(self, edit):
window = self.view.window()
group_index, view_index = window.get_view_index(self.view)
window.run_command("close_others_by_index", { "group": group_index, "index": view_index})
这段 python 代码就是获取了 group 和 index 的值,然后把这俩值作参数传给close_others_by_index
这个操作。
保存好之后,再去自定义快捷键:
{ "keys": ["ctrl+w"], "command": "close_others" }
注意这里的 command 必须是close_others
, 因为我们保存的 python 文件的名字叫做closeOthers.py
。这样的话,"ctrl+w"按下就相当于调用了closeOthers.py
, 传入当前的 group 和 index 值, 实施了 close_others_by_index 的操作。
参考:
How to Add a Shortcut for Any Command in Sublime Text
“Close Others” command shortcut in Sublime Text
分屏
说到分屏,可能大多数每天都在用。但是我有个很不爽的地方,在用 MacBook Air 的时候,屏幕太小了,总是要在左右屏之间拉来拉去。这时候如果除了对半分之外,还有1/9分和9/1分那就好了,这样的话就可以专心看左边/右边的内容了:
{
"keys": ["super+alt+["],
"command": "set_layout",
"args":
{
"cols": [0.0, 0.11, 1.0],
"rows": [0.0, 1.0],
"cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
}
},
{
"keys": ["super+alt+]"],
"command": "set_layout",
"args":
{
"cols": [0.0, 0.88, 1.0],
"rows": [0.0, 1.0],
"cells": [[0, 0, 1, 1], [1, 0, 2, 1]]
}
}
我看了一下,这两个快捷键本来是用来折叠函数等代码块的,这个我用不着,要折叠直接点那个 caret 可能方便点,直接就覆盖了。
多光标
cmd+d 这个快捷键可以用来逐个选择相同单词,在需要重命名数量不多的变量的时候可以用它,特别灵活。
cmd+ctrl+g 用来对相同单词做全选,正因为是全选,可能也不够灵活,视情况而定。
cmd+shift+l 多行分裂,鼠标选择多行,然后在每行的最后加上了光标。可能可以在每行最后添加多行注释?
option+mouse 拉取选择竖行。
一个练习,把下面的 the 改成首字母大写。
The name
The name
The name
The name
The name
1、cmd+d 不用说,逐个选择
2、cmd+ctrl+g 的话,要注意如果页面里面还有其他的 the 单词,可能会误伤。
3、cmd+shift+l 先获取每行行尾的光标,然后 cmd+<-,修改 t
4、option+mouse 直接往下拉一列
5、在选中 the 单词之后,也可以用 convert case。
command palette 和 goto Anything
在设置文件语法,跳转到其他文件跳转到函数、CSS 选择器(cmd+r)的时候,可以选择 cmd+p 或者 cmd+shift+p。
snippet
平时在写 if/else、fun 代码块的时候其实就会有代码提示的。除此之外,还可以自定义代码块。
举个例子,设置一个 iife 的代码片段,tools->new snippets,跳出这个:
把下面的 tabTrigger 取消注释,hello->iife,然后把 content 的内容改一下,变成这样:
iife
source.js
中间那个$1
的意思就是光标会在那儿,然后下面的
就是只会在js 文件里面生效。
AdvancedNewFile
这是个插件,用来快速添加文件,在此之前我一直都是在 zsh 里面 touch 来添加文件的,因为在 sublime 里面太慢了,直到有了这个插件。
安装好这个插件之后,cmd+option+n, 然后下方会有个框来输入文件的名字,也可以加路径,如果输入的路径是原来没有的话,那么就会新建。
等号附近的对齐
// turn
let app = item1
let getcha = item2
let aswgwygwubd = item3
// int o
let app = item1
let getcha = item2
let aswgwygwubd = item3
选中,ctrl+option+]
gist
gist 是一个保存和分析 snippet 的地方,如果有什么常用的代码段,可以保存在那边。与其开个页面到 gist 那边复制粘贴,不如选择直接在 sublime 里面获取和保存代码段。
在 gist 的设置里面把 token 填进去就相当于和 gist 建立了联系,之后要创建、抓取gist的话,可以用 cmd+shift+p 来搜索,在里面选择 create public gist等等。
docblockr
这是个插件,用来快速生成注释块,用在函数、类、变量之前的时候还会有一些智能提示。比如说:
function introYou (name, age) {
return name + age
}
// add /** below that function and 得到这个结果,光标在第一个 type上。
/**
* @param {[type]}
* @param {[type]}
* @return {[type]}
*/
function introYou(name, age) {
return name + age
}
join lines
cmd+j 可以把多行连成一行。比方说,
var arr = [
one,
tow,
three,
four
]
光标放在左括号,按几下 cmd+j, 数组就变成单行显示了。
more...
参考:Sublime Text Perfect Workflow