21

背景: JEdit (およびその他のテキスト エディタ) は、複数の同時テキスト挿入ポイントと呼ばれる機能をサポートしています。(少なくとも、ここではそう呼んでいます)。

これが何を意味するのかを理解するには、リンクを見てください。

最新のテキスト エディターで使用されているすべての機能のうち、初期の調査では、これは Emacs と Vimの両方が実際にサポートしていない機能の 1 つであることを示しているようです。正しければ、これは非常に例外的です。なぜなら、これら 2 つの旧式のエディターの少なくとも1 つに採用されていないテキスト エディター機能を見つけるのは非常に難しいからです。

質問: Emacs、Vim、またはその両方でこの機能を見たり実装したりしたことのある人はいますか? その場合は、詳細を説明するリンク、スクリプト、リファレンス、または概要を教えてください。

同じ(または同様の)ことを行う別の方法を知っている場合は、お知らせください。

4

10 に答える 10

8

これを行うvimの方法は. 最後の変更を繰り返すコマンド。たとえば、ポインターを参照に変更し、obj.func に変更したい obj->func がたくさんある場合、obj-> を検索し、2cw を実行して obj-> を obj に変更します。 . その後、すべてのインスタンスが変更されるまで nnn を実行します。

おそらくあなたが話しているほど柔軟ではありませんが、頻繁に機能し、非常に直感的で高速です。

于 2008-12-28T18:47:27.793 に答える
7

moccur-edit.elほとんどあなたが望むことをします。正規表現に一致するすべての場所が表示され、一致を編集すると、対応するソースが変更されます。ただし、編集はオカレンスの 1 つのインスタンスに対して行われます。

それらをすべて同時に編集できるように拡張するのは簡単だと思います(少なくとも単純なケースでは)。

ここにデモがあります

結局のところ、moccur-edit の最新バージョンは変更をリアルタイムで適用しないため、変更を適用する必要があります。変更も元に戻すことができるようになりました (いい勝利です)。

于 2008-12-29T23:59:37.070 に答える
6

M-x find-grepEMACS では、マクロを使用して実行できます。完全に自動化することを本当に主張する場合はfind-next、マクロに を含めます。

しかし、正直なところ、これは一種の Microsoft 機能のように思えます。はい、機能リストに追加されますが、なぜ気にする必要があるのでしょうか。そして、もう一度使いたいと思ったとき、それが6か月後に存在したことを覚えていますか?

于 2008-12-28T19:10:30.273 に答える
3

この機能が Emacs や Vim のいずれかに直接類似しているとは思いません。つまり、この機能で達成できるすべてのことが、2 つの「昔ながらの」エディターでは何らかの方法で不可能であると言っているわけではありません。そして、ほとんどの Emacs や Vim と同様に、たとえば、私のような凡人が正しい grep 検索を見つけて適切な後方参照に置き換えるのに 5 分を費やすことができたとしても、パワーユーザーはおそらくそのようなタスクを非常に迅速に達成できるでしょう。

于 2008-12-28T18:51:50.700 に答える
2

cua-selection-modeもう 1 つのわずかな類似点: Emacs では、 (または)によって提供される長方形編集機能によりcua-mode、マークされた長方形の左端または右端に複数の挿入ポイントが自動的に表示されるため、それらのすべての行に共通の接頭辞または接尾辞を入力できます。

例:
M-x cua-selection-mode RET(これまたは cua-mode をまだ使用していない場合は、グローバル マイナー モードを有効にします)
C-RET down down down(1x3 文字の四角形をマークします)
ここにプレフィックスを入力します
C-RET(四角形のマークを外して、通常の編集に戻ります)

于 2011-08-04T23:54:54.423 に答える
1

これの基本的なバージョンを Emacs Lisp で行うのは簡単に思えました。これは、2 つの場所にテキストを並行して挿入する場合に使用します。

(defun cjw-multi-insert (text)
  "insert text at both point and mark"
  (interactive "sText:")
  (insert-before-markers text)
  (save-excursion
    (exchange-point-and-mark)
    (insert-before-markers text)))

実行すると、テキストの入力を求めるプロンプトが表示され、ポイント (現在の位置) とマークの両方にテキストが挿入されます。でマークを設定できますC-SPC。これは、N 個の異なる位置に簡単に拡張できます。次のような関数set-insert-pointは、現在の位置 (Emacsマーカーとして格納されている) をリストに記録し、複数挿入コマンドを実行すると、リストを反復処理してそれぞれにテキストを追加します。

より一般的な「マルチ編集」機能を処理する簡単な方法についてはわかりません。

于 2011-08-04T15:21:29.213 に答える
1

vimでは次のようになります。

%s/paint.\((.*),/\1.paint(/ 

というか、正規表現の「モック」が本当に苦手です。

アイデアはパターンを置き換えることです:

/paint(object,/ 

/object.paint(/ 

はい、それは「サポートされています」

于 2009-01-05T21:32:25.387 に答える