Sublime Text 2では、不規則な縁に複数のカーソルがある直線の列にインデントアウトするにはどうすればよいですか?


33

次のように、複数の行に沿って複数のカーソルがあるとします。

foo|
barr|
foobar|
baz|

このように、各行の末尾の空白を自動的に平らな端にプッシュするにはどうすればよいですか?:

foo    |
barr   |
foobar |
baz    |

(これらの例で|は、カーソルが私のはずです。)

ちょうどTabまたはSpace最初の配置から、あなたはこれを得る:

foo    |
barr    |
foobar    |
baz    |

それは便利ですが、私が探しているものではありません。不規則なマルチカーソルをまっすぐな列に挿入してインデントできるようなキーボードショートカットを探しています。


タブを1つまたは2つ挿入するだけで機能しますか?
ダースアンドロイド

いいえ、しかし理解できないかもしれません。質問を明確にするために編集しました。
GladstoneKeep

編集はSpaceの動作を説明し、行が大きく変化する場合はある程度Tabが行いますが、それらがすべて非常に近い場合は、2つのタブの後にカーソルがすべてタブストップにあるはずです。それらをすべて同じタブストップで取得するために少し調整する必要があるかもしれませんが、スペースで調整しようとするよりも少ないでしょう。
ダースアンドロイド

それは奇妙だ。Tab各行の最後を押すと、不規則なマルチカーソルがまっすぐな列に挿入されますが、正規表現を使用して同じ効果を達成することはできません。末尾のスペースを検索\s*$し、タブ文字に置き換えました:\t- 手動で\t押すのと同じ効果が得られませんTab
-amiregelz

1
FYI、私は、機能要求として、この投稿を崇高テキスト2リクエストボード上。
GladstoneKeep

回答:


10

wbondのSublime Alignmentを使用できます

これを設定ファイルに追加する必要がある場合があります(設定>パッケージ設定>アライメント>設定-ユーザー

// The mid-line characters to align in a multi-line selection, changing
// this to an empty array will disable mid-line alignment
"alignment_chars": ["=", "|"],
// If the following character is matched for alignment, insert a space
// before it in the final alignment
"alignment_space_chars": ["=", "|"]

「|」を置き換えます あなたが揃えたい文字で。

編集: mtoastが発見したように、"\n"「alignment_chars」に追加すると、望ましい効果が得られます。 「alignment_space_chars」に改行文字を追加する必要はおそらくないため、テキストが削除される可能性があります。しかし、限られたテストでは違いは見られませんでした。

押しcontrolながら各行の最後をクリックします。次に、整列ホットキーを押します(Linuxの場合、デフォルトはctrl+ alt+ a)。カーソルが最も遠いカーソル位置に並んでいることがわかります。

Edit2:"alignment_space_chars"テキストブロックを強調表示し、Sublime Alignmentが行に整列する他のもの(等号など)を見つけられない場合、改行を追加するとテキストが削除されます。

また、Sublime Alignmentが他に整列するものを見つけることができない場合、改行を追加すると、"alignment_chars"強調表示された最長の行に一致するように行末にスペース(または設定に応じてタブ)が埋め込まれます。


1
わあ、すごい!Sublime Alignmentパッケージをインストールし、mylineに"\n"(改行)を追加して"alignment_chars"、目的の結果を得ました。(注:に追加しなかっ"alignment_space_chars"たため、行が削除されました。)その特定の提案("n")を回答に追加する場合は、受け入れます。
GladstoneKeep

いいね!私のような完璧主義者にとって非常に便利なパッケージ:)
amiregelz

3
同様のパッケージもあります:Align Tabular。もう少し柔軟です(複数の文字に合わせて整列できます)。
d_rail

上記のd_railによるAlignTabでは|、1つの `\`でエスケープすることを忘れないでください
ユーザー

これに100万の賛成票がないとは信じられません。
チャールズ

44

マイナーハックを使用して、外部パッケージを使用せずに、わずかな労力でそれを行うこともできます。方法は次のとおりです。

| これらの命令のカーソルを表します。

  1. Ctrl+ Click を使用するか、テキストブロックを選択してCtrl+ Shift+ を押すことにより、目的のすべての行にカーソルを作成しますL。(選択ドキュメント

  2. すべてのカーソルが列の目的の位置またはそれを超えるまで、すべての単語の末尾にスペースを追加します(どのくらい離れていてもかまいません)。

    foo     |
    barr     |
    foobar     |
    baz     |
    
  3. オプション1)任意の文字の後にスペースを入力します。使用しましょうc

    foo     c |
    barr     c |
    foobar     c |
    baz     c |
    
  4. を押しHomeて、カーソルを行の先頭に移動します。

    |foo     c
    |barr     c
    |foobar     c
    |baz     c
    
  5. → (right arrow) カーソルが列の目的の位置になるまで押します。

    foo    | c
    barr   |  c
    foobar |    c
    baz    | c
    
  6. Ctrl+ Shift+ を押して次のすべての空白を選択しc、を押しDeleteます。

    foo    |
    barr   |
    foobar |
    baz    |
    
  7. オプション1Deleteもう一度押して、オプションの手順で追加した余分な空白文字をクリーンアップします。


1c保持する行に追加のコンテンツがある場合にのみ、文字の後にスペースを使用します。これがないと、Ctrl+ Shift+ は行の追加コンテンツの最初の単語を選択するため、削除が難しくなります。


2
これは最初はねじれているように見えますが、きちんとしたハックです。適切な配置で列を貼り付けるのに適しています。次の列は、テキストペストリープラグインを使用して貼り付けることができます。
ユーザー14

1
私はしばらくこのテクニックを使用してきましたが、注意してくださいctrl+shift+rightすべての文字を一貫して処理しないため、単なる空白以上のものを選択することになります。
SpareBytes

1
本当にすてきなトリック、私は同意します。しかし、私は最後にキャラクターなしでそれを試してみましたが、使用しShift-End Delete、うまくいきました。場合によっては機能しますが、他では機能しませんか?
セプタグラム

これは私がいつもやることです:)
ドミノ

cある行のが別の行の単語の終わりより前にある場合、これは機能しません。これが私が今抱えている問題です。特定の行には右にスクロールするのに十分な文字が含まれていないため、実行すると次の行に折り返され、このハックはそのままになります。これはハッキングであり、有用なキャッチオールの代替ではありません。
leetNightshade

0

=および以外の文字をインデント|する場合は、AlignmentパッケージをインストールしSublime Text > Preferences > Package Settings > Alignment > Settings - User、次のようにファイルを変更できました。

{
  "alignment_chars": [
    "{create",
   ]
}

次に、次のコードを選択しました。

  let!(:admin_user) {create(:admin_user, :admin)}
  let!(:another_admin_user) {create(:admin_user, :admin)}
  let!(:superadmin_user1) {create(:admin_user, :superadmin)}
  let!(:superadmin_user2) {create(:admin_user, :superadmin)}
  let!(:nonadmin_user) {create(:admin_user)}

押しCommand + Ctrl + Aて調整します。

  let!(:admin_user)        {create(:admin_user, :admin)}
  let!(:another_admin_user){create(:admin_user, :admin)}
  let!(:superadmin_user1)  {create(:admin_user, :superadmin)}
  let!(:superadmin_user2)  {create(:admin_user, :superadmin)}
  let!(:nonadmin_user)     {create(:admin_user)}

すべてが左端の列に移動され、{createテキストはまだ位置合わせされたままであることができます。

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