Как сдвинуть отступ строки к определенному значению?

11

Много раз я сталкивался с ситуацией, когда строка не имеет правильного отступа. Эфир через вставку, плохой / не предпочтительный плагин отступа или чаще всего лишние пробелы, смещающие значение отступа. Я обычно исправить это, <<или >>линия несколько раз , чтобы зафиксировать его. В случае лишних пробелов я сделаю 100<<тогда a >>для каждого уровня отступа, который я действительно хочу.

Вопрос в том, как |движение, которое позволяет установить столбец по номеру, 10|отправляет курсор в 10-й столбец. Как я могу указать уровень отступа?

Пример (это не работает) с shiftwidth=4 expandtab:

The quick (indent level 0)
••••Brown Fox (indent level 1)
••••••••••Jumped over the lazy dog (indent level 2 with two extra spaces)

В этом случае мне нужно посчитать уровень отступа последней строки (2) и добавить один для лишних пробелов, затем набрать и 3<<подсчитать уровень отступа того, что я затем 1>>(или использую autoindentи ==команду).

Я прошу что-то вроде 1==заставить отступ для отступа уровня 1. Или в некоторых случаях 0==для удаления отступа все вместе.

Я понимаю, что приведенный выше пример выполняет автоматическое выравнивание по 1 или 0 строкам (соответственно) и поэтому не выполняет то, что мне нравится, но надеялся, что это поможет лучше проиллюстрировать вопрос.

Sukima
источник

Ответы:

18

Вы можете использовать :leftкоманду:

:[range]le[ft] [indent]
Левые выравнивают линии в [range]. Устанавливает отступ в строках с [indent]( по умолчанию 0). {Vi не}

Обратите внимание , что :leftустанавливает отступ в п пространств, и не знает , shiftwidthили tabstop, так что использование :left 8будет использовать 8 пробелов.

Если вы хотите установить уровень отступа, вы можете легко определить команду:

command! -nargs=1 Left execute 'left ' . &sw * <args>

Использование :Left 2установит отступ в 8 пробелов.

Чтобы сопоставить это <Leader>=, вы можете использовать:

noremap <expr> <Leader>= ':left ' . str2nr(nr2char(getchar())) * &sw . '<CR>'

Я не уверен, что это лучший способ, но это единственный способ, которым я могу управлять ... \=2сделает отступ текущей строки до 8 пробелов и 5\=3сделает следующие 5 строк до 12 пробелов.


Связанная подсказка, которая также решает вашу проблему - это настройка shiftroundпараметра. От:help 'shiftround'

Круглый отступ к кратному 'shiftwidth'. Относится к >и < команде. CTRL-T и CTRL-D в режиме Вставки всегда круглый отступа на кратное 'shiftwidth'(это Vi - совместимый).

В вашем примере первый <<будет «округлять» до 8 пробелов. Таким образом, ваша проблема (с помощью 3<<и затем >>) решена. И, как говорится на странице справки, вы также можете использовать <C-d>из режима вставки.

Мартин Турной
источник
Потрясающие! Эти решения работают идеально.
Sukima