2017-02-21 18 views
0

カーソルから111行を選択して削除するSublime Text 3マクロを作成したいと思います。私はこれを記録しようとしましたが、それはすべて1文字を後方に削除していましたが、それはまだ私が混乱しています。私は手動でマクロを書いてみましたが、関連するコマンドhereがありましたが、私はまだそのページから、私が望むものが可能かどうか、それがどういうものかを理解できませんでした。これに関していくつかの助けに本当に感謝します。Sublime Text 3キャレットからx行を削除するマクロ

答えて

1

残念ながら、一度に複数の移動を行う内部のサブライムテキストコマンドはありません。ただし、プラグインコードを使用して独自の移動コマンドを定義することは可能です。これを回避することができます。

このルートに行くには、メニューからTools > Developer > New Plugin...を選択し、デフォルトのコードを次のコードに置き換えてから、ファイルをPythonファイル(例:move_repeat.py)として保存します。これを行うためにメニュー項目を使用することにより、SublimeはプラグインがUserパッケージに格納されていることを確認します。

import sublime 
import sublime_plugin 

class MoveRepeatCommand(sublime_plugin.TextCommand): 
    def run(self, edit, repeat=1, **kwargs): 
     for num in range(repeat): 
      self.view.run_command("move", kwargs) 

これは、あなたが提供する運動を実行する回数を指定repeatの余分な引数を提供moveコマンドの代替の低下、あるmove_repeatという名前の新しいコマンドを実装しています。交換の低下として

、これは任意のカーソル移動(線、ワード、等)のために使用することができます。私はちょうどそれを手でコーディングすることによって、マクロを作成した。ここ

[ 
    { 
     "command": "move_repeat", 
     "args": 
     { 
      "by": "lines", 
      "extend": true, 
      "forward": true, 
      "repeat": 111 
     } 
    }, 
    { 
     "command": "left_delete" 
    } 
] 

:これを使用して

は、あなたのマクロは次のようになります。実際のマクロレコーディングでこれをやりたければ、別の方法で進む必要があります。

たとえば、マクロを1行だけ書き留めて削除してから、手動で追加した後に余分な値を手動で追加するか、キーバインドを最初に繰り返してコマンドにバインドしてからマクロ記録を行うことができます。

+0

ありがとうございます! ST3がコマンドの繰り返しを許さないということは私の心にも入りませんでした。そして、そうする方法がないので奇妙ですが、これはすばらしい解決策です。この質問には、マクロコマンドを繰り返す必要があることがわかって以来、ちょうどその時に戻ってきました。 1つの質問 - 'run_command(" move ")を他のコマンドを繰り返すコマンドに置き換えるか、あるいは' move'を使うように特別に設計されていますか? – Hashim

+0

書かれている方法は、あなたが 'run_command'に入れたコマンドを繰り返します。その場合でもクラスの名前を変更して、コマンド名が理にかなっているようにすることもできます。 – OdatNurd

+0

鮮やかな、まさに私が聞きたかったもの。もう一つのこと - あなたが任意の大きな数のためにそれを繰り返し、それが文書の最後に来た場合、この機能はどういうものでしょうか?私は現在、文書の終わりになるとすぐに実行を停止する何かを探していますが、それ以上の行は削除されないようにしていますが、このシナリオではどのように動作するのかわかりません。 – Hashim

0

メッシーウェイ

私は、以来、マクロを記録する方法を考え出すことができました。何らかの理由で、レコーダーはマウスでテキスト選択を登録しないので、マクロを記録しているときにキーボードショートカットでテキストを選択しなければなりませんでした。これは私が記述するマクロを作成するという点では仕事をしますが、それは私が推測しているスクリプトも、知っている人が書いた場合よりもはるかにエレガントではありません。それはにつれてそれは、粗ようだ

[ 
    { 
    "args": 
    { 
     "by": "lines", 
     "extend": true, 
     "forward": true 
    }, 
    "command": "move" 
}, 
{ 
    "args": 
    { 
     "by": "lines", 
     "extend": true, 
     "forward": true 
    }, 
    "command": "move" 
}, 
{ 
    "args": 
    { 
     "by": "lines", 
     "extend": true, 
     "forward": true 
    }, 
    "command": "move" 
}, 
{ 
    "args": 
    { 
     "by": "lines", 
     "extend": true, 
     "forward": true 
    }, 
    "command": "move" 
}, 
{ 
    "args": 
    { 
     "by": "lines", 
     "extend": true, 
     "forward": true 
    }, 
    "command": "move" 
}, 
{ 
    "args": null, 
    "command": "left_delete" 
} 
] 

は、ここで私がなってしまったスクリプトの短縮バージョンです。一度に1行ずつ選択するには、moveコマンドを使用します。つまり、このコマンドブロックは、削除する各行に対して繰り返す必要があります。削除する場合は、としてください。私の場合、私はそれらの111が必要でした。うまくいけば、誰かが一緒に来て、より良い解決策を提供するだろうが、それまでは、これは仕事をする。

関連する問題