По-перше, не використовуйте Tabключ у Vim для ручного відступу. Vim має пару команд у режимі вставки для ручного збільшення або зменшення кількості відступу. Ці команди є Ctrl-Tі Ctrl-D. Ці команди дотримуватися значення tabstop
, shiftwidth
і expandtab
, і підтримувати правильну суміш просторів і вкладок (максимальна кількість вкладок з наступним будь-яких необхідних числом пробілів).
По-друге, ці ручні відступи не потрібно використовувати дуже сильно, якщо ви використовуєте автоматичні відступи.
Якщо Ctrl-Tзамість цього Tabвас турбує, ви можете перезавантажити:
:imap <Tab> ^T
Ви також Shift-Tabможете зробити Ctrl-Dповторний перезапис, щоб зробити деіндент:
:imap <S-Tab> ^D
Тут ^ T і ^ D є буквальними контрольними символами, які можна вставити як Ctrl-VCtrl-T.
Маючи таке зіставлення на місці, ви все одно можете вводити буквальний вкладку в буфер, використовуючи Ctrl-VTab. Зауважте, що якщо ви це зробите, навіть якщо :set expandtab
він увімкнено, ви отримаєте нерозширений символ вкладки.
Аналогічний ефект з <Tab>
картою досягається за допомогою :set smarttab
, що також змушує задню область в передній частині лінії поводитись розумно.
У smarttab
режимі, коли Tabвін використовується не на початку рядка, він не має особливого значення. Це відрізняється від мого вище відображення Tabдо Ctrl-T, так як Ctrl-Tвикористовується в будь-якій точці лінії (в режимі вставки) збільшить відступ цієї лінії.
Іншими корисними відображеннями можуть бути:
:map <Tab> >
:map <S-Tab> <
Тепер ми можемо робити такі речі, як виділення деяких рядків, і натискаємо, Tabщоб відступати їх. Або Tabдвічі натисніть на рядок (у командному режимі), щоб збільшити її відступ.
Якщо ви використовуєте правильні команди управління відступи, то все контролюється трьома параметрами: shiftwidth
, tabstop
і expandtab
.
shiftwidth
Параметр контролює розмір відступу; якщо ви хочете чотири пробіли, використовуйте :set shiftwidth=4
або абревіатуру :set sw=4
.
Якщо це робиться лише тоді, відступ буде створено за допомогою суміші пробілів і вкладок, оскільки noexpandtab
це за замовчуванням. Використовуйте :set expandtab
. Це призводить до того, що символи вкладок, які ви вводите в буфер, розширюються на пробіли, а для відступу, керованого Vim, використовувати лише пробіли.
Коли expandtab
він увімкнено, і якщо ви керуєте відступом за допомогою усіх належних механізмів Vim, значення значення tabstop
стає неактуальним. Він контролює, як відображаються вкладки, якщо вони трапляються у файлі. Якщо у вас є, set tabstop=8 expandtab
а потім прокрадаєте тверду вкладку у файл, використовуючи Ctrl-VTab, вона створить вирівнювання до наступного положення вкладки на основі 8-стовпців, як зазвичай.