给任意的操作设置快捷键

sublime 对单词转换有三个操作:upper_case,lower_casetitle_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 的操作。

参考:

分屏

说到分屏,可能大多数每天都在用。但是我有个很不爽的地方,在用 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,跳出这个:

<snippet>
  <content><![CDATA[
Hello, ${1:this} is a ${2:snippet}.
]]></content>
  <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
  <!-- <tabTrigger>hello</tabTrigger> -->
  <!-- Optional: Set a scope to limit where the snippet will trigger -->
  <!-- <scope>source.python</scope> -->
</snippet>

把下面的 tabTrigger 取消注释,hello->iife,然后把 content 的内容改一下,变成这样:

<snippet>
  <content><![CDATA[
(function () {
  $1
})
]]></content>
  <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
  <tabTrigger>iife</tabTrigger>
  <!-- Optional: Set a scope to limit where the snippet will trigger -->
  <scope>source.js</scope>
</snippet>

中间那个$1的意思就是光标会在那儿,然后下面的<scope>source.js</scope>就是只会在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


dustin__
614 声望50 粉丝

前端


引用和评论

0 条评论