Ответ 1
Если вы используете Tabular, вы можете просто сделать :Tabularize /:\zs/
.
Глядя на выровнять описание на vim.org, подобный вызов должен сработать для него. Вы можете попробовать :Align :\zs
. Я не использую Align, поэтому я не уверен.
Предположим, что у меня есть этот код:
width: 215px;
height: 22px;
margin-top: 3px;
background-color: white;
border: 1px solid #999999;
Я хочу выровнять его так:
width: 215px;
height: 22px;
margin-top: 3px;
background-color: white;
border: 1px solid #999999;
используя Align.vim Я могу сделать :Align \s
для использования пробелов в качестве разделителя, но у этого есть 2 проблемы
Я прочитал много вариантов предложений Align.vim, но я не нашел способ сделать это.
Если вы используете Tabular, вы можете просто сделать :Tabularize /:\zs/
.
Глядя на выровнять описание на vim.org, подобный вызов должен сработать для него. Вы можете попробовать :Align :\zs
. Я не использую Align, поэтому я не уверен.
Вы можете сделать это с помощью макроса Vim, никаких необходимых плагинов. Поместите курсор в любую точку на первой строке и введите обычный режим, а не режим вставки:
qa0f:w100i <Esc>19|[email protected]
Обратите внимание на одиночное пространство после 100i и <Esc> означает "нажатие кнопки" - не набирайте "<Esc> " в буквальном смысле.
Перевод:
qa -- record macro in hotkey a
0 -- go to beginning of line
f: -- go to first : symbol
w -- go to next non-space character after the symbol
100i <Esc> -- insert 100 spaces
19| -- go to 19th column (value 19 figured out manually)
dw -- delete spaces until : symbol
j -- go to next line
q -- stop recording macro
[email protected] -- run the macro 4 times (for the remaining 4 lines)
И да, я использовал аналогичный макрос для форматирования вышеуказанного кода:)
Cf. мой ответ на аналогичный вопрос Vim выравнивания.
Чтобы применить это к ряду строк в визуальном режиме, выполните, выберите и введите:
:[email protected]
Используйте @TalkLittle алгоритм, это можно сделать с помощью этого кода, что для меня немного легче:)
добавьте достаточное количество спаек после первого двоеточия
:%s/^[^:]:\zs/
много пробелов /
но если нажатие пробелов все время болит большим пальцем, используйте это вместо
:%s/^[^:]:\zs/\=repeat(' ',100)/
затем удалите все пробелы после столбца 19
:%s/\%19v\s*//
ПРИМЕЧАНИЕ:% будет делать это во всех строках, укажите диапазон, если вы этого не хотите.
если вы не хотите считать до 19, используйте это:
%s/:\zs.*// | %s/.*/\=len(submatch(0))/ | sort! n | let n=getline(1) | undo | echo 'the column nmuber of the right most ":" is' n
Вы все еще можете сделать это с помощью своего предпочтительного плагина Align.vim
с командой:
Align! lp0P0: \s
Align!
означает, что первый аргумент имеет формат AlignCtrl
, где вы заказываете
первое совпадение слева (l
) выровнено без пробела (p0P0
), и вы также хотите пропустить (:
) все последующие совпадения.
Этот пример может быть расширен для более сложных выравниваний.