Отступ для следующего уровня отступа с >>

9

Время от времени мне приходится работать с кодом, который не соответствует уровню отступа, который я установил для 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
Думитру
источник
Если у вас также есть filetype plugin indent onв вашем .vimrc, типа файла (и плагин) отступа связанных правила будут применяться. Т.е. проверить , что ваше tabstopзначение на самом деле это ( set tabstop?будет делать, то же самое для других параметров), при редактировании, и изменить эти значения, добавив строку в «после» файла, что - то вроде: stackoverflow.com/a/159066/5000478
VanLaser
3
>>и <<соответственно добавьте и удалите отступ, который не то, что вы хотите. То, что вы хотите, это «форматирование», что делается с ==.
Ромен
можно также отобразить, :nnoremap >> ^i<tab><esc>если вы действительно хотите, чтобы поведение табуляции было>>
Wolfie
@romainl ==перейдет на уровень строки выше. Хотя это полезно знать, это не сработает во всех интересующих меня случаях. В дополнение к вопросу, для чего я хочу, >>и <<для отступа / отступа до следующего кратного смещения от границы в этом направлении. ,
Думитру
2
Нет, ==использует либо equalexprили equalprgдля переформатирования данных строк.
Ромен

Ответы:

12

При использовании одной из команд {count}>>, {count}<<, >{motion}или <{motion}, на некоторых линиях , которые уже отступление, и вы хотите их новый уровень отступа быть кратен вашей 'shiftwidth'стоимость опциона, вы можете включить 'shiftround'опцию, и добавьте эту строку в файле vimrc:

set shiftround
user9433424
источник
2

Если вы всегда хотите >>сделать отступ к следующей остановке и <<удалить к последней остановке, вы можете привязать их следующим образом:

:nnoremap << ^i<BS><esc>
:nnoremap >> ^i<tab><esc>

Это переместит курсор, но вы, вероятно, могли бы сделать некоторую хитрость, чтобы переместить его назад. ^не оставляет m'отметки, но вы можете оставить ее внутри привязки.

Wolfie
источник