Этот ответ суммирует другие ответы и комментарии к этому вопросу и добавляет дополнительную информацию на основе документации Vim и Vim wiki . Для краткости этот ответ не различает команды Vi и Vim.
В приведенных ниже командах «re-indent» означает «строки отступа в соответствии с вашими настройками отступа ». shiftwidth
является основной переменной, которая контролирует отступ.
Общие команды
>> Indent line by shiftwidth spaces
<< De-indent line by shiftwidth spaces
5>> Indent 5 lines
5== Re-indent 5 lines
>% Increase indent of a braced or bracketed block (place cursor on brace first)
=% Reindent a braced or bracketed block (cursor on brace)
<% Decrease indent of a braced or bracketed block (cursor on brace)
]p Paste text, aligning indentation with surroundings
=i{ Re-indent the 'inner block', i.e. the contents of the block
=a{ Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block
>i{ Increase inner block indent
<i{ Decrease inner block indent
Вы можете заменить {
на }
или B
, например, =iB
- допустимая команда отступа блока. Взгляните на «Отступ блока кода» , чтобы найти хороший пример, чтобы опробовать эти команды.
Также помните, что
. Repeat last command
, поэтому команды отступа можно легко и удобно повторять.
Перепечатка полных файлов
Другая распространенная ситуация требует исправления отступа в исходном файле:
gg=G Re-indent entire buffer
Вы можете распространить эту идею на несколько файлов:
" Re-indent all your c source code:
:args *.c
:argdo normal gg=G
:wall
Или несколько буферов:
" Re-indent all open buffers:
:bufdo normal gg=G:wall
В визуальном режиме
Vjj> Visually mark and then indent 3 lines
В режиме вставки
Эти команды применяются к текущей строке:
CTRL-t insert indent at start of line
CTRL-d remove indent at start of line
0 CTRL-d remove all indentation from line
Ex команды
Они полезны, когда вы хотите сделать отступ для определенного диапазона строк, не двигая
курсор.
:< and :> Given a range, apply indentation e.g.
:4,8> indent lines 4 to 8, inclusive
Отступ с использованием маркеров
Другой подход - через маркеры :
ma Mark top of block to indent as marker 'a'
... переместить курсор в конечное местоположение
>'a Indent from marker 'a' to current location
Переменные, которые определяют отступ
Вы можете установить их в файле .vimrc .
set expandtab "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4 "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4 "Indent by 4 spaces when pressing <TAB>
set autoindent "Keep indentation from previous line
set smartindent "Automatically inserts indentation in some cases
set cindent "Like smartindent, but stricter and more customisable
Vim имеет интеллектуальные отступы, основанные на типе файла. Попробуйте добавить это к вашему .vimrc:
if has ("autocmd")
" File type detection. Indent based on filetype. Recommended.
filetype plugin indent on
endif
Ссылки