テキストメイトには、入力を開始すると、選択したすべての行に同じものが入力されるモードがあると思います。 emacsにこれに似たものはありますか?私は長方形が私を助けることができる方法があると推測していますが、どのように...
これと同じくらい簡単です: C-x r t
絶対に複数のカーソルをインストールする必要があります。
https://github.com/magnars/multiple-cursors.el
それはマーマレードとメルパにあるので、ちょうど:
M-x package-install multiple-cursors
次のコマンド(およびキー)を使用してこれを実現できます。
これらの機能の完全な説明は次のとおりです。 http://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html
より複雑なシナリオのためにこれを行いたい、そして新しいモジュールをインストールせずにそれをしたいあなたのそれらのために読んでください。 (これはMarkMultipleをインストールしなくてもEmacsで可能ですが、私は個人的にMarkMultipleを使用し、愛しています)
最近、SQLクエリをファイルに出力し、それをMYSQL INSERTクエリにフォーマットする必要がありました。これがEmacsが私の人生を楽にしてくれた理由です。
ファイルは次のようになります。
1 I am a random text
2 I am not
3 G, you've gone mad
4 Click on this link
5 Transfer in progress (we've started the transfer process)
6 But transfer happend yesterday
7 No you are
8 Oh please! this is getting too much!
9 I love emacs
10 I cant be bothered with this any more
11 its time to raise the bar
12 show me how to expand my territory
そして、私はそれを次のように見せたいです:
(1, ,'I am a random text'),
(2, ,'I am not'),
(3, ,'G, youve gone mad'),
(4, ,'Click on this link'),
(5, ,'Transfer in progress (weve started the transfer process)'),
(6, ,'But transfer happend yesterday'),
(7, ,'No you are'),
(8, ,'Oh please! this is getting too much!'),
(9, ,'I love emacs'),
(10, ,'I cant be bothered with this any more'),
(11, ,'its time to raise the bar'),
(12, ,'show me how to expand my territory'),
C-x (
マクロの記録を開始します[この時点ですべてのキー入力が記録されているので、指示に従ってください]C-a
行の先頭に移動するM-f
Wordを前方に移動し、「、」と入力しますC-n
で次の行に移動し、その後にC-x )
マクロを終了するC-u 11 C-x e
マクロをn回(この場合は11回)繰り返しますEureka!今までに失敗していなければ、次のようなものが得られます。
(1, I am a random text
(2, I am not
(3, G, youve gone mad
(4, Click on this link
(5, Transfer in progress (weve started the transfer process)
(6, But transfer happend yesterday
(7, No you are
(8, Oh please! this is getting too much!
(9, I love emacs
(10, I cant be bothered with this any more
(11, its time to raise the bar
(12, show me how to expand my territory
この時点で、残りの部分を理解するためにあなたを任せるつもりです。しかし、私が行く前に、この種のことを達成するためのかなりの数の方法があることに言及したいです。これはそれらの方法の1つに過ぎず、たまたま私のお気に入りの方法です。
お役に立てば幸いです;)
Boskomによって提案されたcuaモードを探していると思います。 http://www.vimeo.com/1168225?pg=embed&sec=1168225 このスクリーンキャストは、これを使用する方法のアイデアを与えるかもしれません。
長方形は、隣接する行の同じ量のスペースを削除するような単純なものです。
それ以外の場合は、キーボードマクロを使用します。
上記の回答は、列にテキストを挿入するためのものです。 TextMateの[選択範囲の各行を編集]は、各行の長さに関係なく、各行に同じテキストを挿入します。私は今LISPを学んでいるので、演習としてこれを行う関数を書きました。
(defun append-to-lines (text-to-be-inserted)
;;Appends text to each line in region
(interactive "sEnter text to append: ")
(save-excursion
(let (point-ln mark-ln initial-ln final-ln count)
(barf-if-buffer-read-only)
(setq point-ln (line-number-at-pos))
(exchange-point-and-mark)
(setq mark-ln (line-number-at-pos))
(if (< point-ln mark-ln)
(progn (setq initial-ln point-ln final-ln mark-ln)
(exchange-point-and-mark))
(setq initial-ln mark-ln final-ln point-ln))
(setq count initial-ln)
(while (<= count final-ln)
(progn (move-end-of-line 1)
(insert text-to-be-inserted)
(next-line)
(setq count (1+ count))))
(message "From line %d to line %d." initial-ln final-ln ))))
まず、影響を与えるすべての行を含む選択を行い、次にM-x append-to-linesを使用して関数を実行します。