En Sublime Text 2, ¿cómo puedo aplicar sangría a una columna recta con múltiples cursores en un borde irregular?

33

Supongamos que tengo varios cursores en varias líneas, como esta:

foo|
barr|
foobar|
baz|

¿Cómo puedo empujar automáticamente el espacio en blanco al final de cada línea a un borde plano, como este ?:

foo    |
barr   |
foobar |
baz    |

(En estos ejemplos, |se supone que es mi cursor).

Cuando solo Tabo Spacedesde el arreglo inicial, obtienes esto:

foo    |
barr    |
foobar    |
baz    |

Eso es útil, pero no es lo que estoy buscando. Estoy buscando algún tipo de método abreviado de teclado que me permita sangrar desde una inserción irregular de varios cursores hasta una columna recta.

GladstoneMantener
fuente
¿Simplemente insertar una pestaña o dos funciona?
Darth Android
No, pero podría no estar entendiendo. He editado para aclarar mi pregunta.
GladstoneMantener el
Su edición describe lo que hace Space, y hasta cierto punto Tab lo hará si sus líneas varían en gran medida, pero si todas están bastante cerca, después de dos pestañas, sus cursores deberían estar en una pestaña. Puede que tenga que hacer un poco de ajuste para ponerlos a todos en la misma pestaña, pero será menos que intentar ajustar con espacios.
Darth Android
Es raro. Al presionar Tabal final de cada línea se sangra la inserción irregular del cursor múltiple en una columna recta, pero no es posible lograr el mismo efecto usando la expresión regular. Busqué espacios finales: \s*$y los reemplacé con el carácter de tabulación: \t- pero \tno logra el mismo efecto que presionar Tabmanualmente.
amiregelz
1
Para su información, publiqué esto como una solicitud de función en el tablero de solicitudes de Sublime Text 2.
GladstoneMantener el

Respuestas:

10

Podrías usar la alineación sublime de wbond

Puede requerir que agregue esto a su archivo de configuración (Preferencias> Configuración del paquete> Alineación> Configuración-Usuario:

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

Reemplace "|" con cualquier personaje que quieras alinear.

Editar: como ha descubierto mtoast, agregar "\n"a "alinear_caracteres" da el efecto deseado. Probablemente no sea necesario agregar el nuevo carácter de línea a "ignment_space_chars "y puede eliminar el texto. Sin embargo, con mis pruebas limitadas no vi una diferencia.

Mantenga controlpresionado y haga clic al final de cada línea. Luego presione las teclas de acceso rápido de alineación (para Linux, el valor predeterminado es ctrl+ alt+ a). Encontrará que los cursores están alineados con la posición más alejada del cursor.

Edit2: al agregar una nueva línea, "alignment_space_chars"se eliminará el texto si resalta un bloque de texto y Sublime Alignment no puede encontrar otra cosa para alinear en la línea (como un signo igual).

Además, si Sublime Alignment no puede encontrar algo más para alinear, agregar una nueva línea "alignment_chars"rellenará el final de las líneas con espacios (o pestañas según su configuración) para que coincida con la línea más larga resaltada.

d_rail
fuente
1
¡Wow asombroso! Instalé el paquete Sublime Alignment, agregué "\n"(nueva línea) a mi "alignment_chars"y obtuve el resultado deseado. (Nota: no lo agregué "alignment_space_chars", lo que provocó la eliminación de las líneas). Si agrega esa sugerencia específica ( "n") a su respuesta, la aceptaré.
GladstoneMantener
¡Agradable! Paquete muy útil para perfeccionistas como yo :)
amiregelz
3
También hay un paquete similar: Align Tabular , que es un poco más flexible (puede alinearse en varios caracteres).
d_rail
Con AlignTab mencionado anteriormente por d_rail, recuerde escapar |por un solo
usuario
No puedo creer que esto no tenga un millón de votos.
Charles
44

También puede hacerlo sin un paquete externo utilizando un truco menor, con un poco más de esfuerzo. Así es cómo:

| representa un cursor en estas instrucciones.

  1. Cree cursores en todas las líneas deseadas usando Ctrl+ Click o seleccionando un bloque de texto y presionando Ctrl+ Shift+ L. ( documentos de selección )

  2. Agregue espacios adicionales al final de cada palabra, hasta que cada cursor esté en o más allá del punto donde desea su columna (no importa qué tan lejos haya pasado):

    foo     |
    barr     |
    foobar     |
    baz     |
    
  3. ( opcional 1 ) Escriba cualquier carácter seguido de un espacio; usemos c:

    foo     c |
    barr     c |
    foobar     c |
    baz     c |
    
  4. Presione Homepara hacer que los cursores vayan al principio de las líneas:

    |foo     c
    |barr     c
    |foobar     c
    |baz     c
    
  5. Presione → (right arrow) hasta que los cursores estén donde desea su columna:

    foo    | c
    barr   |  c
    foobar |    c
    baz    | c
    
  6. Presione Ctrl+ Shift+ para seleccionar los siguientes espacios en blanco y cluego presione Delete:

    foo    |
    barr   |
    foobar |
    baz    |
    
  7. ( opcional 1 ) Presione Deletenuevamente para limpiar el carácter de espacio en blanco adicional que agregamos en el paso opcional.


1 Usamos el ccarácter seguido de un espacio solo si hay contenido adicional en las líneas que queremos mantener. Sin él, Ctrl+ Shift+ seleccionaría la primera palabra de cualquier contenido adicional en las líneas, haciendo que la eliminación sea difícil.

kogre
fuente
2
Esto parece retorcido al principio, pero es un buen truco. Bueno para pegar columnas con la alineación adecuada. La siguiente columna se puede pegar con el complemento de texto.
usuario
1
He estado usando esta técnica durante un tiempo, pero tenga cuidado , ctrl+shift+rightno trata a todos los personajes de manera consistente, por lo que puede terminar seleccionando más que solo un espacio en blanco.
SpareBytes
1
Un buen truco, estoy de acuerdo. Pero al final lo intenté sin un personaje, lo usé Shift-End Deletey simplemente funcionó. ¿Funciona en algunos casos pero no en otros?
Septagram
Esto es lo que siempre hago :)
Domino
Esto no funciona si cen una línea está antes del final de la palabra en otra. ¿Cuál es el problema que tengo ahora? Ciertas líneas no contienen suficiente carácter para desplazarse hacia la derecha, por lo que cuando lo hace se ajusta a la siguiente línea, dejando este truco como eso. Este es un truco, no un reemplazo útil para todos.
leetNightshade
0

Para aquellos que desean sangrar caracteres que no sean =y |, pude instalar el paquete de Alineación y modificar el archivo Sublime Text > Preferences > Package Settings > Alignment > Settings - Userpara que se vea así:

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

Luego seleccioné el siguiente 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)}

y presionó Command + Ctrl + Apara alinearlo.

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

Todo se movió a la columna más a la izquierda que el {createtexto podría ocupar sin dejar de estar alineado.

Matthew Hinea
fuente