Выровнять текст по знаку равенства в vim - PullRequest
30 голосов
/ 23 января 2012

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

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

К этому:

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

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

Ответы [ 8 ]

38 голосов
/ 23 января 2012

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

Самый простой способ установить его - использовать Pathogen *Плагин 1009 *, а затем клонирование репозитория Tabular git в ~/.vim/bundle/tabular.Полные инструкции в Pathogen README.

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

:Tab /=
13 голосов
/ 23 января 2012

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

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

:Tabularize /=

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

12 голосов
/ 11 июля 2014

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

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

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

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);
4 голосов
/ 22 июля 2018

Для простого решения, которое не требует установки плагина, просто отфильтруйте с помощью команды столбца 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.

1 голос
/ 09 марта 2017

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

Example of vim easy align command

1 голос
/ 20 августа 2015

Установите 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
1 голос
/ 26 июля 2015

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

vip:Align =

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

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

...