Emacsでブロックを選択または強調表示する方法は?


84

マウスを使わずに、vimのビジュアルモードのようにキーボードからブロックを選択または強調表示したい。キーボードからこれを行う最も簡単な方法は何ですか?


2
CMhmark-defun
末尾のスラッシュ

回答:


66

emacsのregion-rectangleを見てください。

要するに、あなたは、といつものように選択を開始Control- Space、次いで地方を殺すControl- x r k&ペースト(またはヤンク)でブロックを殺しましたControl- x r y


11
それはリージョンを殺すのではなく、長方形を殺します。これは、私の経験では、vimのビジュアルモードとは大きく異なります。
アレン

2
どう違うの?
ケン・ウィリアムズ

73

質問を正しく理解していれば、もともと長方形の領域ではありません。

C-Spc 現在の位置にマークを付けます。

カーソルがその後にある場合は常に、最後のマークと現在の位置の間のテキストが「選択」されます(これをアクティブにすると強調表示できますが、強調表示しtransient-mark-modeたくない場合はマークを削除する必要があります)。

次のようなコマンドを使用して、そのリージョンを操作できます。

C-w。。リージョンを強制終了します。これにより、リージョンが削除され、キルリングに配置されます。
C-y。。ヤンク。これにより、キルリングの最後のスニペットが挿入されます。
M-y。。サイクルキルリング。直後にC-y、これはヤンクされた部分をキルリング内の他のスニペットに置き換えます。
M-w。。リージョンをキルリングに保存します。のようですがC-w、削除しません。

これは基本的な使用法です。マークには他の用途もあります。チュートリアル(C-h t)をお勧めします。


6
C-s C-rリージョンの終わり/始まりを見つけるためにこのコンテキストで一般的に使用されることは注目に値します。(特にマクロで役立ちます。)
ocodo 2012年

まあ、それは非常に良いコマンドですが...マークされた領域を選択する方法は?結局のところ、私はまだそれを必要としています。つまり、マーク間のコードをインデントするためです。
ハイエンジェル

最後のマークと(カーソルがどこにあるかである)現在のポイントとの間の領域は、ある選択した領域。実行するだけM-x indent-regionです。
Svante 2014

@Svanteいいえ、選択されていません。indent-regionうまく動作しますが、c-indent-line-or-region(と結合したことを1、タブキーは)ないです。最後の機能は、マークされた領域ではなく、選択された領域、つまりマウスで選択したかのように強調表示れた領域で機能します。
ハイエンジェル

2
@YagamyLightああ、C-Spcマークを付けた場所を2回押すことでそれを行うことができます。これにより、transient-mark-modeが一時的にアクティブになります(キャンセルするまで(でC-g))。次に、ポイントを移動して、選択した領域が表示されることを確認します。
Svante 2014



10

でも C-SPC、あなたのポイントはどこから何かをマーキング開始する一般的な方法で、多くの場合、迅速/エンドポイントを開始するために動いて、明示的に関与しない/簡単な方法があります...

組み込みの選択ショートカット

  • M-h段落マークするための重要な手段。「段落」は、多くの場合、コードのブロックを意味します。

  • C-M-hおよびC-M-@—それぞれsexpsおよびdefunsマークするため。これは、Lispだけでなく、いくつかの言語で機能します。

  • Shiftキーを押したままにする—移動中にハイライトするもう1つの巧妙な方法。たとえば、M-S-f単語全体を転送することを選択します。これは shift-select-modeであり、Emacs24以降ではデフォルトで有効になっています。一部の(チクレット以外の)キーボードでC-S-は、1つのピンキーで押し続けることができるはずです。

これらのいずれかを繰り返し押すと、選択範囲が広がります。

(注:C-g実験中にマーキングをキャンセルするために頻繁に使用します。)

アドオン

地域や物事の選択を改善するアドオンパッケージがいくつかあります。これらはすべてうまく連携し、さまざまなユースケースに適合します。それらすべてを使用してください!

  • Expand-Region:Expand Regionは、選択した領域をセマンティック単位で増やします。必要なものが選択されるまで、キーを押し続けます。 C-=推奨されるバインディングです。数回叩いて必要なものを手に入れましょう。

  • Easy-KillM-w単語、性別、リストなど、さまざまな種類のものを選択するためにニーモニックを使用します。

  • Zop-to-Char zap-to-charに似ていますが、優れた選択やその他のメニュー方式のアクションを提供します。

  • diff-hl:コミットされていない変更された領域を強調表示します。diff-hl-mark-hunkハンクを選択/マークするために使用します。


7

使用Control-Spaceをしてマークを設定し、カーソルを移動します。

transient-mark-modeあなたのための選択をハイライト表示されます。M-x transient-mark-mode

カスタマイズを使用して、デフォルトでこのモードを有効にするようにEmacsをセットアップできます。M- x customize-option RET transient-mark-mode


1

...そしてUbuntuを使用しC-spcていて、機能していない場合:IBusの「次の入力方式」キーバインドをクリアする必要があります。

ibus-setup「次の入力方式」のキーバインディングを実行して別のものに変更します(または、「...」ボタンをクリックしてから「削除」ボタンをクリックして完全に削除します)。

SOの質問への回答から引用。


0

Edin Salkovicの回答を拡張するには、CUAモードを使用している場合、を使用して視覚的なブロック選択を開始できます。CUAのドキュメントで説明されているブロック選択を制御するためのショートカットはたくさんあります。


-1

Emacs 25では、C-Spaceを押すだけで、興味のあるテキストの領域を強調表示/選択したい場所にカーソルを移動できます。その後、次のコマンドが必要になる場合があります。

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