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