2016-04-27 59 views
0

我碰到這個片段偶然選擇文本和執行console.log和它的偉大工程:https://gist.github.com/harthur/2951063熱鍵在新行

的問題是,它打破語法當我運行該快捷方式片段。它輸入一個console.log()內聯,從而打破語法。

比如我想控制檯日誌變量hello

var hello = 'World'; 

好了,上面鏈接會把它變成片斷:

var console.log(hello) = 'World'; 

這不是我希望的行爲。我要的是:

var hello = 'World'; 
console.log(hello); 

現在,這看起來像一個多重命令,開箱即用的,我不認爲ST3支持鍵綁定多個命令。我已經看過插件命令鏈,但沒有成功地讓它輸出我想要的。任何人都知道解決方案?

+2

值得注意的包:[LogMagic(https://packagecontrol.io/packages/LogMagic) – idleberg

回答

2

如果您使用Chain of Command,那麼您可以將鍵綁定定義爲一系列命令。 如果您不知道執行哪些命令,請打開控制檯ctrl+`並編寫sublime.log_commands(True)以顯示所有執行的命令。

所以你怎麼能存檔你的行爲:

  1. 複製當前選擇的變量
  2. 轉到行
  3. 的末尾插入控制檯日誌片斷中的下一行
  4. 粘貼複製變量
{ 
    "keys": ["super+shift+l"], 
    "command": "chain", 
    "args": { 
     "commands": [ 
      ["copy"], 
      ["move_to", {"to": "eol"}], 
      ["move_to", {"to": "eol"}], 
      ["insert_snippet", {"contents": "\nconsole.log(\"$1 = \" + $1);$0"}], 
      ["paste"] 
     ] 
    }, 
    "context": 
    [ 
     { "key": "selector", "operator": "equal", "operand": "source.js" }, 
     { "key": "selection_empty", "operator": "equal", "operand": false } 
    ] 
}, 

另一種方法是編寫一個插件,在當前行的下面創建一個日誌命令。插件具有多個遊標支持的優點,並且不會更改剪貼板。按Tools >>> New Plugin...和寫:

import itertools 
import sublime_plugin 

class LogVariableCommand(sublime_plugin.TextCommand): 
    def run(self, edit): 
     view = self.view 
     for sel in view.sel(): 
      if sel.empty(): 
       continue 
      content = view.substr(sel) 
      line = view.line(sel) 

      # retrieve the current indent 
      indent = "".join(itertools.takewhile(lambda c: c.isspace(), 
               view.substr(line))) 

      view.insert(edit, line.end(), 
         "\n{0}console.log(\"{1} = \" + {1})" 
         .format(indent, content)) 

要分配鍵綁定使用:

{ 
    "keys": ["super+shift+l"], 
    "command": "log_variable" 
} 
+0

完美!我沒有考慮過要結束這條線,因爲我遇到的問題是它一直在切斷當前線路去下一條線路。謝謝!它可以完美地與指揮鏈配對。 – cYn