Як перенести відступ рядка на конкретне значення?


11

Багато разів я натрапляю на ситуацію, коли рядок не відведений належним чином. Ефір через пасту, поганий / не бажаний плагін відступу або найчастіше додаткові пробіли, що компенсують значення відступу. Я зазвичай виправляю це за допомогою рядка <<чи >>рядка кілька разів, щоб виправити це. Що стосується додаткових пробілів, я буду робити 100<<то >>для кожного рівня відступу, якого я насправді хочу.

Питання полягає в тому, як |рух, який дозволяє встановлювати стовпчик за номером, 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 рядків (відповідно), і тому не робить те, що хотілося б, але сподівався, що це допоможе проілюструвати питання краще.

Відповіді:


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 у режимі Insert завжди округляють відступ до кратного 'shiftwidth'(це сумісно з Vi).

У вашому прикладі перший <<буде "круглим" на 8 пробілів. Тож ваша проблема (використовуючи 3<<та потім >>) вирішується. Як відомо на сторінці довідки, ви також можете скористатися <C-d>в режимі вставки.


Дивовижно! Ці рішення працюють ідеально.
Сукіма
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.