Быстрый отступ для нескольких строк в vi

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


person Allain Lalonde    schedule 25.10.2008    source источник


Ответы (33)


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

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

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

person Greg Hewgill    schedule 25.10.2008
comment
@akdom: интересно; это ('V') всегда было ключом, который я использовал для карт, потому что он не имел другого применения (v и g были двумя другими). - person Jonathan Leffler; 25.10.2008
comment
Я использую ›i} (внутренний блок отступа {}). Работает в vim. Не уверен, что это работает в vi. - person R. Martinho Fernandes; 15.02.2009
comment
@Greg: подумайте о том, чтобы добавить к своему ответу, что с помощью set shiftwidth = '' вы можете определить размер отступа (по умолчанию 8) при использовании ‹или› - person RomanM; 26.02.2009
comment
Я использовал Ctrl-v для отступа, переходя к началу строки, но это явно намного лучше. - person gravitation; 20.09.2009
comment
@Martinho: текстовые объекты, такие как i}, специфичны для Vim. Опять же, визуальный режим тоже. - person jamessan; 11.11.2009
comment
Моя проблема (в gVim) в том, что команда ›делает отступы намного больше, чем 2 пробела (мне нужны только два пробела, но› отступ примерно равен 5 пробелам) - person Kamran Bigdely; 01.03.2011
comment
@Kamran: см. Настройку shiftwidth, чтобы узнать, как это изменить. - person Greg Hewgill; 01.03.2011
comment
Вы также можете использовать метки в обычном режиме для разграничения блока, как в 'a'b ›, или шаблоны в командной строке, как в: / begin /, / end /› - person Pif; 17.01.2012
comment
@MattStevens: Подробное обсуждение этого явления можно найти здесь: meta.stackexchange.com/questions/9731/ - person Greg Hewgill; 28.02.2013
comment
Я часто делаю отступ визуальных блоков несколько раз подряд, например, исправляю некоторые теги, вставленные в файл XML. Вместо того, чтобы каждый раз повторно выбирать блок в визуальном режиме, можно использовать gv для повторного использования последнего визуального блока. Ссылка superuser.com / questions / 220666 / - person David Mann; 09.05.2014
comment
Если вы потеряете свой выбор, используйте gv для повторного выбора - person Will Hardwick-Smith; 21.12.2015
comment
Я начал использовать плагин vim-pasta для вставки с учетом отступов. Работает как шарм! - person wilson; 16.09.2016
comment
Чтобы сделать отступ в 5 строк, 5>> Я только что попробовал. Он делает отступ для пятой строки, а не для 5 различных строк, начиная с курсора. - person falsePockets; 08.04.2018
comment
@falsePockets: Какую версию vim вы используете? Команда 5>> делает для меня отступы на 5 строк. Убедитесь, что вы не нажимаете Enter после 5. - person Greg Hewgill; 08.04.2018
comment
Пользуюсь версией 8.0. Проблема заключалась в том, что я пытался ввести его в командном режиме (esc :5>>), а не без режима. (esc 5>>) - person falsePockets; 09.04.2018
comment
На Mac В визуальном режиме обязательно используйте стрелки между клавишами M и ?. - person Dmitry; 18.03.2019

Этот ответ суммирует другие ответы и комментарии на этот вопрос, а также добавляет дополнительную информацию на основе документации Vim и Vim wiki. Для краткости этот ответ не делает различий между командами, специфичными для Vi и Vim.

В приведенных ниже командах «повторный отступ» означает «отступ строк в соответствии с вашими настройками отступа». 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 three 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

Ссылки

person ire_and_curses    schedule 06.03.2011
comment
И этот, и предыдущий ответ были великолепны. Но я поставил +1, потому что это напомнило мне оператор «точка», который повторяет последнюю команду. Это чрезвычайно полезно, когда нужно сделать отступ для всего блока на несколько сдвиговых интервалов (или отступов) без необходимости продолжать нажимать >}. Спасибо большое - person Amit; 10.08.2011
comment
5 ›› Отступ на 5 строк. Эта команда делает отступ для пятой строки, а не для 5 строк. Может быть, это из-за моих настроек VIM или ваша формулировка неверна? - person Wipqozn; 24.08.2011
comment
@Wipqozn - Странно. Он определенно выделяет для меня следующие пять строк, проверенных на Vim 7.2.330. - person ire_and_curses; 24.08.2011
comment
›42gg Отступ от того места, где вы находитесь, до строки 42. - person Steve; 07.01.2012
comment
Отличное резюме! Также обратите внимание, что отступ внутри блока и отступ всего блока (‹i {› a {и т. Д.) Также работают со скобками: ›a (‹ i] и т. Д. (И пока я на нем, в дополнение к ‹› s, они также работают с d, c, y и т. д.) - person aqn; 06.03.2013
comment
Вы можете подумать о том, чтобы указать, что команда повтора - это точка / точка, потому что в зависимости от шрифта видение человека (которое может ухудшиться, если он устает) может выглядеть как-то иначе. Когда я впервые увидел это в вашем ответе, я сначала был сбит с толку, так как мог поклясться, что это была единственная цитата. Просто мысль, о которой стоит задуматься, а может быть, и нет. - person Pryftan; 04.03.2020

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

gg=G

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

person Johan    schedule 20.01.2009
comment
У меня есть XML-файл, и я включил подсветку синтаксиса. При вводе gg=G каждая строка просто начинается с позиции 1. Все пробелы удалены. Есть ли что-нибудь еще, относящееся к XML? - person asgs; 29.01.2014
comment
Я думаю, set cindent должен быть в vimrc или должен запустить :set cindent перед выполнением этой команды - person Amanuel Nega; 19.05.2015
comment
Я думаю, что сначала нужно установить cindent. и @asgs, я думаю, это работает только для языков программирования cstyle. - person Amanuel Nega; 19.05.2015

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

={

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

Или просто:

==

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

person svec    schedule 25.10.2008
comment
у меня не работает, просто перемещает мой курсор в строку над открывающей скобкой «текущего блока кода, в котором я нахожусь». - person underscore_d; 17.10.2015

Ключевые прессы для более визуальных людей:

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

  2. Переместитесь к началу области для создания отступа:
    h j k l

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

  4. Переместитесь к концу области, чтобы сделать отступ:
    h j k l

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

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

person Kent Fredric    schedule 25.10.2008
comment
Это здорово, но в нем используются пробелы, а не табуляции. Есть ли способ исправить это? - person Shane Reustle; 11.03.2011
comment
Если вместо табуляции используются пробелы, то это, вероятно, связано с тем, что у вас установлен отступ для использования пробелов. знак равно - person Kent Fredric; 16.03.2011
comment
Когда опция «expandtab» выключена (это значение по умолчанию) Vim использует ‹Tab› как можно больше для создания отступа. ( :помощь :> ) - person Kent Fredric; 16.03.2011
comment
Единственная настройка vim, связанная с табуляцией / пространством, которую я изменил: set tabstop = 3. На самом деле он вставляет это каждый раз, когда я использую ››: ‹tab› ‹space› ‹space›. То же самое с отступом блока. Любые идеи? - person Shane Reustle; 02.12.2012
comment
Три параметра, которые вы хотите рассмотреть для пробелов и вкладок: 1. tabstop 2. shiftwidth 3. expandtab. Вероятно, у вас shiftwidth = 5 noexpandtab, поэтому вкладка составляет 3 пробела, а уровень отступа - 5 пробелов, поэтому он составляет 5 с 1 табуляцией и 2 пробелами. - person Kent Fredric; 02.12.2012
comment
по сути, он составляет расстояние Shiftwidth, используя вместе табуляции и пробелы, где табуляция - это количество пробелов в 1 табуляции. Вот более наглядное руководство, которое может объяснить: gist.github.com/4189922 - person Kent Fredric; 02.12.2012
comment
как правило, я вижу, что люди устанавливают для shiftwidth и tabstop одно и то же значение, так как это менее запутанно. sw = 8 ts = 8 noet ›tab вставляет табуляцию шириной 8 пробелов. sw = 8 ts = 8 et ›табуляция вставляет 8 символов. - person Kent Fredric; 02.12.2012

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

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

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

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

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

=G

Чтобы сделать отступ на n строк ниже текущей строки

n==

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

4==

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

=%

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

person Sagar Jain    schedule 18.04.2014
comment
Это только в vim, а не в vi. - person rojomoke; 30.07.2014
comment
Не на моих компьютерах с Solaris или AIX. Клавиша равенства всегда была одним из моих стандартных специальных назначений макросов. Вы уверены, что смотрите не на vim, связанный с vi? - person rojomoke; 31.07.2014
comment
Я чертовски уверен !! Увидев ваш комментарий, я просто открыл vi, попробовал все команды в своем ответе и получил ожидаемый результат. - person Sagar Jain; 31.07.2014
comment
Да, в Linux vi почти всегда является ссылкой на vim. Попробуйте выполнить команду: ve внутри vi. - person rojomoke; 01.08.2014
comment
Мне нравятся такие ответы: ясные, точные и сжатые. У меня работал в Debian Jessie. Спасибо, @SJain - person digitai; 28.12.2015
comment
Поскольку я использую vim, а не vi, довольно взволнован, этот ответ здесь. Спасибо. - person Dan Nissenbaum; 22.08.2017

Помимо уже предоставленного и принятого ответа, это также возможно разместить маркер, а затем сделать отступ от текущего курсора до маркера.

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

person Daniel Spiewak    schedule 25.10.2008
comment
Это действительно полезно. Я собираюсь посмотреть, что все работает с этим. Я знаю д'а и тебя, что еще? - person user606723; 17.03.2011
comment
Это очень полезно, поскольку позволяет избежать подсчета количества строк, на которые вы хотите сделать отступ. - person ziggy; 25.08.2014

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

  • нажмите v для визуального режима.
  • используйте стрелку вверх / вниз для выделения текста.
  • нажмите =, чтобы сделать отступ для всех выделенных вами строк.
person Michael Durrant    schedule 04.11.2013

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

vnoremap < <gv

vnoremap > >gv

Это позволяет делать отступ для выделения сколько угодно раз.

person Michael Ekoka    schedule 15.02.2009
comment
Чтобы сделать несколько отступов для выделения, вы можете просто нажать. чтобы повторить предыдущую команду. - person sundar - Remember Monica; 01.09.2009
comment
Проблема с. в этой ситуации приходится двигать пальцами. С решением @mike (то же самое, что я использую) вы уже держите пальцы на клавише отступа и можете просто бить его, чтобы продолжать отступ, а не переключаться и делать что-то еще. Использование периода занимает больше времени, потому что вам нужно двигать руками, и требует больше размышлений, потому что это вторая, другая операция. - person masukomi; 07.12.2013

Помимо предлагаемых решений, мне нравится делать что-то по абзацу за раз с >}

person Paul Tomblin    schedule 25.10.2008
comment
Ага, и вот почему одна из моих больших неприятностей - пробелы в пустой строке: они портят представление vim об абзаце. - person aqn; 06.03.2013

Предположим, вы используете 2 пробела для отступа в коде. Тип:

:set shiftwidth=2
  • Наберите v (чтобы войти в режим редактирования визуального блока)
  • Переместите курсор с помощью клавиш со стрелками (или с помощью h / j / k / l), чтобы выделить строки вы хотите сделать отступ или удалить его.

Потом:

  • Введите > для однократного отступа (2 пробела).
  • Введите 2 >, чтобы сделать двойной отступ (4 пробела).
  • Введите 3 > для трехкратного отступа (6 пробелов).
  • ...
  • Введите , чтобы удалить отступ один раз (2 пробела).
  • Введите 2 , чтобы дважды убрать выделение (4 пробела).
  • Введите 3 , чтобы удалить трижды (6 пробелов).
  • ...

Вы уловили идею.

(Пустые строки не будут иметь отступа, что, на мой взгляд, неплохо.)


Я нашел ответ в документации (g) vim для отступов блоков:

:help visual-block
/indent

Если вы хотите подсчитать команду, сделайте это непосредственно перед вводом символа оператора: "v {move-around} 3>" (переместите строки на 3 отступа вправо).

person John Sonderson    schedule 31.01.2015

Прелесть пользовательского интерфейса Vim в его согласованности. Команды редактирования состоят из команды и перемещения курсора. Курсор перемещается всегда одинаково:

  • H к верху экрана, L к низу, M к середине
  • n G для перехода к строке n, G только до конца файла, g g в начало
  • n для перехода к следующему поисковому совпадению, N к предыдущему
  • } до конца абзаца
  • % до следующей подходящей скобки, либо круглых скобок, либо типа тега
  • перейти к следующей строке
  • ' x, чтобы отметить x, где x - буква или другое '.
  • многие другие, включая w и W для слова, $ или 0 для концовки линии и т. д., которые здесь не применяются, потому что не являются движением линии.

Итак, чтобы использовать vim, вам нужно научиться перемещать курсор и запомнить набор команд, таких как, например, > для отступа (и для« outdent » ).

Таким образом, для отступа строк от позиции курсора до верха экрана вы делаете > H, > G сделать отступ до конца файла.

Если вместо ввода > H вы наберете d H, то вы удаляете тот же блок строк, c H для его замены и т. д.

Некоторые движения курсора лучше подходят для определенных команд. В частности, команда % удобна для создания отступа для всего блока HTML или XML. Если синтаксис файла выделен (:syn on), то установка курсора в тексте тега (например, в «i» в ‹div> и ввод > % приведет к отступ до закрывающего тега ‹/div>.

Вот как работает Vim: нужно помнить только движения курсора и команды, а также то, как их смешивать. Итак, я отвечу на этот вопрос: «перейдите к одному концу блока строк, в котором вы хотите сделать отступ, а затем введите команду > и переместитесь к другому концу блока», если отступ интерпретируется как сдвиг строк, =, если отступ интерпретируется как приличная печать.

person Juan Lanus    schedule 18.09.2012
comment
Я бы сказал, что vi / vim в основном согласован. Например, D ведет себя не так, как S и Y! :) - person aqn; 06.03.2013

Вы можете использовать команду norm i, чтобы вставить заданный текст в начало строки. Чтобы вставить 10 пробелов перед строками 2-10:

:2,10norm 10i 

Помните, что в конце команды должен быть пробел - это будет символ, который мы хотим вставить. Мы также можем сделать отступ для строки с любым другим текстом, например, чтобы сделать отступ для каждой строки в файле пятью символами подчеркивания:

:%norm 5i_

Или что-то еще более необычное:

:%norm 2i[ ]

Более практический пример - это комментирование кода Bash / Python / etc с помощью символа #:

:1,20norm i#

Чтобы изменить отступ, используйте x вместо i. Например, чтобы удалить первые 5 символов из каждой строки:

:%norm 5x
person Nykakin    schedule 21.08.2015
comment
это начинается с левой стороны файла ... не с текущей позиции блока - person Eliethesaiyan; 13.06.2016

Сделай это:

$vi .vimrc

И добавьте эту строку:

autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent

Это только для файла cpp. Вы можете сделать это для другого типа файла, также просто изменив тип файла ...

person pankaj ukumar    schedule 11.11.2009

Быстрый способ сделать это с помощью VISUAL MODE использует тот же процесс, что и комментирование блока кода.

Это полезно, если вы предпочитаете не изменять свой shiftwidth или использовать какие-либо set директивы, и достаточно гибко для работы с TABS, SPACES или любым другим символом.

  1. Поместите курсор в начало блока
  2. v переключиться на -- VISUAL MODE --
  3. Выделите текст для отступа
  4. Введите :, чтобы переключиться на подсказку.
  5. Замена тремя ведущими пробелами:

    :'<,'>s/^/ /g

  6. Или заменив ведущие вкладки:

    :'<,'>s/^/\t/g

  7. Краткое объяснение:

    '<,'> - В пределах визуально выбранного диапазона

    s/^/ /g - Вставить 3 пробела в начале каждой строки во всем диапазоне

    (or)

    s/^/\t/g - вставлять Tab в начало каждой строки во всем диапазоне

person Eric Kigathi    schedule 04.01.2012

>} или >{ отступ от текущей строки до следующего абзаца

<} или <{ то же снятие отступа

person jash    schedule 17.02.2012

Мне нравится отмечать текст для отступа:

  1. перейдите к началу строки текста, затем введите m a (a - это метка из 'm'ark: это может быть любая буква)
  2. перейдите к конечной строке текста и введите m z (опять же, z может быть любой буквой)
  3. : 'a,' z> или : 'a,' z ‹ будет с отступом или с отступом (это слово?)
  4. Вуаля! Текст перемещен (пустые строки остаются пустыми без пробелов)

PS: вы можете использовать технику : 'a,' z, чтобы отметить диапазон для любой операции (d, y, s /// и т. Д.), Где вы можете использовать строки, числа или < kbd>%.

person SteveO    schedule 10.11.2010

:line_num_start,line_num_end>

Например,

14,21> shifts line number 14 to 21 to one tab

Увеличьте символ '>', чтобы увидеть больше вкладок.

Например,

14,21>>> for three tabs
person attaboyabhipro    schedule 15.07.2014
comment
Очевидно, существует множество способов решить эту проблему, но это самый простой в реализации, поскольку номера строк отображаются в vim по умолчанию и не требуют математических вычислений. - person HoldOffHunger; 05.12.2017
comment
@HoldOffHunger Номера строк по умолчанию не отображаются. Вам нужно использовать :set number для переключения номеров строк (они выключены по умолчанию) или поместить set number в ваш vimrc. - person DryLabRebel; 04.03.2020

Для меня решение MacVim (Visual) заключалось в том, чтобы выбрать мышью и нажать «>», но после помещения следующих строк в «~ / .vimrc», поскольку мне нравятся пробелы вместо вкладок:

set expandtab
set tabstop=2
set shiftwidth=2

Также полезно иметь возможность вызывать MacVim из командной строки (Terminal.app), так как у меня есть следующий вспомогательный каталог «~ / bin», в который я помещаю сценарий с именем «macvim»:

#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@

И, конечно же, в "~ / .bashrc":

export PATH=$PATH:$HOME/bin

MacPorts сильно ошибается с "~ / .profile", поэтому переменная среды PATH может быть довольно длинная.

person mda    schedule 04.06.2012

:help left

В ex mode вы можете использовать :left или :le для выравнивания строк на указанную величину. В частности, :left будет выравнивать строки в [диапазоне] по левому краю. Он устанавливает отступ в строках на [отступ] (по умолчанию 0).

:%le3, :%le 3, :%left3 или :%left 3 выравнивают весь файл, заполняя его тремя пробелами.

:5,7 le 3 выровняет строки с 5 по 7, добавив в них три пробела.

:le без значения или :le 0 выровняется по левому краю с заполнением 0.

Это работает в Vim и gVim.

person zundarz    schedule 10.09.2015
comment
Замечательно, именно то, что я искал (способ вставить определенное количество пробелов - 4 пробела для кода уценки - чтобы переопределить мой обычный отступ). В моем случае я хотел сделать отступ для определенного количества строк в визуальном режиме, поэтому shift-v для выделения строк, затем :'<,'>le4 для вставки пробелов. Спасибо! - person Subfuzion; 12.08.2017

5== будет отступать на пять строк от текущей позиции курсора.

Таким образом, вы можете ввести любое число перед ==. Он изменит количество строк. Это в командном режиме.

gg=G сделает отступ для всего файла сверху вниз.

person rohitkadam19    schedule 07.05.2013

Я не нашел в комментариях метода, который использую, поэтому поделюсь им (думаю, только Vim):

  1. Esc для входа в командный режим
  2. Перейти к первому символу последней строки, для которой нужно сделать отступ
  3. Ctrl + V для начала выбора блока
  4. Перейти к первому символу первой строки, для которой нужно сделать отступ
  5. Shift + I для входа в специальный режим вставки
  6. Введите столько пробелов / табуляции, сколько вам нужно для отступа (например, два
  7. Нажмите Esc, и во всех строках появятся пробелы.

Это полезно, если вы не хотите изменять настройки отступа / табуляции в vimrc или запоминать их для изменения во время редактирования.

Чтобы удалить, я использую тот же блок Ctrl + V, чтобы выделить пробелы и удалить его с помощью D.

person NickSoft    schedule 05.11.2013

Не знаю, почему так сложно найти такой простой ответ ...

Мне самому пришлось немало потрудиться, чтобы узнать это. Все очень просто:

  • Отредактируйте ваш .vimrc файл в домашнем каталоге.
  • Добавить эту строку

    set cindent
    

    в вашем файле, где вы хотите сделать правильный отступ.

  • В нормальном / командном режиме типа

    10==   (This will indent 10 lines from the current cursor location)
    gg=G   (Complete file will be properly indented)
    
person Kamlesh Karwande    schedule 06.02.2014

Я часто использую Python, и мне часто нужно сдвигать блоки более чем на один отступ. Вы можете сделать это, используя любой из методов выбора блока, а затем просто введите количество отступов, на которые вы хотите перейти, прямо перед >

Например, V5j3> сделает отступ в пять строк три раза, что составляет 12 пробелов, если вы используете четыре пробела для отступов.

person John La Rooy    schedule 02.07.2013

Чтобы сделать отступ для каждой строки в типе файла, нажмите Esc, а затем G = gg.

person kapil    schedule 01.03.2015

Я использую визуальное выделение в блочном режиме:

  • Подойдите к передней части блока, чтобы переместиться (вверху или внизу).
  • Нажмите Ctrl + V, чтобы войти в режим визуального блока.
  • Перейдите, чтобы выбрать столбец перед строками.
  • Нажмите I (Shift + I), чтобы войти в режим вставки.
  • Введите несколько пробелов.
  • Нажмите Esc. Все линии сместятся.

Это не однозадачник. Оно работает:

  • В середине строк.
  • Вставить любую строку во все строки.
  • Чтобы изменить столбец (используйте c вместо I).
  • копировать, удалять, заменять и т. д.
person sqqqrly    schedule 28.09.2017
comment
Это громоздко, но это правильный путь , если вы выполняете форматирование вне основного VIM (например, используя vim-prettier вместо механизма отступов по умолчанию). В противном случае использование > существенно изменит форматирование, выполненное Prettier. - person oligofren; 27.03.2018
comment
Забавно, но я нахожу это совсем не громоздким. Это не однозадачник! Изучение этого метода имеет множество применений, помимо создания отступов. - person sqqqrly; 15.06.2018
comment
Я считаю, что это лучше, чем принятый ответ, поскольку я могу видеть, что происходит, строки, которые я выбираю, и действия, которые я выполняю, а не просто набирать какое-то заклинание vim. - person user4052054; 17.08.2018

  • Для блока кода {}: = + %

  • Для выделенной строки: Shift + v выберите, используя клавиши со стрелками вверх / вниз, а затем нажмите =.

  • Для всего файла: gg + = + G

Примечание. 'gg' означает переход к строке 1, '=' - команда отступа, а 'G' перемещает курсор в конец файла.

person Kulamani    schedule 15.11.2018

Как сделать отступ выделенного кода в vi сразу несколькими пробелами:

Вариант 1. Отступите в блоке кода в vi до трех пробелов в режиме визуального блока:

  1. Выберите блок кода, для которого нужно сделать отступ. Сделайте это, используя Ctrl + V в обычном режиме и выделив текст со стрелкой вниз. Пока он выбран, введите :, чтобы дать команду блоку выделенного текста.

  2. В командной строке появится следующее: :'<,'>

  3. Чтобы установить отступ в три пробела, введите le 3 и нажмите клавишу ВВОД. Вот что появляется: :'<,'>le 3

  4. Выделенный текст сразу становится отступом до трех пробелов.

Вариант 2. Отступите в блоке кода в vi до трех пробелов в режиме Visual Line:

  1. Откройте ваш файл в vi.
  2. Наведите курсор на код
  3. Перейдите в обычный режим и нажмите следующие клавиши:

    Vjjjj:le 3
    

    Интерпретация того, что вы сделали:

    V означает начать выделение текста.

    jjjj стрелки вниз на четыре строки, выделяя четыре строки.

    : сообщает vi, что вы вводите инструкцию для выделенного текста.

    le 3 означает отступ выделенного текста в три строки.

    Выбранный код сразу увеличивается или уменьшается с отступом до трех пробелов.

Вариант 3: используйте режим визуального блока и специальный режим вставки для увеличения отступа:

  1. Откройте ваш файл в vi.
  2. Наведите курсор на код
  3. В нормальном режиме нажмите следующие клавиши:

    Ctrl + V

    jjjj
    

    (нажмите пробел пять раз)

    Esc Shift + i

    Весь выделенный текст имеет отступ на пять дополнительных пробелов.

person Eric Leschinski    schedule 23.12.2013

  1. Нажмите SHIFT + v, чтобы войти в режим VISUAL LINE.
  2. Выделите текст, для которого хотите сделать отступ, используя клавиши курсора или клавиши j и k.
  3. Чтобы сделать отступ вправо, нажмите SHIFT + точка (символ ›). Для отступа влево нажмите SHIFT + запятая (символ ‹).

Источник: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html

person ABN    schedule 28.02.2020

Чтобы сделать четыре отступа для всего файла:

esc 4G=G
person Michael    schedule 19.12.2014
comment
...Какие? 'отступ на 4 пробела'? Нет, это переходит к строке 4, а затем делает отступ оттуда до конца файла, используя текущий выбранный режим отступа (если есть). - person underscore_d; 17.10.2015

Для тех, кто любит современные редакторы делать отступ для выделенной строки с помощью <TAB> и <S-TAB>:

vnoremap <TAB> >gv
vnoremap <S-TAB> <gv

Использование: нажмите V для линейного визуального режима, выберите нужные строки, затем нажмите Tab (может быть со сдвигом), затем отступы применяются по вашему желанию, и выделение остается ...

person Mamrezo    schedule 22.07.2020

Для Mac

  1. Откройте файл с помощью vim

    vim deploy1.yml

  2. Выделите строки с помощью Shift + 'v', а затем с помощью клавиши 'вверх' или 'вниз'

    введите описание изображения здесь

  3. Отступите выделенные строки с помощью Shift + '›' или Shift + '‹'

    введите описание изображения здесь

person KayV    schedule 06.10.2020

Предположим, | представляет позицию курсора в Vim. Если текст для отступа заключен в блок кода, например:

int main() {
line1
line2|
line3
}

вы можете сделать >i{, что означает «отступ (>) внутри (i) блока ({)» и получить:

int main() {
    line1
    line2|
    line3
}

Теперь предположим, что строки смежные, но находятся вне блока, например:

do
line2|
line3
line4
done

Для отступа строк со 2 по 4 вы можете визуально выделить строки и ввести >. Или даже быстрее вы можете сделать >2j, чтобы получить:

do
    line2|
    line3
    line4
done

Обратите внимание, что >Nj означает отступ от текущей строки до N строк ниже. Если количество строк с отступом велико, пользователю может потребоваться несколько секунд, чтобы подсчитать правильное значение N. Чтобы сэкономить ценные секунды, вы можете активировать опцию относительного числа с помощью set relativenumber (доступно, начиная с версии Vim 7.3).

person MAGA    schedule 25.04.2018