В Sublime Text 2, как я могу сделать отступ в прямой столбец с несколькими курсорами на неровном краю?

33

Предположим, у меня есть несколько курсоров в нескольких строках, например:

foo|
barr|
foobar|
baz|

Как я могу автоматически вытолкнуть пробел в конце каждой строки на ровный край, как это ?:

foo    |
barr   |
foobar |
baz    |

(В этих примерах |должен быть мой курсор.)

Когда вы просто Tabили Spaceиз первоначальной договоренности, вы получите это:

foo    |
barr    |
foobar    |
baz    |

Это полезно, но не то, что я ищу. Я ищу какое-то сочетание клавиш, которое позволит мне сделать отступ от рваной вставки с несколькими курсорами до прямой колонки.

GladstoneKeep
источник
Работает ли просто вставка одной или двух вкладок?
Darth Android
Нет, но я могу не понять. Я редактировал, чтобы уточнить мой вопрос.
GladstoneKeep
Ваше редактирование описывает, что делает Space, и в некоторой степени Tab, если ваши строки сильно меняются, но если они все довольно близки, то после двух вкладок все ваши курсоры должны быть на табуляции. Возможно, вам придется немного поработать, чтобы получить их все на одной и той же вкладке, но это будет меньше, чем пытаться настроить с пробелами.
Darth Android
Это странно. Нажатие Tabв конце каждой строки выравнивает рваную многоточечную вставку в прямой столбец, но с помощью регулярных выражений добиться того же эффекта невозможно. Я искал завершающие пробелы: \s*$и заменил их символом табуляции: \t- но \tне добился того же эффекта, что и нажатие Tabвручную.
amiregelz
1
К вашему сведению, я разместил это как запрос функции на доске запросов Sublime Text 2.
GladstoneKeep

Ответы:

10

Вы можете использовать Sublime Alignment от wbond

Может потребоваться добавить это в файл настроек («Настройки»> «Настройки пакета»> «Выравнивание»> «Настройки-Пользователь»):

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

Заменить "|" с любым персонажем, которого вы хотите выровнять.

Редактировать: Как выяснил mtoast, добавление "\n"к «alignment_chars» дает желаемый эффект. Добавление символа новой строки в "alignment_space_chars", вероятно, не требуется и может удалить текст. Однако, с моими ограниченными тестами я не видел разницы.

Удерживайте controlи нажмите в конце каждой строки. Затем нажмите горячие клавиши выравнивания (для linux по умолчанию это ctrl+ alt+ a). Вы обнаружите, что курсоры выровнены с самой дальней позицией курсора.

Edit2: добавление новой строки для "alignment_space_chars"удалит текст, если вы выделите блок текста, и Sublime Alignment не сможет найти что-то еще для выравнивания в строке (например, знак равенства).

Кроме того, если Sublime Alignment не может найти что-то еще для выравнивания, добавление новой строки "alignment_chars"будет заполнять конец строк пробелами (или табуляциями в зависимости от ваших настроек), чтобы соответствовать самой длинной выделенной строке.

d_rail
источник
1
Вау, отлично! Я установил пакет Sublime Alignment, добавил "\n"(newline) к моему "alignment_chars"и получил желаемый результат. (Примечание: я не добавил его "alignment_space_chars", что привело к удалению строк.) Если вы добавите это конкретное предложение ( "n") в свой ответ, я приму.
GladstoneKeep
Ницца! Очень полезный пакет для таких перфекционистов, как я :)
amiregelz
3
Также есть похожий пакет: Align Tabular , который немного более гибкий (вы можете выравнивать по нескольким символам).
d_rail
С AlignTab, упомянутым выше d_rail, не забудьте сбежать |одним `\`
пользователем
Я не могу поверить, что у этого нет миллиона голосов "за".
Чарльз
44

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

| представляет курсор в этих инструкциях.

  1. Создайте курсоры на всех нужных строках, используя Ctrl+ Click или выделив блок текста и нажав Ctrl+ Shift+ L. ( выбор документов )

  2. Добавляйте дополнительные пробелы в конец каждого слова, пока каждый курсор не окажется в точке, в которой вы хотите разместить столбец, или за ней (не имеет значения, как далеко вы прошли):

    foo     |
    barr     |
    foobar     |
    baz     |
    
  3. ( необязательно 1 ) Введите любой символ с пробелом; давайте использовать c:

    foo     c |
    barr     c |
    foobar     c |
    baz     c |
    
  4. Нажмите, Homeчтобы курсоры пошли в начало строк:

    |foo     c
    |barr     c
    |foobar     c
    |baz     c
    
  5. Нажимайте → (right arrow) до тех пор, пока курсоры не окажутся там, где вам нужен ваш столбец

    foo    | c
    barr   |  c
    foobar |    c
    baz    | c
    
  6. Нажмите Ctrl+ Shift+, чтобы выбрать все следующие пробелы, а cзатем нажмите Delete:

    foo    |
    barr   |
    foobar |
    baz    |
    
  7. ( необязательно 1 ) Нажмите еще Deleteраз, чтобы очистить лишний символ пробела, который мы добавили на необязательном шаге.


1 Мы используем cсимвол, за которым следует пробел, только если в строках есть дополнительный контент, который мы хотим сохранить. Без него Ctrl+ Shift+ выделит первое слово любого дополнительного содержимого в строках, что затруднит удаление.

kogre
источник
2
Поначалу это выглядит странно, но это аккуратный хак. Хорошо для вставки столбцов с правильным выравниванием. Следующий столбец можно вставить с помощью плагина текстового теста.
пользователь
1
Я уже некоторое время использую эту технику, но будьте осторожны , ctrl+shift+rightона не обрабатывает все символы одинаково, поэтому она может выбрать больше, чем просто пробел.
SpareBytes
1
Я действительно согласен. Но я просто попробовал это без персонажа в конце, и использовал, Shift-End Deleteи это просто сработало. Это работает в некоторых случаях, но не в других?
Septagram
Это то, что я всегда делаю :)
Domino
Это не работает, если в cодной строке до конца слова в другой. Какая проблема у меня сейчас. Некоторые строки не содержат достаточного количества символов для прокрутки вправо, поэтому, когда вы делаете это, переносится на следующую строку, оставляя этот хак как таковой. Это взлом, а не полезная универсальная замена.
leetNightshade
0

Для тех, кто хочет сделать отступ для символов, отличных от =и |, я смог установить пакет Alignment и изменить файл так, Sublime Text > Preferences > Package Settings > Alignment > Settings - Userчтобы он выглядел следующим образом:

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

Затем я выбрал следующий код:

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

и нажал, Command + Ctrl + Aчтобы выровнять его.

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

Все было перемещено в крайний левый столбец, который {createмог занимать текст, при этом оставаясь на линии .

Мэтью Хинея
источник