it-swarm.com.ru

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

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

2068
Allain Lalonde

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

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

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

2442
Greg Hewgill

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

Кроме того, помните, что

.    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

ссылки

926
ire_and_curses

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

gg=G

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

121
Johan

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

={

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

Или просто:

==

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

107
svec

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

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

  2. Переместитесь в начало области для отступа
    hjkl

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

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

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

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

77
Kent Fredric

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

64
Daniel Spiewak

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

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

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

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

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

=G

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

n==

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

4==

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

=%

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

62
Sagar Jain

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

  • нажмите v для визуального режима.
  • использование up/down стрелка для выделения текста.
  • нажмите = сделать отступ для всех выделенных строк.
29
Michael Durrant

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

27
Paul Tomblin

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

vnoremap < <gv

vnoremap > >gv

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

25
Michael Ekoka

Предположим, вы используете 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 отступа вправо).

21
John Sonderson

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

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

Итак, чтобы использовать vim, вы должны научиться перемещать курсор и запоминать набор команд, таких как, например, > сделать отступ (и < "обойти").
Таким образом, для отступа строк от позиции курсора до верхней части экрана вы делаете >H>G сделать отступ в нижней части файла.

Если вместо ввода >Hвводишь dH затем вы удаляете тот же блок строк, cH для замены и т. д.

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

Вот как работает vim: нужно помнить только движения курсора и команды, и как их смешивать.
Таким образом, мой ответ на этот вопрос будет следующим: "перейдите к одному концу блока строк, который вы хотите сделать отступом, а затем введите > команда и движение на другой конец блока "если отступ интерпретируется как смещение строк, = if indent интерпретируется как в pretty-printing.

18
Juan Lanus

сделай это

$vi .vimrc

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

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

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

14
pankaj ukumar

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

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

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

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

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

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

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

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

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

    (или же)

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

12
Eric Kigathi

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

<} или <{ тот же самый отступ

11
jash

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

:2,10norm 10i 

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

:%norm 5i_

Или что-то еще более причудливое:

:%norm 2i[ ]

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

:1,20norm i#

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

:%norm 5x
11
Nykakin

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

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

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

11
SteveO

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

  1. Esc войти в командный режим
  2. Перейти к первому символу последней строки, которую вы хотите идентифицировать
  3. ctrl-v для начала выберите блок
  4. Перейти к первому символу первой строки, которую вы хотите идентифицировать
  5. shift-i войти в специальный режим вставки
  6. введите столько интервалов/табуляций, сколько нужно для отступа (например, 2
  7. нажмите Esc и пробелы появятся во всех строках

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

Для отступления я использую то же самое ctrl-v Блок выбора, чтобы выбрать пробелы и удалить его с помощью d,.

9
NickSoft

5== будет отступать 5 строк от текущей позиции курсора. так что вы можете набрать любое число перед ==, оно будет отступать количество строк. Это в командном режиме.

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

9
rohitkadam19

Для меня решение 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 [email protected]

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

export PATH=$PATH:$HOME/bin

Macports часто путается с ~/.profile, поэтому переменная окружения PATH может быть довольно длинной.

9
mda

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

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

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

set cindent

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

в нормальном/командном режиме

10==   (this will indent 10 lines from the current cursor location )
gg=G   (complete file will be properly indented)
9
Kamlesh Karwande

:help left

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

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

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

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

Это работает в vim и gvim.

9
zundarz

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

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

7
John La Rooy

Чтобы сделать отступ для каждой строки в типе файла, esc тогда G = GG

7
kapil
:line_num_start,line_num_end>

например.

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

Увеличьте символ ">" для большего количества вкладок

например.

14,21>>> for 3 tabs
7
Abhishesh Sharma

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

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

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

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

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

  4. Выделенный текст сразу же отступает до 3 пробелов.

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

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

    Vjjjj:le 3
    

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

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

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

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

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

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

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

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

    Ctrl+V

    jjjj
    

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

    EscShift+i

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

6
Eric Leschinski

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

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

Это не однозадачность. Оно работает:

  • Посередине строк.
  • Вставить любую строку во все строки.
  • Чтобы изменить столбец (используйте c вместо I).
  • дергать, удалять, заменять и т.д ...
4
sqqqrly

Для отступа всего файла на 4:

esc 4G=G
4
Michael
  • Для блока кода {}: = + %

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

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

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

2
Kulamani

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

int main() {
line1
line2|
line3
}

вы можете сделать >i{, что означает "indent (>) внутри (i) block ({)" и получить:

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).

0
Sergio