Existe uma maneira de corrigir o recuo de várias linhas no Sublime Text 3 para que ele adicione os caracteres de recuo da primeira linha dentro da seleção?

3

Quando seleciono várias linhas no Sublime Text 3 e as recuo como um bloco (usando a Tab ou Ctrl + ] ), adiciona os novos caracteres de espaço em branco no início da primeira linha fora da seleção em vez de dentro.

Digamos que eu tenha um bloco de código parecido com este (Observe: todos os itens abaixo servem apenas para ilustrar a ideia; por favor, não comece comigo sobre onde estão meus colchetes ou quanto recuo, etc.) :

int firstVar, secondVar;

firstVar = 4;
secondVar = 11;

Agora, eu volto para este código mais tarde e preciso tornar as atribuições de valor condicionais:

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

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

Claro, eu quero recuar bem, então eu seleciono os dois itens na cláusula if e os recuo como um bloco, com a tecla Tab , e Sublime Text, como esperado , preenche os caracteres recuados (uma tabulação ou um número predeterminado de espaços) para cada linha selecionada:

[snip]

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

Então, como vou atribuir valores diferentes a eles na cláusula else , copio e colei-os lá, prontos para alteração:

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

E o problema é o seguinte: o Sublime Text recuou a primeira linha do meu bloco, mas não incluiu os caracteres recuados na seleção , então quando copiei e colei, não usei t obter o recuo da primeira linha. (Eu gostaria de poder mudar a cor de fundo para ilustrar melhor).

Não só isso, mas se eu cortar e colá-lo, os caracteres recuados seriam deixados para trás.

Eu posso contornar isso de alguma forma, tentando lembrar de copiar / recortar antes de fazer o recuo, mas a) eu não lembro sempre eb) então eu tenho que recuar o código duas vezes.

Alguém sabe de uma correção para isso?

    
por Wilson F 17.10.2014 / 00:44

2 respostas

2

No Sublime 3, há esse comando chamado Paste and Indent e o comando de teclado para isso é Super + shift + V , em que Super é a chave de comando principal do sistema operacional. Isso parece fazer o truque.

Encontrei-o aqui: link

Editar: pôster original adicionando mais informações, para que as pessoas não precisem analisar os comentários.

Voltando ao segundo passo do problema original:

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

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

Eu seleciono as duas linhas entre o primeiro conjunto de chaves (as atribuições para firstVar e secondVar , copie-as ( Ctrl + C ) e adicione uma linha vazia entre o segundo conjunto de chaves e coloque o cursor no início da linha em branco (indicado pelo | , abaixo):

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

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

Então eu 'Colar e Recuar' ( Ctrl + Deslocar + V ), e o código é colado com o recuo padrão para o tipo de arquivo, pronto para eu mudar. (Além disso, se eu tivesse colado mais linhas, com diferentes níveis de recuo, elas seriam ajustadas de acordo.)

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

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

Infelizmente, também é deixada uma linha extra em branco (porque se eu não tivesse colocado a linha extra, ela não teria recuado), mas isso é fácil de apagar.

(Então, infelizmente, ainda não é tão bom quanto ter o recorte de várias linhas funcionando corretamente, já que primeiro tenho que criar e depois destruir uma linha em branco. Apenas duas teclas extras pressionadas, você Claro, mas são dois pressionamentos de tecla que eu não precisaria fazer se a indentação de várias linhas funcionasse corretamente e interrompesse meu fluxo natural, então tenho que pensar sobre isso em vez de sobre o código mudanças que estou tentando fazer.

(Alternativamente, eu posso desmarcar o caractere de nova linha no final da última linha, pressionando enquanto continua pressionando Shift , e então eu só tem que criar uma nova linha, mas não excluir uma após a colagem, mas isso é uma coisa ainda menos natural para se fazer ou pensar do que adicionar e excluir uma linha extra em branco, e ainda envolve duas teclas extras.

(De qualquer forma, esse recurso é uma solução alternativa, não uma correção, mesmo que seja um recurso interessante, até legal).

No entanto, em situações em que você já tem linhas de texto entre suas chaves ( e você não precisa colar o novo código antes da última chave), ele funciona muito bem: você não usa Não é necessário adicionar uma linha em branco, basta posicionar o cursor no início da linha onde deseja inserir o novo código e pressionar Ctrl + Deslocar + V . As linhas serão inseridas com recuo que corresponde ao seu entorno.

Além disso, você não precisa necessariamente usar o recuo padrão. Se você colocar o cursor em alguma coluna arbitrária (com apenas espaço em branco à esquerda), o comando 'Colar e recuar' recortará tudo o que você colar nessa coluna. (Se você fizer isso em uma linha com texto à direita do cursor, o recuo dessa linha será alterado para corresponder ao que você colou).

Como eu disse, um recurso interessante e bastante legal, vale a pena brincar e conhecer, com certeza. E vale a pena ser a resposta aceita para esta pergunta. Mas ainda não bastante e apenas fazendo o recuo de várias linhas funcionar corretamente. :)

    
por 02.02.2016 / 23:02
0

Eu acredito que isso não é um bug, mas o comportamento normal, então eu não tenho uma correção. Em vez disso, tenho uma explicação e um caso de uso sugerido.

Isso acontece porque você não copia o recuo.

Você faz isso:

Vocêteráqueselecionaresseespaçotambém,antesdecopiar.Issopodeserfeitofacilmentededuasmaneiras:

  1. Comecesuaseleçãocomumduplocliquenorecuodessalinha.Issoselecionarátudoisso,assimcomoselecionariaumapalavra(queéfeitadeespaçoembranco).Tambémtemavantagemdeaseleçãomudarporpalavrasemvezdecaracteres.

  2. Comecesuaseleçãonofinaldalinhaanterior

por 27.10.2014 / 17:51