Выровнять текст по знаку равенства в vim

Я стараюсь выровнять код на равных знаках для лучшей читаемости. Из этого:

$ = jQuery.sub()
Survey = App.Survey
Sidebar = App.Sidebar
Main = App.Main

Для этого:

$       = jQuery.sub()
Survey  = App.Survey
Sidebar = App.Sidebar
Main    = App.Main

Есть ли простой способ сделать это в vim?

Ответ 1

Лучший плагин, который я нашел до сих пор, Tabular.vim.

Самый простой способ установить его можно с помощью плагина Pathogen, а затем клонирования хранилища таблиц git до ~/.vim/bundle/tabular. Полные инструкции в README патогена.

После того, как он был установлен, использование его - это просто вопрос поместить курсор в абзац, который вы хотите выровнять и запустить:

:Tab /=

Ответ 2

Я считаю, что это легко сделать с помощью плагина Tabular. Вот оно в действии.

Выберите диапазон в визуальном режиме (на самом деле не обязательно) и выполните:

:Tabularize /=

Плагин может часто находить правильный диапазон самостоятельно, без необходимости выбирать его визуально или указывать диапазон для команды ex.

Ответ 3

Это не самый простой способ сделать что-то, но это можно сделать без каких-либо плагинов.

  • Используйте V и :s/=/ =/, чтобы вставить кучу пробелов перед каждым символом равенства.
  • Используйте Ctrl-V, чтобы выбрать столбец, в который вы хотите переместить знаки равенства.
  • Нажимайте << до "unindent" правой стороны каждого уравнения к выбранному столбцу, а затем нажимайте . до тех пор, пока в этом столбце не будут выровнены знаки равенства.

Ответ 4

Альтернативный плагин для табличного:

https://github.com/tommcdo/vim-lion

Из документов:

Например, glip= превратит

$i = 5;
$username = 'tommcdo';
$stuff = array(1, 2, 3);

в

$i        = 5;
$username = 'tommcdo';
$stuff    = array(1, 2, 3);

Ответ 5

Для простого решения, которое не требует установки плагина, просто отфильтруйте с помощью команды столбца Unix.

Обратите внимание, что есть два способа сделать это в зависимости от того, поддерживает ли ваша команда column -o.

Команда столбца GNU (Linux и т.д.)

:% ! column -t -s= -o=

Это.

Команда колонки BSD (Mac OS X и т.д.)

Шаг первый, отфильтруйте через column -t:

:% ! column -t

Шаг второй, удалите отступы вокруг разделителя:

:%s/ = /=/

Исходный текст

$ = jQuery.sub()
Survey = App.Survey
Sidebar = App.Sidebar
Main = App.Main

После первого шага это становится

$        =  jQuery.sub()
Survey   =  App.Survey
Sidebar  =  App.Sidebar
Main     =  App.Main

И после второго шага

$       = jQuery.sub()
Survey  = App.Survey
Sidebar = App.Sidebar
Main    = App.Main

Или, если вы хотите сделать это за один шаг:

:% ! column -t | sed 's/ = /=/'

Для получения дополнительной информации, man column.

Ответ 6

Установите tabularize и измените gist tpope к чему-то вроде этого:

inoremap <silent> :   :<Esc>:call <SID>align(':')<CR>a
inoremap <silent> =   =<Esc>:call <SID>align('=')<CR>a

function! s:align(aa)
  let p = '^.*\s'.a:aa.'\s.*$'
  if exists(':Tabularize') && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
    let column = strlen(substitute(getline('.')[0:col('.')],'[^'.a:aa.']','','g'))
    let position = strlen(matchstr(getline('.')[0:col('.')],'.*'.a:aa.':\s*\zs.*'))
    exec 'Tabularize/'.a:aa.'/l1'
    normal! 0
    call search(repeat('[^'.a:aa.']*'.a:aa,column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
  endif
endfunction

Ответ 7

Этот плагин vim-easy-align делает это. Вот один из многих приведенных примеров:

Пример команды vim easy align

Ответ 8

Вы можете использовать Align Vim plugin для выравнивания таких блоков, например. путем ввода

vip:Align =

в командном режиме, когда курсор помещается внутри выравниваемого блока.

Где vip входит в виртуальный режим и выбирает текущий абзац. Команда Align достаточно мощная, например. вы также можете указать несколько шаблонов, шаблоны интерпретируются как регулярные выражения и т.д.