Мне нравится функция интеллектуального отступа в Vim, которая позволяет создавать хорошо кодированные блоки кода.
Я регулярно копирую / вставляю код в буферы, но этот код часто плохо отформатирован.
Что было бы идеально, так это «переработать» код через систему smart-indent.
Это возможно?
Например, как бы вы «исправили» следующий код (выдержка из большего блока - я не хочу исправлять каждую строку вручную ...):
else
{
m[c] = 5;
Finished = true;
std::cout<<"(ID,R,E)"<<"-->"<<"("<<g[c]<<","<<r[c]<<","<<E1 <<")"<< std::endl;
std::cout << "\n"<<"finish-->" << r[c] << "\t" <<"E1-->"<< E1 <<"\n" ;
}
}
indentation
ide
rolfl
источник
источник
Ответы:
Я делаю это одним из двух способов.
Отрегулировать отступ
Во-первых, если код в буфере отформатирован, но с другим уровнем отступа, я использую
]p
вместоp
, который вставляет код как есть, но с отступом, смещенным так, что первая вставленная строка имеет ту же глубину, что и строка I Я на.EG источник скопирован в буфер
Например, результат вставки
]p
vim переводит время на тот же уровень отступа, что и
int i
. Это быстро, но работает, только если скопированный код имеет правильные отступы внутри самого себя.Переформатировать после вставки
=
Оператор в VIM переформатирует код на основе настроенных правил форматирования. Для коротких фрагментов вставки я перехожу в визуальный режимv
, выбираю только что вставленные строки и затем нажимаю,=
чтобы переформатировать их.Для больших вставок я использую тот факт, что курсор переходит на первую вставленную строку и что vim говорит что-то вроде «еще 84 строки». Затем я могу ввести,
84==
чтобы переформатировать эти 84 строки (конечно, замените 84 тем количеством строк, которое вы фактически вставили).Ссылки
:help ]p
для скорректированной пасты:help =
крышки={motion}
,[count]==
и{Visual}=
для фильтрации через обычай или правила отступа встроенныхисточник
Команда
=
может быть использована для повторного отступа.Как и большинство команд в обычном режиме, его можно применить к движению, чтобы вы могли переименовать только что вставленный код =']. Это переопределяет от текущей позиции курсора до
']
метки, которая является последней строкой вставки.=
также может быть использован из визуального режима.Еще одна полезная команда ]p, которая вставляет на тот же уровень отступа, что и текущая строка. Это может помочь вставить правильно текст с отступом, хотя и с другой глубиной отступа, в соответствии с окружающим текстом.
источник
Использование =ap (мнемоника - это «форматировать абзац») приведет к попытке vim автоматически отформатировать текущий абзац.
Если вы хотите обратить пристальное внимание на то, что вы потенциально можете переформатировать, вам может показаться более разумным и быстрым использование vapдля визуального выбора текущего абзаца (что дает вам визуальное представление о том, что переформатируется), а затем =. Я нахожу это полезным в файлах, где я знаю, что vim будет переформатировать неправильно, и я не хочу ошибочно форматировать другие строки.
источник
Чтобы повторно сделать отступ для файла, уже находящегося в буфере, используйте
gg=G
: См. Fix IndentationДля перерасчета части файла к
=
фильтру могут быть применены различные границы (например,==
фиксирует только текущую строку).Чтобы сохранить отступ без изменений при вставке текста, который вы можете сделать
:set paste
перед вставкой текста в буфер, это предотвратит автоматическую вставку в vim текста, который вы только что вставили. После вставки, вы можете вернуться, используя,set :nopaste
когда вы закончите. Смотрите Vimdoc здесь .Если вы часто вставляете что- то, было бы неплохо использовать этот совет в VimWiki и установить ключ для переключения «режим вставки», добавив следующие строки в
.vimrc
:Затем вы можете нажать,
<F2>
чтобы переключить режим вставки. vim покажет слова «PASTE» в строке состояния, когда активен режим вставки.источник
gg=G
для повторного отступа всего файла.gg=G
затем посмотри, какие частиvim
ошиблись.astyle
при сохранении буфера. Смотрите этот вопрос на SO для деталей.Для автоматического повторного отступа всего блока в скобках или скобках поместите курсор на ту же строку, где находится скобка, и попробуйте =%. Чтобы изменить ширину смещения, используйте, например
:set sw=2
.Если это не сработает, как ожидалось, для уменьшения отступа вручную ( outdent ), попробуйте <%и повторите с .(при необходимости). Используйте >%для противоположного.
Так:
будет выглядеть так:
Для конкретного кода, чтобы автоматически переопределить одну или несколько строк, попробуйте:
Чтобы увеличить / уменьшить отступ вручную для одной или нескольких строк, попробуйте:
Вы также можете сделать отступ в визуальном режиме ( v), выбрав текст и нажав =(авто-отступ), <(де-отступ) или >(отступ).
Еще одна хитрость заключается в правильном отступа всего файла с помощью: gg=G.
Если у вас вместо табуляции есть табуляция, используйте:
:retab
которая заменяет все табуляции пробелами (см. Как заменить табуляцию пробелами? ).Для внешних методов вы можете попробовать:
pythonTidy для переформатирования кода Python, например:
Связанный:
источник
Я недавно установил vim-pasta ( https://github.com/sickill/vim-pasta ), и это, кажется, улучшает отступ кода при вставке. В README также есть хорошее обсуждение различных стратегий вставки кода.
источник
В уже существующих ответах уже есть много вопросов. Мне просто нравится добавлять одно отображение, которое я очень часто использую для отступов.
Я видел некоторый vimrc с этим сопоставленным ===.
В любом случае, это отличное отображение, и я использую его почти каждый раз, особенно при вставке кода, скопированного откуда-то еще.
Или, что еще лучше, вставьте это
autocmd
так, чтобы Vim делал отступ перед тем, как записать изменения на диск.источник