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 ответа2

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. Строки будут вставлены с отступом, который соответствует его окружению.

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

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

0

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

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

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

выбрать без отступа

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

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

    выберите в том числе отступ

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

    выберите с предыдущей линией

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .