カーソルを動かさずにテキストを選択する


8

その場所からポイント(カーソル)を移動せずに選択範囲を拡大したいと思います。C-u C-spc以前の場所への移動にはいつでも使用できることはわかっていますが、それは避けたいです。

より具体的には、私はこれらの操作の両方を実行したいと思います:

  • バッファ内のすべてのテキストを選択します
  • 後続の行/段落を選択範囲に徐々に追加します

カーソルをそのままの位置に保ちます。

Emacsにはこれのためのインタラクティブ機能がありますか?キーボードショートカットにバインドされていますか?


でいつでも前のポイント位置に戻ることができC-u C-spcます。
Malabarba 2014年

1
カーソルを動かさずにテキストを選択することの興味は何でしょうか?
Nsukami _ 2014

回答:


12

あなたがリストしたポイントのそれぞれに対して別々の答えがあります:

  1. emacsのデフォルトのバインドC-x hでは、カーソルの位置に関係なく、バッファー全体が選択されます。

  2. 拡張領域をパッケージには、徐々に選択範囲を拡大する第二の目標を達成するのに役立ちます。expand-regionリージョンを拡大し続けると、最終的にはバッファ全体が選択されます。詳細については、githubのreadmeを参照してください。このパッケージはMELPAから入手できます。

githubからこのパッケージを簡単に紹介します:

領域を拡張すると、選択した領域が意味単位で増加します。必要なものが選択されるまで、キーを押し続けます。

例:

 (setq alphabet-start "abc def") 

カーソルをcに置くと、単語abc全体をマークすることから始まり、次に引用符abc defの内容に展開し、次に引用符全体「abc def」に展開し、次にsexp setq alphabet-start "abcの内容に展開します。 def」、そして最後にセックス全体に。

追加したいのは、どちらの場合も領域選択を変更してもカーソルが移動することです。


+1。ただし、C-x hカーソルは移動します。つまり、バッファの最後に移動してから、バッファの先頭に移動します。C-u C-spc元の場所に戻るには2回必要です。
ShreevatsaR 2014年

9

領域が大きくなると、カーソルの位置が変わります。 これは、カーソルが常に領域の一方の端にあるためです。

すべてのバッファテキストを選択し(C-x h次にC-x C-xポイントとマークを入れ替えるために使用し、カーソルがテキストの末尾にある場合)、さらにテキストを入力すると、希望どおりの結果が得られます。領域は入力したテキストを含めるように拡張されました。(これは、delete-selection-mode電源が入っていないことを前提としています。)

領域も自動的に非アクティブ化されたため、領域のテキストは強調表示されなくなりました。リージョンを再度アクティブにするには、次のようにしますC-x C-x(カーソルをバッファの最後に置いておきたい場合は、これを繰り返すことができます。


4

前述のように、expand-regionパッケージは素晴らしいですが、言及する価値があると感じていeasy-killます。これkill-ring-saveは、通常のM-w「コピー」を、さまざまなものを保存するためのプレフィックスとしても機能する動的コピーコマンドに変える、代わりのドロップとして請求されます。たとえばM-w、アクティブなリージョン、URL、電子メール、または現在の行を(の順序でeasy-kill-try-thingsM-w dコピーしますが、「d」を続けると、現在のdefunが強制的にコピーされます。

のような現在の選択を拡大/縮小する方法と、現在のポイントを変更せずに領域をマークするためにexpand-region呼び出されるコマンドもありeasy-markます。


1

何かをコピーしたら、後でを使用して選択範囲にテキストを追加できますC-M-w

  • ライン/リージョンをコピーする
  • 他のことをする
  • タイプ:あなたは以前にコピーしたテキストにsthgを追加したいC-M-wappend-next-kill)、その後、あなたが(欲しいものをコピーM-w)。

1

他の回答で述べたように:

C-xh バッファ全体を選択します。 (mark-whole-buffer)

選択範囲を広げたい場合は、mark-*コマンドを使用するのが最も簡単な方法です。

キーバインドの例として:

C-M-SPC (mark-sexp)ポイントでsexpをマークします。コマンドを繰り返すと、次のsexpが選択に追加されます。カーソルは現在の位置に留まるか、オブジェクト(段落/ sexp)の先頭に移動して、完全にマークされるようにします。


Preludeは(mark-whole-buffer)、OSX上の<kbd> Cmd-a </ kbd>にマップされ、一般的なOSX機能との類似性を維持しています。
アーロン・リー

1

マウスの使用に問題がなければ、2次選択を使用できます。を押してからMeta、マウスの左ボタン(M-drag-mouse-1)をクリックしてドラッグします。画面に表示されているテキストのみをコピーしている限り、これはポイントを移動しません。で二次選択をコピーしM-mouse-3、でヤンクできますM-mouse-2

カーソルは選択範囲の一端(もう1つはマーク)であるため、2次選択とは別に、カーソルを移動して任意のテキストを選択する必要があります。

ポイントに影響を与えずにバッファーで作業したい場合は、2番目のウィンドウ(C-x 2またはC-x 3)でバッファーを開くことができます。各ウィンドウには独自のポイントがあります。選択およびその他の編集が終了したら、ウィンドウ(C-x 0)を閉じ、他のウィンドウに戻ります。

柔軟性を高めるために、現在のバッファのクローンを作成できます。M-x clone-indirect-bufferまたはC-x 4 cを実行して、そのバッファを示す新しいウィンドウを作成します。クローンは元のテキストと同じですが、独自のマークとポイントがあります。

一部のテキストを既に削除している場合は、()を入力してからkillコマンドを使用して、さらにテキスト追加できます。たとえば、現在の行の末尾を既にキルリングの前にあるテキストに追加し、コピーしたテキストを削除します。選択範囲をキルリングの前のテキストに追加します(選択されたテキストをキルリングの新しいエントリとしてプッシュするのではなく)。C-M-wappend-next-killC-M-w C-kC-M-w M-wM-w

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.