Ответ 1
Tabularize /,\zs
См. :help \zs
Поскольку предыдущий шаблон не работает, попробуйте с этим:
Tabularize /[^,]\+,
Это мой код:
john,betty,wally,beth
walter,george,thomas,john
herbert,bob,petty,mick`
Кто-нибудь знает, как выровнять его с помощью VIM Tabular Plugin:
john, betty, wally, beth
walter, george, thomas, john
herbert, bob, petty, mick
Я знаю, как это сделать в Align Plugin, но не могу узнать, как это работает в Tabular.
Tabularize /,\zs
См. :help \zs
Поскольку предыдущий шаблон не работает, попробуйте с этим:
Tabularize /[^,]\+,
Я не мастер в этом, и все, что я скажу здесь, основано на понимании моего метода Tabularize.
Tabularize всегда разделяет вещи в полях, описываемых регулярным выражением. Например:
abc,d,e
a,b,cde
:Tab /,
Заставляет его делить каждую строку следующим образом:
|abc|,|d|,|e|
|a|,|b|,|cde|
Затем каждое поле заполняется пробелами, поэтому поле разделителя выравнивается - и все получает и добавляет лишнее пространство по умолчанию (за исключением последнего поля, я думаю).
|abc |, |d |, |e |
|a |, |b |, |cde|
Результат:
abc , d , e
a , b , cde
Добавляя флаги, вы можете управлять выравниванием и заполнением для каждого поля. Если вы предоставляете меньше флагов, чем необходимо, они используются повторно. Итак, чтобы все было согласовано одинаково, скажем, оставив с дополнением 0, вы можете использовать один флаг, который будет повторяться для каждого поля. Итак:
abc,d,e
a,b,cde
Tab /,/l0 <-- or c0, or r0 or whatever
abc,d,e
a ,b,cde
В заключение я имею в виду, что нет смысла иметь поле нулевой ширины (например, :Tab /,\zs
), вероятно, заставляя его получить первый символ после шаблона и испортить его, отрезав его.
Теперь для меня :Tab /[^,]\+,
не работал должным образом, создавая удвоенные пробелы:
john, betty, wally, beth
walter, george, thomas, john
herbert, bob, petty, mick`
^^ ^^
Я думаю, потому что промежуточного поля нет. Этот шаблон создает разделитель полей рядом друг с другом, например:
|john,||betty,||wally,||beth|
Затем нуль с генерируемым полем (между разделителями) также дополняется дополнительным 1 пробелом по умолчанию.
|john, | |betty, | |wally, ||beth| <-- for some outrageous reason the las one is cut.
john, betty, wally, beth
Как его решить?
Я бы открыл пространство для разделителя, что не приводит к тому, что разделитель будет рядом с другими. Как? Просто добавив пробел после запятой.
john,betty,wally,beth
walter,george,thomas,john
herbert,bob,petty,mick`
:%s/,/, /g
john, betty, wally, beth
walter, george, thomas, john
herbert, bob, petty, mick`
Теперь вы можете выровнять все по пробелам и нулевому заполнению:
john, betty, wally, beth
walter, george, thomas, john
herbert, bob, petty, mick`
:Tab / /l0
john, betty, wally, beth
walter, george, thomas, john
herbert, bob, petty, mick`
Я надеюсь, что это поможет понять Tabularize!
Основываясь на ответе Раймонди,
:Tabularize /,\zs/l0r1
имеет больше смысла для меня, а также только одной командой: -).
l0r1
означает выравнивание по левому краю с 0 пробелами в левом дополнении и 1 пробел в правом дополнении.
Другим вариантом может быть обмануть и использовать имена также как часть разделителя:
:Tabularize /[a-z]*,/l0l1
Ищет любое имя в нижнем регистре с запятой. Все выравнивается влево и по меньшей мере одно пробел следует в разделительной запятой.
У меня есть нечто подобное, что я делаю. Я регулярно должен включать значения, разделенные запятыми, в столбцы:
a, b a,b,c a, b, c a, b, c ab,cd,ef ab, cd,ef ab,cd ab, cd john, betty davis, wally, beth walter, george, thomas, john herbert, bob, petty, mick
Используя :s/,\s*/, /g
, предварительно добавьте значения для добавления одного пробела после запятой:
a, b a, b, c a, b, c a, b, c ab, cd, ef ab, cd, ef ab, cd ab, cd john, betty davis, wally, beth walter, george, thomas, john herbert, bob, petty, mick
Запуск :Tab /,\zs \+/10
превращает их в:
a, b a, b, c a, b, c a, b, c ab, cd, ef ab, cd, ef ab, cd ab, cd john, betty davis, wally, beth walter, george, thomas, john herbert, bob, petty, mick
Теперь мне просто нужно выяснить, как превратить их в vmap
, который работает.
И как насчет этого:
%s/,/,\t/g