Отступ несколько строк быстро в vi

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

29 ответов


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

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

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


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

ссылки


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

gg=G

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


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

={

что будет авто-отступ текущего блока кода Вы.

или так:

==

авто-отступ текущей строки.


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

  1. Введите Командный Режим:
    побег

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

  3. начало блока:
    v

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

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

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


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


хозяин всех команд
gg=G

это отступы весь файл!

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

отступ текущей строки
==

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

=G

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

n==

например, абзац 4 строки ниже текущей строки

4==

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

=%

это самые простые, но мощные команды для отступа нескольких строк.


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

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

а также предлагаемые решения, мне нравится делать абзац за раз с >}


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

vnoremap < <gv

vnoremap > >gv

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


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

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

затем:

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

Вы получаете идея.

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


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

:help visual-block
/indent

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


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

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

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

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

некоторые движения курсора лучше подходят для определенных команд. В частности,% команда удобна для отступа целого блока HTML или XML.
Если в файле выделен синтаксис (:syn on) затем установка курсора в тексте тега (например,, в "я"

и введя >% будет отступ до закрывающего тега .

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


этого

$vi .vimrc

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

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

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


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

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

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

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

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

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

  7. Краткое Описание:

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

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

    (или)

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


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

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

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


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

<} или <{ тот же un-indent


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

:2,10norm 10i 

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

:%norm 5i_

или что-то еще больше фантазии:

:%norm 2i[ ]

более практическим примером является комментирование кода Bash/Python/etc с # character:

:1,20norm i#

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

:%norm 5x

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

set expandtab
set tabstop=2
set shiftwidth=2

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

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

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

export PATH=$PATH:$HOME/bin

Macports возится с"~/.профилю" лот, поэтому переменная среды PATH может получить довольно длинный.


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

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

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

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


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

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

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

set cindent

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

в обычном / командном режиме введите

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

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

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


:help left

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

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

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

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

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


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

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


:line_num_start,line_num_end>

например

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

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

например

14,21>>> for 3 tabs

для отступа каждой строки в типе файла, esc тогда G=gg


как отступ выделенного кода в vi сразу # пробелов:

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

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

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

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

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

Вариант 2: отступ блока кода в vi до трех пробелов с визуальным режимом строки:

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

    Vjjjj:le 3
    

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

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

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

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

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

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

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

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

    Ctrl+V

    jjjj
    

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

    Esc Shift+i

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


чтобы отступить весь файл на 4:

esc 4G=G

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

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

Это не UNI-tasker. Работает:

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

предположим | представляет положение курсора в 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).