Vim tabular только в первом матче на линии?
Я пытаюсь отформатировать код python с помощью плагина tabular.vim. В настоящее время он является декларативным классом sqlalchemy и выглядит примерно так:
id = db.Column(db.Integer, primary_key=True)
status = db.Column(db.Integer, nullable=False, default=3)
...etc...
Я хотел бы иметь возможность выровнять только самый первый знак равенства в списке.
id = db.Column(db.Integer, primary_key=True)
status = db.Column(db.Integer, nullable=False, default=3)
...etc...
Просто обычный
: Tabularize /=
похоже, соответствует всем, и все идет с ума.
Большое спасибо заранее!
Ответы
Ответ 1
Вы можете использовать эту команду:
:Tabularize /^[^=]*\zs=
Образец соответствует только первому =
.
Вы можете добавить эти две строки в ~/.vim/after/plugin/TabularMaps.vim
AddTabularPattern 1= /^[^=]*\zs=
AddTabularPattern 1== /^[^=]*\zs=/r0c0l0
В следующий раз просто запустите:
:Tabularize 1=
Если вам не нужны пробелы вокруг =
, запустите это:
:Tabularize 1==
Ответ 2
Вышеприведенные предложения хороши, но в этом случае они слишком сложны и требуют слишком большого набора текста. Как насчет:
:Tab /=.*/
Это работает просто отлично - совпадение первого знака равенства и всего после него выравнивание влево (по умолчанию, которое работает отлично!).
Ответ 3
Отличный плагин для этого: vim-easy-align.
Ответ 4
В соответствии с этим ответом вместо создания статического отображения для каждого случая вы можете сделать это динамически, настроив команду vim следующим образом:
command! -nargs=1 -range TabFirst exec <line1> . ',' . <line2> . 'Tabularize /^[^' . escape(<q-args>, '\^$.[?*~') . ']*\zs' . escape(<q-args>, '\^$.[?*~')
С помощью этой команды, если вы хотите выровнять по первому =
, тогда вы можете сделать:
:TabFirst =
Или, если вы хотите выровнять первый {
, вы можете сделать:
:TabFirst {
Это поддерживает выбор диапазона, а также интеллектуальный выбор Tabularize.