Быстрый отступ нескольких строк в vi - PullRequest
2067 голосов
/ 25 октября 2008

Должно быть тривиально, и это может даже помочь, но я не могу понять, как с ним обращаться. Как быстро сделать отступ в нескольких строках в vi?

Ответы [ 30 ]

2438 голосов
/ 25 октября 2008

Используйте команду > . Для отступа 5 строк, 5 > > . Чтобы отметить блок строк и сделать отступ, V j j > для отступа в 3 строки (только vim). Чтобы сделать отступ для блока фигурных скобок, наведите курсор на одну из фигурных скобок и используйте > % или из любого места внутри блока используйте > i B .

Если вы копируете блоки текста вокруг и вам нужно выровнять отступ блока в его новом местоположении, используйте ] p вместо просто p . Это выравнивает вставленный блок с окружающим текстом.

Кроме того, настройка shiftwidth позволяет вам контролировать количество пробелов для отступа.

925 голосов
/ 06 марта 2011

Этот ответ суммирует другие ответы и комментарии к этому вопросу и добавляет дополнительную информацию на основе документации 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

Ссылки

121 голосов
/ 21 января 2009

Большой выбор будет:

gg=G

Это действительно быстро, и все становится с отступом; -)

107 голосов
/ 25 октября 2008

Также попробуйте это для C-отступа отступ, сделайте :help = для получения дополнительной информации:

={

Это автоматически сделает отступ для текущего блока кода, в котором вы находитесь.

Или просто:

==

для автоматического отступа текущей строки.

76 голосов
/ 25 октября 2008

нажатия клавиш для более визуальных людей:

  1. Войдите в командный режим:
    Побег

  2. Переместитесь в начало области, чтобы сделать отступ:
    ч J к л & uarr; * * & 1 021 Дарр; * +1022 * & LARR; & rarr;

  3. Начать блок:
    v

  4. Переместитесь в конец области, чтобы сделать отступ:
    ч * 1 038 ** 1 039 * J * 1 040 ** 1 041 * к * ** 1043 тысяча сорок две * л & uarr; * ** тысяча сорок-шесть * & тысячу сорок-семь Дарр; & LARR; & rarr;

  5. (Необязательно) Введите желаемое количество уровней отступов
    0..9

  6. Выполнить отступ для блока:
    >

64 голосов
/ 25 октября 2008

В дополнение к ответу, который уже дан и принят, также можно поместить маркер и затем сделать отступ от всего курсора до маркера. Таким образом, введите ma там, где вы хотите, чтобы верхняя часть вашего блока с отступом, наведите курсор вниз, насколько вам нужно, и затем введите >'a (обратите внимание, что «a» может быть заменено на любое допустимое имя маркера). Иногда это проще, чем 5>> или vjjj>.

62 голосов
/ 18 апреля 2014

Мастер всех команд
gg=G

Это отступ для всего файла!

И ниже приведены некоторые простые и элегантные команды, используемые для быстрого отступа строк в Vim или gVim.

Для отступа текущей строки
==

Чтобы сделать отступ для всех строк под текущей строкой

=G

Для отступа n строк ниже текущей строки

n==

Например, чтобы сделать отступ на 4 строки ниже текущей строки

4==

Чтобы сделать отступ для блока кода, перейдите к одной из фигурных скобок и используйте команду

=%

Это самые простые, но мощные команды для отступа в несколько строк.

29 голосов
/ 05 ноября 2013

Перейти к началу текста

  • нажмите v для визуального режима.
  • используйте вверх / вниз для выделения текста.
  • нажмите = , чтобы сделать отступ для всех выделенных строк.
27 голосов
/ 25 октября 2008

Наряду с предлагаемыми решениями, я люблю делать абзацы с >}

25 голосов
/ 15 февраля 2009

Когда вы выбираете блок и используете > для отступа, он отступает, затем возвращается в нормальный режим. У меня есть это в моем файле .vimrc:

vnoremap < <gv

vnoremap > >gv

Позволяет делать отступы столько раз, сколько вы хотите.

...