Использование AStyle в Vim
Я пытаюсь заставить AStyle работать с Vim, чтобы я мог использовать ключ "=" для повторного ввода различных разделов кода. Например, я бы хотел, чтобы мой обычный =iB
набирал текущий блок кода, используя AStyle, а не встроенный индентор.
Я попробовал просто установить equalprg = astyle в моем vimrc, но проблема в том, что астиль получает только выделенный блок, но думает, что он получает целый файл. Поэтому отступ полностью отключается, когда я пытаюсь только отступать от вложенного класса.
Я знаю, что я всегда могу переформатировать весь файл сразу, но есть способ использовать астиль в vim, который полностью реплицирует исходное поведение форматирования vim (все мои команды =
-movement работают) и бонусные баллы для autoindent с использованием астиля!)?
Ответы
Ответ 1
Если не существует версии AStyle с параметром частичного форматирования файлов, вам необходимо применить дополнительный отступ после запуска AStyle.
Я не уверен, как вы можете сделать это с помощью движений.
С визуальным выбором вы можете захватить отступ в первой строке, передать код равнымprg и затем добавить этот отступ ко всем строкам:
vnoremap = <Esc>`<dwgv=`<<C-v>`>I<C-r>"<Esc>
Разрушение:
vnoremap -- so we can use = for equalprg
<Esc>`< -- stop selecting and go to beginning of line at beginning of selection
dw -- grab the initial indentation
gv= -- reselect and indent as normal
`<<C-v>`> -- block select the selection
I<C-r>"<Esc> -- insert the initial indentation
Может быть, вы можете сделать что-то подобное с движениями?
Ответ 2
Он работает только для форматировщиков, у которых есть опция форматирования частичного файла, как уже указывал idbrii. Пример форматирования, который делает это clang-format.
Один из способов интегрировать это в vim - это vim-autoformat. Используя этот плагин, вы можете viB
, а затем нажмите клавишу самоопределения формата, например <F3>
. Затем будет отформатирован только выделенный внутренний блок кода.