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

13199
GladstoneKeep

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

foo| barr| foobar| baz| 

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

foo | barr | foobar | baz | 

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

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

foo | barr | foobar | baz | 

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

31
Работает ли просто вставка одной или двух вкладок? Darth Android 12 лет назад 0
Нет, но я могу не понять. Я редактировал, чтобы уточнить мой вопрос. GladstoneKeep 12 лет назад 0
Ваше редактирование описывает то, что делает Space, и в некоторой степени Tab, если ваши строки сильно различаются, но если они все довольно близки, то после двух вкладок все ваши курсоры должны быть на табуляции. Возможно, вам придется немного поработать, чтобы все они были на одной вкладке, но это будет меньше, чем пытаться настроить с пробелами. Darth Android 12 лет назад 0
Это странно. Нажав клавишу `Tab` в конце каждой строки, выровняйте рваную многоточечную вставку в прямой столбец, но с помощью регулярных выражений добиться того же эффекта невозможно. Я искал завершающие пробелы: `\ s * $` и заменил их символом табуляции: `\ t` - но` \ t` не дает того же эффекта, что и нажатие клавиши `Tab` вручную. amiregelz 12 лет назад 0
К вашему сведению, я [опубликовал это как запрос функции] (http://sublimetext.userecho.com/topic/127714-/) на доске запросов Sublime Text 2. GladstoneKeep 12 лет назад 1

3 ответа на вопрос

41
kogre

You can also do it without an external package using a minor hack, with only slightly more effort. Here's how:

| represents a cursor in these instructions.

  1. Create cursors on all desired lines using Ctrl+Click or by selecting a block of text and pressing Ctrl+Shift+L. (selection docs)

  2. Add additional spaces to the end of every word, until every cursor is at or past the point where you want your column (does not matter how far past):

    foo | barr | foobar | baz | 
  3. (optional1) Type any character followed by a space; let's use c:

    foo c | barr c | foobar c | baz c | 
  4. Press Home to make the cursors go the beginning of the lines:

    |foo c |barr c |foobar c |baz c 
  5. Press → (right arrow) until the cursors are where you want your column:

    foo | c barr | c foobar | c baz | c 
  6. Press Ctrl+Shift+ to select all following whitespace and c, then press Delete:

    foo | barr | foobar | baz | 
  7. (optional1) Press Delete again to clean up the extra whitespace character that we added in the optional step.


1 We use the c character followed by a space only if there is additional content on the lines that we want to keep. Without it, Ctrl+Shift+ would select the first word of any additional content on the lines, making deletion tricky.

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

Вы можете использовать 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"будет заполнять конец строк пробелами (или табуляциями в зависимости от ваших настроек), чтобы соответствовать самой длинной выделенной строке.

Вау, отлично! Я установил пакет Sublime Alignment, добавил `" \ n "` (newline) к моим "" alignment_chars "` и получил желаемый результат. (Примечание: я не добавил его в "alignment_space_chars" `, что привело к удалению строк.) Если вы добавите это конкретное предложение (` "n" `) в свой ответ, я приму. GladstoneKeep 12 лет назад 1
Ницца! Очень полезная упаковка для перфекционистов вроде меня :) amiregelz 12 лет назад 0
Также есть похожий пакет: [Align Tabular] (https://github.com/randy3k/AlignTab), который немного более гибкий (вы можете выравнивать по нескольким символам). d_rail 11 лет назад 3
С AlignTab, упомянутым выше d_rail, не забудьте экранировать `|` одним `\\` user 11 лет назад 0
Я не могу поверить, что у этого нет миллиона голосов "за". Charles 7 лет назад 0
0
Matthew Hinea

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

{ "alignment_chars": [ " 

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

 let!(:admin_user)  let!(:another_admin_user)  let!(:superadmin_user1)  let!(:superadmin_user2)  let!(:nonadmin_user)  

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

 let!(:admin_user)  let!(:another_admin_user) let!(:superadmin_user1)  let!(:superadmin_user2)  let!(:nonadmin_user)  

Все было перемещено в крайний левый столбец, который /bin/pidof ssh if [[ $? -ne 0 ]]; then echo Creating new tunnel connection createTunnel fi

Работа cron просто:

crontab -e */1 * * * * /root/scripts/ssh_tunnel.sh > tunnel.log 2>&1 

Мне нужно ssh сессий для автоматического восстановления в случае прерывания. В настоящее время, если процесс sshd на сервере завершается, процесс на клиенте не завершается, в результате чего сценарий не пытается установить новый сеанс.
Я замечаю, что когда соединение запускается вручную с интерактивного терминала, проблем нет, то есть клиент умирает вместе с процессом на стороне сервера при завершении.

Любая помощь будет оценена, спасибо.