Время от времени мне приходится работать с кодом, который не соответствует уровню отступа, который я установил для Vim (4 пробела на уровень), обычно после копирования / вставки чего-либо в файл. Я обычно делаю с <<и >>. Проблема в том, что они не переходят на следующий уровень отступа, они просто добавляют или вычитают 4 пробела.
Если у меня есть такой код
if condition:
do this
do that
делать >>на do thatприведет к
if condition:
do this
do that
Я хочу, чтобы это пошло на это
if condition:
do this
do that
Помимо простого соответствия отступа в строке выше, я хочу, чтобы он перешел на следующий уровень отступа, а не добавил 4 пробела.
Это то, что я имею в моем .vimrc относительно отступа
:set tabstop=4 shiftwidth=4 expandtab
>>и <<соответственно добавьте и удалите отступ, который не то, что вы хотите. То, что вы хотите, это «форматирование», что делается с ==.
:nnoremap >> ^i<tab><esc>если вы действительно хотите, чтобы поведение табуляции было>>
==перейдет на уровень строки выше. Хотя это полезно знать, это не сработает во всех интересующих меня случаях. В дополнение к вопросу, для чего я хочу, >>и <<для отступа / отступа до следующего кратного смещения от границы в этом направлении. ,
==использует либо equalexprили equalprgдля переформатирования данных строк.
filetype plugin indent onв вашем.vimrc, типа файла (и плагин) отступа связанных правила будут применяться. Т.е. проверить , что вашеtabstopзначение на самом деле это (set tabstop?будет делать, то же самое для других параметров), при редактировании, и изменить эти значения, добавив строку в «после» файла, что - то вроде: stackoverflow.com/a/159066/5000478