私は最近multiple-cursors
、について学びました 。これは非常に便利なパッケージのようです。元のリポジトリのドキュメントを調べましたが、コマンドはまだ少しわかりにくいように見えます。
その後、Emacs Rocks!でビデオを見ましたが、ビデオは素晴らしいですが、それは主に、それを行う方法multiple-cursors
ではなく、できることに焦点を当てています。
最も基本的な機能を説明するウォークスルー、チュートリアル、または例はありますか?
私は最近multiple-cursors
、について学びました 。これは非常に便利なパッケージのようです。元のリポジトリのドキュメントを調べましたが、コマンドはまだ少しわかりにくいように見えます。
その後、Emacs Rocks!でビデオを見ましたが、ビデオは素晴らしいですが、それは主に、それを行う方法multiple-cursors
ではなく、できることに焦点を当てています。
最も基本的な機能を説明するウォークスルー、チュートリアル、または例はありますか?
回答:
@bastibeの説明に加えて、複数のカーソルを使用して、行グループの先頭/末尾からテキストを追加または削除します。
set-rectangular-region-anchor
(あなたが好きなキーにバインドされH-spaceている、ハイパーキーを持っている場合、マグナーズからの提案は、だと思います)C-n
、ポイントを行(およびC-p
)ずつ前後に移動しましたC-e
)に移動して変更を加えます。あなたは使用することができforward-word
、forward sentence
あなたはそれぞれの行のテキストが同一でない場合でも、各行に4ワードを編集することを可能にする、線に沿って前後に移動することなど。
例として、私は常にこの種の仕事をしています:
C-u M-!ls / test-dat / pp5 / * fsaRETURN
これにより、pp5ディレクトリの内容がバッファに挿入されます。!
リストの最初にポイントを置きます:
!/test-dat/pp5/ONAB-6-5_Frag#89.fsa
/test-dat/pp5/QCJB-22-5_Frag#90.fsa
/test-dat/pp5/ONGL-1-5_Frag#102.fsa
/test-dat/pp5/ONGL-1-5_Frag#78.fsa
!/test-dat/pp5/ONAB-6-5_Frag#89.fsa /test-dat/pp5/ONAB-6-5_Frag#89.fsa
!/test-dat/pp5/QCJB-22-5_Frag#90.fsa /test-dat/pp5/QCJB-22-5_Frag#90.fsa
!/test-dat/pp5/ONGL-1-5_Frag#102.fsa /test-dat/pp5/ONGL-1-5_Frag#102.fsa
!/test-dat/pp5/ONGL-1-5_Frag#78.fsa /test-dat/pp5/ONGL-1-5_Frag#78.fsa
ONAB-6-5 <-! /test-dat/pp5/ONAB-6-5_Frag#89.fsa
QCJB-22-5 <-! /test-dat/pp5/QCJB-22-5_Frag#90.fsa
ONGL-1-5 <-! /test-dat/pp5/ONGL-1-5_Frag#102.fsa
ONGL-1-5 <-! /test-dat/pp5/ONGL-1-5_Frag#78.fsa
ONAB-6-5 <- read.file("/test-dat/pp5/ONAB-6-5_Frag#89.fsa")
QCJB-22-5 <- read.file("/test-dat/pp5/QCJB-22-5_Frag#90.fsa")
ONGL-1-5 <- read.file("/test-dat/pp5/ONGL-1-5_Frag#102.fsa")
ONGL-1-5 <- read.file("/test-dat/pp5/ONGL-1-5_Frag#78.fsa")
そして出来上がり、あなたはそのリストを読むためにファイルリストをコードに変換しました。実際に説明するよりも実際に説明する方がはるかに難しいのです!
multiple-cursors
非常に強力な組み合わせを作成できます。
phi-search
のようなコマンドで移動するよりも、より堅牢にすることができますM-f (x3)
phi-search
、それは素晴らしいですね!
基本的に、次の2つの使用例がありmultiple-cursors
ます。
mc/mark-next-like-this
とmc/mark-previous-like-this
を使用して、そのインスタンスをさらにマークします。その後、すぐにヒットC-wしてすべてのインスタンスを削除し、代わりに新しい文字列を書き込みます。これを頻繁に使用して、コード内の変数の名前を変更します。mc/edit-lines
1行に1つのカーソルを取得します。これらのカーソルのすべてを操作する通常の編集コマンドを使用できるようになりました。最初のユースケースは特に便利ですexpand-region
。私がしているer/expand-region
にバインドされたC-j、とmc/mark-next-like-this
してmc/mark-previous-like-this
にC->してC-<。これにより、ワードポイントがオンになっていることを簡単に選択し、そのワードの次/前の出現を即座にマークできます。
2番目のユースケースは、マクロのほとんどの用途を置き換えてくれました。マクロを記録し、それを複数の場所に適用する代わりに、すべての場所にカーソルを置き、すべての場所で一度に操作を行います。
multiple-cursors
例えばmark-next-like-this
&に推奨される特定のバインディングmark-previous-like-this
。
C->
してC-<
のためにmark-next-like-this
とmark-previous-like-this
。
私は時々私が時々使用するいくつかのエキストラを追加したいと思いmultiple-cursors
ます。
次のことが有用であることがわかりました。
時々、次#
または次,
または特定の区切り文字に移動する必要があることに気づきます。これは、カーソルごとに異なる数の単語を移動する必要がある場合に特に便利です。関数iy-go-to-char
とを提供します。これらの関数をiy-go-to-char-backward
バインドして使用できます。
これはiy
、各カーソルの下にわずかに異なる行があり、ポイントの下の引用符付き文字列などを選択したい場合と同様の理由で本当に便利です。
これらは私の設定では単なる省略ですが、便利です。おそらく私によって書かれていません。
入力のプロンプト
各カーソルの下に異なる文字列を配置する要求に応じて、Magnarsからこれを取得しました。コードは単純ですが、何かにバインドして複数のカーソルに使用すると、場所ごとにわずかに異なるものを挿入する便利な方法です。
(defun prompt-for-insert ()
(interactive)
(insert (read-string "Insert: ")))
ポイントのインクリメント番号
これは、SOまたはemacswikiから取得されました。どっちがわからない。それはそれ自体で非常に有用であり、またmc/insert-numbers
(defun my-increment-number-decimal (&optional arg)
"Increment the number forward from point by 'arg'."
(interactive "p*")
(save-excursion
(save-match-data
(let (inc-by field-width answer)
(setq inc-by (if arg arg 1))
(skip-chars-backward "0123456789")
(when (re-search-forward "[0-9]+" nil t)
(setq field-width (- (match-end 0) (match-beginning 0)))
(setq answer (+ (string-to-number (match-string 0) 10) inc-by))
(when (< answer 0)
(setq answer (+ (expt 10 field-width) answer)))
(replace-match (format (concat "%0" (int-to-string field-width) "d")
answer)))))))
eval-and-replace
これは非常に強力で、いくつかの本当に便利なビット「n」個を有効にします。sexpがカーソルの背後にあるものを評価し、評価の結果を挿入します。
組み合わせて、multiple-cursors-numbers
たとえば2の累乗、または0 1 2 0 1 2 0 1 2
各行または何かにまたがるシリーズを挿入します。(私はこれらの両方を便利に実行しました)またはそれを使用して、s.el
これらの退屈なjava configをデフォルトのもので書き出します。あなたはそれぞれを書きCONFIG_VALUE_VARIABLE
、それからCONFIG_VALUE_VARIABLE = "configValueVariable"
を実行することでそれに変えs-camel-case
ます。
(defun eval-and-replace ()
(interactive)
(let ((value (eval (preceding-sexp))))
(kill-sexp -1)
(insert (format "%s" value))))
multiple-cursors
READMEファイルを読むだけで、すぐに起動して実行することができました。私の推薦はただ学ぶことmc/mark-next-like-this
です。試してみて、それが何をするのかを理解してください。「複数のカーソルでできるかどうか」で始まる質問があるときはいつでも、READMEを参照してください。それはすべて、Emacs Rocksよりも基本的な入門だと思います!ビデオは初心者に役立ちます。