web-dev-qa-db-ja.com

Sublime Text 3の複数行のインデントを修正して、選択範囲内の最初の行にインデント文字を追加する方法はありますか?

Sublime Text 3で複数の行を選択し、それらをブロックとしてインデントすると(いずれかを使用) Tab または Ctrl])、最初の行の先頭に新しい空白文字を追加します外側選択範囲の内側ではなく。

次のようなコードのブロックがあるとします(注:以下のすべてはアイデアを説明するためのものです。中括弧の場所やインデントの量などについては、私から始めないでください)。

int firstVar, secondVar;

firstVar = 4;
secondVar = 11;

ここで、後でこのコードに戻り、値の割り当てを条件付きにする必要があります。

int firstVar, secondVar;
int myVar = 0;
int result = someThing(myVar);

if (result == GOOD_RESULT)
{
firstVar = 4;
secondVar = 11;
}
else
{
}

もちろん、うまくインデントしたいので、if句で2つの項目を選択し、それらをブロックとしてインデントします。 Tab キーとSublimeTextは、予想どおり、選択した各行の前にインデント文字(タブまたは所定の数のスペース)を追加します。

[snip]

if (result == GOOD_RESULT)
{
  firstVar = 4;
  secondVar = 11;
}
else
{
}

次に、else句でそれらに異なる値を割り当てるだけなので、それらをコピーしてそこに貼り付け、修正する準備をします。

if (result == BAD_RESULT)
{
  firstVar = 4;
  secondVar = 11;
}
else
{
firstVar = 4;
  secondVar = 11;
}

そして、問題があります:Sublime Textがブロックの最初の行をインデントしましたが、選択範囲にインデント文字が含まれていませんでした、それをコピーして貼り付けたときに、最初の行のインデント。 (わかりやすくするために背景色を変更できればいいのですが。)

それだけでなく、cutで貼り付けた場合、インデント文字は残されていたでしょう。

インデントを行う前にコピー/カットを忘れないようにすることで、ある程度回避できますが、a)I しないでください常に覚えておいてください。b)コードを2回インデントする必要があります。

誰かがこれの修正を知っていますか?

4
Wilson F

Sublime 3には、Paste and Indentと呼ばれるこのコマンドがあり、そのためのキーボードコマンドはSuper + shift + Vです。ここで、SuperはOSのメインコマンドキーです。これでうまくいくようです。

ここで見つけました: https://Gist.github.com/eteanga/1736542


編集:さらに情報を追加する元のポスター。コメントを解析する必要がありません。

元の問題の2番目のステップに戻ります。

int firstVar, secondVar;
int myVar = 0;
int result = someThing(myVar);

if (result == GOOD_RESULT)
{
firstVar = 4;
secondVar = 11;
}
else
{
}

中括弧の最初のセットの間の2行を選択します(firstVarsecondVarへの割り当て、それらをコピーします(Ctrl+C)次に、中括弧の2番目のセットの間に空の行を追加し、空白行の先頭にカーソルを置きます(以下の|で示されます)。

int firstVar, secondVar;
int myVar = 0;
int result = someThing(myVar);

if (result == GOOD_RESULT)
{
firstVar = 4;
secondVar = 11;
}
else
{
|
}

次に、「貼り付けてインデント」(Ctrl+Shift+V)、コードはファイルタイプのデフォルトのインデントで貼り付けられ、変更できるようになります。 (また、インデントレベルが異なる行をさらに貼り付けると、それに応じてすべて調整されます。)

int firstVar, secondVar;
int myVar = 0;
int result = someThing(myVar);

if (result == GOOD_RESULT)
{
firstVar = 4;
secondVar = 11;
}
else
{
  firstVar = 4;
  secondVar = 11;
|
}

残念ながら、余分な空白行も残されています(余分な行を入れなかった場合は、インデントされなかったため)が、削除するのは簡単です。

(つまり、悲しいことに、stillは、最初に空白行を作成してから破棄する必要があるため、複数行のインデントを正しく機能させるほど良くありません。 。追加のキーを2回押すだけですよね?もちろんですが、複数行のインデントが正しく機能し、自然な流れが妨げられる場合は、キーを2回押す必要はないので、that私が行おうとしているコードの変更についてではなく、.

(または、を押して、最後の行の終わりにある改行文字の選択を解除することもできます  押し続けながら Shift、その後、新しい行を作成するだけで、貼り付け後に行を削除する必要はありません。しかし、これは、空白行を追加および削除したり、余分な空白行を追加したりするよりも、実行または検討するのがさらに自然なことではありません。

(いずれにしても、この機能は、興味深い、さらにはクールな機能であっても、修正ではなく回避策です。)

ただし、中括弧の間にすでにテキスト行がある場合(、最後の中括弧の直前に新しいコードを貼り付ける必要はありません) 、それは非常にうまく機能します:空白行を追加する必要はありません。新しいコードを挿入する行の先頭にカーソルを置き、を押します。 Ctrl+Shift+V。線は、周囲に一致するインデントで挿入されます。

また、必ずしもデフォルトのインデントを使用する必要はありません。任意の列(左側に空白のみ)にカーソルを置くと、[貼り付けてインデント]コマンドを使用すると、その列に貼り付けたすべてのものがインデントされます。 (カーソルの右側にテキストがある行でこれを行うと、その行のインデントは、貼り付けたものと一致するように変更されます。)

私が言うように、確かに、遊んで知っておく価値のある、面白くてかなりクールな機能です。そして、この質問に対する受け入れられた答えになる価値があります。しかし、それでもquiteは、複数行のインデントを適切に機能させるほど良くはありません。 :)

4
racl101

これはバグではなく、通常の動作であると私は信じているので、修正はありません。代わりに、説明と推奨されるユースケースがあります。

インデントをコピーしないために発生します。

これをして:

select without indent

コピーする前に、そのスペースも選択する必要があります。これは、次の2つの方法で簡単に実行できます。

  1. その行のインデントをダブルクリックして選択を開始します。これにより、Word(空白で構成されている)を選択するのと同じように、すべてが選択されます。また、文字ではなく単語によって選択が変わるという利点もあります。

    select including indent

  2. 前の行の終わりから選択を開始します

    select with prev line

0