3

クエスト

これを回します (currHour現在の選択で):

var currHour = now.getHours();

これに:

var currHour = now.getHours();
console.log('currHour=' + currHour);

次の場合にも機能するはずです。

currHour = now.getHours();

-->

currHour = now.getHours();
console.log('currHour=' + currHour);

および (bが選択されている場合):

a = b;

-->

a = b;
console.log('b=' + b);


状況

さて、この答えに従うことで、これで2行目を作成することができました:

<snippet>
  <content>
    <![CDATA[console.log('$SELECTION=' + $SELECTION);]]> </content>
  <description>Print selection to console.log</description>
</snippet>

<scope>注意:スニペット ファイルの場所 (言語固有のディレクトリ -- JavaScript の下) によってスコープが暗示されるため、私のスニペット コードは省略されます。

注意 2:<tabTrigger>キーボード ショートカットを使用するため、スニペットの設定は意図的に省略されています。

{ "keys": ["ctrl+shift+o"], "command": "insert_snippet", "args": { "name": "Packages/User/JavaScript/console-log-selection.sublime-snippet" } },

わかりました、それで途中まで来ました...


問題

現在の「解決策」では、スニペットを呼び出す前に、手動で選択を複製する必要があります。できれば省略したい不便な手順です。では、スニペットで選択を新しい行に複製する方法はありますか?

4

4 に答える 4

1

私はスニペットが苦手なので、別の方法があるかもしれません。とにかく、プラグインでそれを行うことができます。

import re
import sublime
import sublime_plugin
class ConsoleLog(sublime_plugin.TextCommand):
    def run(self, edit):
        view = self.view
        cursor = view.sel()[0]
        line_region = view.line(cursor)
        string = view.substr(line_region)
        match = re.search(r"(\s*)(var\s+)?(\w+)\s*=", string)
        if match:
            if cursor.empty():
                var_text = match.group(3)
            else:
                var_text = view.substr(cursor)
            view.insert(edit, line_region.end(), "\n%sconsole.log('%s = ' + %s);" % (match.group(1), var_text, var_text))
            end = view.line(line_region.end() + 1).end()
            view.sel().clear()
            view.sel().add(sublime.Region(end, end))

代入操作のある行にカーソルを置くだけです。キーバインディングを にバインドしますconsole_log。必要に応じて名前を変更できます。テキストコマンドの名前も必ず変更してください。

最初にテキストを入力する必要がないように、スニペットを変更することもできます。変数名を入力して選択し、スニペット キーを押すのは直感的ではないようです。このようなものがうまくいくかもしれません。

<snippet>
  <content>
    <![CDATA[console.log('$1 =' + $1);$2]]> </content>
  <description>Print selection to console.log</description>
</snippet>

編集:

var foo = barプラグインを使用して、およびを含む行にカーソルを置いて console.logs を生成しましたfoo = bar。つまり、プラグイン コマンドの 2 回の呼び出しです。複数のカーソルを処理するように変更することもできますが。

var foo = bar
console.log('foo = ' + foo)

foo = bar
console.log('foo = ' + foo)

また、プラグインを変更して、何も選択されていない場合に変数の割り当てを自動的に使用するようにしました。何かが選択されると、コンソール ログで選択されたテキストが使用されます。空の選択内容が必要ない場合は、下の if ステートメントを削除しif match:て、var_text = view.substr(cursor)

于 2013-10-19T20:50:13.293 に答える
0

同様のスニペットをマクロと組み合わせることで、本質的に目的を達成できます。

スニペット:

<snippet>
  <content><![CDATA[
${TM_CURRENT_LINE/var *(.+?) *=.+/\nconsole.log\('$1=' + $1\);/}
]]> 
    </content>
  <description>Print selection to console.log</description>
</snippet>

スニペットは、現在の行に基づいて変数名を特定し、その変数を使用して console.log 行をフォーマットします。

マクロ:

[
    {"command": "move_to",          "args": {"to": "hardeol", "extend": false}},
    {"command": "insert_snippet",   "args": {"name": "Packages/User/console-log-selection.sublime-snippet"}}
]

このマクロは既存のコマンド - move_to - を使用して、スニペットを挿入する前に行の末尾に移動します。これにより、行のどこからでもコマンドを実行できます。

最後に、ショートカット:

{ "keys": ["ctrl+shift+o"], 
  "command": "run_macro_file", 
  "args": { "file": "Packages/User/console-log-selection.sublime-macro" } 
},

これは、変数割り当て行が既に存在する場合にログ行を挿入するための最良の方法のようです。

于 2013-10-20T01:46:16.083 に答える
0

マクロは、どちらの場合でも必要なことを行います。

これを保存します

~/Library/Application Support/Sublime Text 2/Packages/User/saran_macro.sublime-macro

[
  {"command": "copy"},
  {"command": "move_to",  "args": {"to": "hardeol", "extend": false}},
  {"command": "insert",   "args": {"characters": "\nconsole.log('"}},
  {"command": "paste"},
  {"command": "insert",   "args": {"characters": "=' + "}},
  {"command": "paste"},
  {"command": "insert",   "args": {"characters":");"}}
]

これをキーバインドに追加します。

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

強調表示するものはすべて、マクロ内の変数になります。

于 2013-10-20T16:19:29.860 に答える