2012-08-13 87 views
3

有谁知道如何编辑Sublime Text 2中的“expand_selection”键盘映射,以便它只选择当前行而不是后面的换行符?ST2键盘映射:为“expand_selection”指定

默认键盘映射是这样的:

{ “键”:[ “CTRL + 1”], “命令”: “expand_selection”, “ARGS”:{ “到”: “行”}}

问题是,当您选择该行并开始将其替换为新代码时,随后的行将移至当前行。

我假设你用“其他”替换了“args”部分中的“line”,但我似乎无法在任何地方找到它。

回答

4

我也找不到选择当前行的示例/文档,没有选择下一行。幸运的是,我们可以做出这样的命令。

  1. 创建文件User/my_utilities.py。我将所有随机自行开发的ST命令放在这里。
  2. 坚持这一点它:

    import sublime, sublime_plugin 
    
    class MyExpandSelectionToLine(sublime_plugin.TextCommand): 
        def run(self, edit): 
         regions = [] 
         for s in self.view.sel(): 
          line = self.view.line(sublime.Region(s.begin(), s.end())) 
          if line.end() == s.end(): 
           # we're at the end of a line, so select the next line 
           line = self.view.line(sublime.Region(s.end(), s.end() + 1)) 
          regions.append(line) 
         for r in regions: 
          self.view.sel().add(r) 
    
  3. 在用户.sublime,键盘映射文件,补充一点:

    `{ "keys": ["super+l"], "command": "my_expand_selection_to_line" }` 
    

如果在Windows上你要["ctrl+l"],而不是["super+l"]

这将覆盖默认的命令绑定以选择一条线来运行新的通信我们只是写了。

+1

只需添加到您的答案,这些都是expand_selection可用参数:'平原, hardbool,eol,hardeol,bof,eof,括号,线。更多信息:http://sublime-text-unofficial-documentation.readthedocs.org/en/latest/reference/commands.html – BoundinCode 2012-08-13 17:47:26

+0

嗯。这些都不适合我:'bol,hardbol,eol,hardeol,bof,eof'。有几个选项没有记录在那里,但是:'indentation,tags'。我还在默认的键盘绑定中找到了'范围',但无法使其工作。 – 2012-08-13 21:05:36

+0

我和'eol','hardeol'等人有同样的问题,但Commands链接是一个很好的参考 - 谢谢发布。 – cantera 2012-08-13 21:33:57

3

Matt的解决方案效果很好,另一种选择是录制宏并将其分配到ctrl+l。这样做还有另一个好处,即只选择第一个代码字符,因此新行的缩进级与您要替换的行相同。

这里的宏:

[ 
    { 
     "args": 
     { 
      "extend": false, 
      "to": "bol" 
     }, 
     "command": "move_to" 
    }, 
    { 
     "args": 
     { 
      "extend": true, 
      "to": "eol" 
     }, 
     "command": "move_to" 
    } 
] 

它被作为\Packages\User(Windows)中保存为MacroName.sublime宏。

这里的键映射:

{ "keys": ["ctrl+l"], "command": "run_macro_file", "args": {"file": "Packages/User/MacroName.sublime-macro"} } 

由于该带走通过重复ctrl+l选择其他行的能力,我也移动expand_selection命令ctrl+shift+l(它覆盖split_selection_into_lines):

{ "keys": ["ctrl+shift+l"], "command": "expand_selection", "args": {"to": "line"} }, 

因此,现在选择当前行,请选择ctrl+l,然后将选择扩展到下面的行,按ctrl+shift+l获取尽可能多的行如你所愿。