Есть ли способ исправить многострочный отступ в 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 и добавьте отступ в виде блока, с клавишей Tab и Sublime Text, как и ожидалось, добавьте символы отступа (табуляция или заранее определенное количество пробелов) к каждой выбранной строке:

[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 отступил в первой строке моего блока, но не включил символы отступа в выделение, поэтому, когда я его копировал и вставлял, я не получал отступ в первой строке. (Я хотел бы изменить цвет фона, чтобы проиллюстрировать лучше.)

Мало того, но если бы я вместо этого вырезал и вставил, отступающие символы остались бы позади.

Я могу немного обойти это, пытаясь вспомнить, чтобы скопировать / вырезать перед выполнением отступа, но а) я не всегда помню и б) затем мне нужно сделать отступ в коде дважды.

Кто-нибудь знает, как это исправить?

2 ответа

Решение

На Sublime 3 есть эта команда Paste and Indent и клавиатурная команда для этого Super + shift + V где Super является основным ключом команды для вашей ОС. Это, кажется, делает трюк.

Я нашел это здесь: https://gist.github.com/eteanga/1736542


Редактировать: Оригинальный постер с дополнительной информацией, поэтому людям не нужно пытаться анализировать комментарии.

Возвращаясь ко второму шагу исходной задачи:

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

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

Я выбираю две строки между первым набором фигурных скобок (назначения firstVar а также secondVar скопируйте их (Ctrl + C), затем добавьте пустую строку между вторым набором фигурных скобок и поместите мой курсор в начало пустой строки (обозначенной | ниже):

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;
|
}

К сожалению, он также оставил лишнюю пустую строку (потому что, если бы я не добавил лишнюю строку, она бы вообще не имела отступа), но это достаточно легко удалить.

(Так что, к сожалению, это все же не так хорошо, как корректно работать многострочный отступ, так как мне нужно сначала создать, а затем уничтожить пустую строку. Вы говорите, всего два дополнительных нажатия клавиш? Конечно, но это два нажатия клавиш. не нужно делать, если многострочный отступ работает правильно, и это прерывает мой естественный поток, поэтому я должен думать об этом, а не об изменениях кода, которые я пытаюсь внести.

(В качестве альтернативы, я могу отменить выбор символа новой строки в конце последней строки, нажав , продолжая удерживать нажатой клавишу Shift, и тогда мне нужно только создать новую строку, но не удалять ее после вставки. Но это даже менее естественная вещь, которую нужно сделать или подумать, чем добавление, удаление и лишняя пустая строка, и она все еще включает в себя два дополнительных нажатия клавиш.

(Так или иначе, эта функция - обходной путь, а не исправление, даже если это интересная, даже крутая функция.)

Однако в ситуациях, когда у вас уже есть строки текста между фигурными скобками (и вам не нужно вставлять новый код непосредственно перед последней фигурной скобкой), это работает довольно хорошо: вам не нужно добавлять пустую строку, просто поместите курсор в начало строки, в которую вы хотите вставить новый код, и нажмите Ctrl + Shift + V. Линии будут вставлены с отступом, который соответствует его окружению.

Кроме того, вам не обязательно использовать отступ по умолчанию. Если вы поместите курсор на произвольный столбец (с пробелом слева от него), команда "Вставить и отступ" будет делать отступ для всего, что вы вставляете в этот столбец. (Если вы сделаете это в строке с текстом справа от курсора, отступ этой строки будет изменен в соответствии с тем, что вы вставили.)

Как я уже сказал, интересная и довольно классная функция, с которой стоит поиграть и узнать наверняка. И стоит быть принятым ответом на этот вопрос. Но все же не так хорошо, как то, чтобы заставить многострочный отступ работать правильно.:)

Я считаю, что это не ошибка, а нормальное поведение, поэтому я не могу исправить. Вместо этого у меня есть объяснение и предлагаемый вариант использования.

Это происходит потому, что вы не копируете отступ.

Ты делаешь это:

Вам также нужно будет выбрать это место перед копированием. Это можно легко сделать двумя способами:

  1. Начните свой выбор с двойного щелчка на отступе этой строки. Это выберет все это, точно так же, как выберет слово (которое состоит из пробела). Преимущество также заключается в том, что выбор изменяется словами, а не символами.

  2. Начните свой выбор в конце предыдущей строки

Другие вопросы по тегам