No Sublime Text 2, como posso recuar para uma coluna reta com vários cursores em uma borda irregular?

33

Suponha que eu tenha vários cursores ao longo de várias linhas, assim:

foo|
barr|
foobar|
baz|

Como posso empurrar automaticamente o espaço em branco no final de cada linha para uma borda plana, como esta?

foo    |
barr   |
foobar |
baz    |

(Nestes exemplos, |deveria ser meu cursor.)

Quando você apenas Tabou Spacedo arranjo inicial, obtém o seguinte:

foo    |
barr    |
foobar    |
baz    |

Isso é útil, mas não é o que estou procurando. Estou procurando por algum tipo de atalho de teclado que me permita recuar de uma inserção irregular de vários cursor para uma coluna reta.

GladstoneKeep
fonte
Simplesmente inserir uma guia ou duas funciona?
Darth Android
Não, mas posso estar falhando em entender. Eu editei para esclarecer minha pergunta.
GladstoneKeep
Sua edição descreve o que o Space faz e, até certo ponto, o Tab fará se suas linhas variarem bastante, mas se estiverem todas bem próximas, depois de duas guias, os cursores deverão estar em um ponto de tabulação. Talvez você precise fazer alguns ajustes para colocá-los todos na mesma barra de tabulação, mas será menos do que tentar ajustar com espaços.
Darth Android
É estranho. Pressionar Tabno final de cada linha recua a inserção de vários cursores irregulares em uma coluna reta, mas não é possível obter o mesmo efeito usando o regex. Procurei espaços à direita: \s*$e os substitui pelo caractere de tabulação: \t- mas \tnão obtém o mesmo efeito que pressionar Tabmanualmente.
Amiregelz 14/09/12
11
Para sua informação, publiquei isso como uma solicitação de recurso no quadro de solicitações Sublime Text 2.
GladstoneKeep

Respostas:

10

Você poderia usar o alinhamento sublime da wbond

Pode ser necessário adicionar isso ao seu arquivo de configurações (Preferências> Configurações do pacote> Alinhamento> Configurações-usuário:

// 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": ["=", "|"]

Substitua "|" com qualquer caractere que você deseja alinhar.

Edit: Como o mtoast descobriu, adicionar "\n"a "alignment_chars" dá o efeito desejado. Adicionar o novo caractere de linha a "alignment_space_chars" provavelmente não é necessário e pode excluir o texto. No entanto, com meus testes limitados, não vi diferença.

Mantenha controlpressionado e clique no final de cada linha. Em seguida, pressione as teclas de atalho de alinhamento (para linux, o padrão é ctrl+ alt+ a). Você verá que os cursores estão alinhados com a posição mais distante do cursor.

Edit2: Adicionar nova linha para "alignment_space_chars"excluir o texto se você destacar um bloco de texto e o Sublime Alignment não encontrar mais nada para alinhar na linha (como um sinal de igual).

Além disso, se o Alinhamento sublime não conseguir encontrar outra coisa para alinhar, adicionar nova linha para "alignment_chars"preencher o final das linhas com espaços (ou tabulações, dependendo das configurações) para corresponder à linha mais longa realçada.

d_rail
fonte
11
Uau, ótimo! Instalei o pacote Sublime Alignment, adicionei "\n"(newline) ao meu "alignment_chars"e obtive o resultado desejado. (Nota: não o adicionei "alignment_space_chars", o que causou a exclusão das linhas.) Se você adicionar essa sugestão específica ( "n") à sua resposta, eu aceito.
GladstoneKeep
Agradável! Pacote muito útil para perfeccionistas como me :)
amiregelz
3
Há também um pacote semelhante: Alinhar Tabular , que é um pouco mais flexível (você pode alinhar vários caracteres).
d_rail
Com o AlignTab mencionado acima por d_rail, lembre-se de escapar |com um único `\`
user
Não acredito que isso não tenha um milhão de votos.
Charles Charles
44

Você também pode fazer isso sem um pacote externo usando um pequeno hack, com apenas um pouco mais de esforço. Aqui está como:

| representa um cursor nestas instruções.

  1. Crie cursores em todas as linhas desejadas usando Ctrl+ Clique ou selecionando um bloco de texto e pressionando Ctrl+ Shift+ L. ( documentos de seleção )

  2. Adicione espaços adicionais ao final de cada palavra, até que cada cursor esteja no ponto ou após o ponto em que você deseja a sua coluna (não importa a distância):

    foo     |
    barr     |
    foobar     |
    baz     |
    
  3. ( opcional 1 ) Digite qualquer caractere seguido de um espaço; vamos usar c:

    foo     c |
    barr     c |
    foobar     c |
    baz     c |
    
  4. Pressione Homepara fazer com que os cursores sigam o início das linhas:

    |foo     c
    |barr     c
    |foobar     c
    |baz     c
    
  5. Pressione → (right arrow) até que os cursores estejam onde você deseja sua coluna:

    foo    | c
    barr   |  c
    foobar |    c
    baz    | c
    
  6. Pressione Ctrl+ Shift+ para selecionar todos os seguintes espaços em branco e c, em seguida, pressione Delete:

    foo    |
    barr   |
    foobar |
    baz    |
    
  7. ( opcional 1 ) Pressione Deletenovamente para limpar o caractere de espaço em branco extra que adicionamos na etapa opcional.


1 Usamos o ccaractere seguido por um espaço apenas se houver conteúdo adicional nas linhas que queremos manter. Sem ele, Ctrl+ Shift+ selecionaria a primeira palavra de qualquer conteúdo adicional nas linhas, tornando a exclusão complicada.

kogre
fonte
2
Isso parece distorcido no começo, mas é um truque legal. Bom para colar colunas com alinhamento adequado. A próxima coluna pode ser colada usando o plug-in de pastelaria de texto.
usuário
11
Eu uso essa técnica há algum tempo, mas tenha cuidado , ctrl+shift+rightnão trata todos os caracteres de forma consistente, portanto, pode acabar selecionando mais do que apenas espaço em branco.
SpareBytes 12/06
11
Um truque muito legal, eu concordo. Mas eu apenas tentei sem um personagem no final, usei Shift-End Deletee funcionou. Funciona em alguns casos, mas não em outros?
Septagram
Isto é o que eu sempre faço :)
Domino
Isso não funciona se a clinha estiver antes do final da palavra na outra. Qual é o problema que estou tendo agora? Certas linhas não contêm caracteres suficientes para rolar para a direita; portanto, quando você faz isso, passa para a próxima linha, deixando esse hack exatamente assim. Este é um hack, não é um substituto útil.
LeetNightshade 25/05
0

Para aqueles que desejam recuar em caracteres diferentes de =e |, consegui instalar o pacote Alignment e modificar o arquivo Sublime Text > Preferences > Package Settings > Alignment > Settings - Userpara ter a seguinte aparência:

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

Em seguida, selecionei o seguinte código:

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

e pressionado Command + Ctrl + Apara alinhá-lo.

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

Tudo foi movido para a coluna mais à esquerda que o {createtexto poderia ocupar enquanto ainda estivesse alinhado.

Matthew Hinea
fonte