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

StackOverflow https://stackoverflow.com/questions/235839

  •  04-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Используйте команду > . Для отступа 5 строк: 5 & Gt; & Gt; . Чтобы пометить блок строк и сделать отступ, V j j & Gt; для отступа 3 строк (только VIM). Чтобы сделать отступ для блока фигурных скобок, наведите курсор на одну из фигурных скобок и используйте & Gt; % или из любого места внутри блока используйте GT;. я Б

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

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

Другие советы

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

={

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

Или просто:

==

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

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

<Ол>
  • Войдите в командный режим:
    Escape

  • Переместитесь в начало области, чтобы сделать отступ:
    ч J к л # 8593 &; # 8595; & # 8592; & # 8594;

  • Начать блок:
    v

  • Переместитесь в конец области, чтобы сделать отступ:
    ч J к л # 8593 &; # 8595; & # 8592; & # 8594;

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

  • Выполните отступ для блока:
    GT &;

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

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

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

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

    Чтобы отступить текущую строку
    ==

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

    =G

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

    n==

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

    4==

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

    =%

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

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

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

    Наряду с предлагаемыми решениями, я люблю делать вещи по параграфам одновременно с >}

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

    vnoremap < <gv
    
    vnoremap > >gv
    

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

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

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

    Затем:

    • Тип > сделать отступ один раз (2 пробела).
    • Тип 2> сделать отступ дважды (4 пробела).
    • Тип 3> сделать отступ трижды (6 пробелов).
    • ...
    • Тип < удалить отступ один раз (2 пробела).
    • Тип 2< удалить отступ дважды (4 пробела).
    • Тип 3< удалить отступ трижды (6 пробелов).
    • ...

    Вы поняли идею.

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


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

    :help visual-block
    /indent
    

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

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

    • ЧАС в верхнюю часть экрана, л до дна, М до середины
    • нг перейти на строку n, г один в конец файла, гг к началу
    • н чтобы перейти к следующему совпадению поиска, Н к предыдущему
    • } до конца абзаца
    • % к следующей соответствующей скобке, либо скобкам, либо типу тега
    • входить к следующей строке
    • 'Икс отметить x, где x — буква или другая '
    • многие другие, в том числе ш и Вт на слово, $ или 0 к кончикам строк и т. д., которые здесь не применимы, поскольку не являются линия движения.

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

    Если вместо ввода >ЧАС, ты печатаешь дЧАС то вы удаляете тот же блок строк, сЧАС для его замены и т. д.

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

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

    сделай это

    $vi .vimrc
    

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

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

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

    Быстрый способ сделать это с помощью 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 в начале каждой строки во всем диапазоне

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

    <Ол>
  • перейдите в начало строки текста, затем введите ma (a - метка из 'm'ark: это может быть любая буква)
  • перейдите в конец строки текста и введите mz (снова z может быть любой буквой)
  • &:
  • 'а,' г Гт или: 'a,' z < будет отступ или отступ (это слово?)
  • Voila! текст перемещается (пустые строки остаются пустыми без пробелов)
  • PS: вы можете использовать: 'a,' z метод, чтобы отметить диапазон для любой операции (d, y, s /// и т. д.), где вы можете использовать строки, числа или%

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

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

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

    :2,10norm 10i 
    

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

    :%norm 5i_
    

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

    :%norm 2i[ ]
    

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

    :1,20norm i#
    

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

    :%norm 5x
    

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

    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 может быть довольно длинной.

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

    <Ол>
  • Esc для входа в командный режим
  • Перейти к первому символу последней строки, которую вы хотите идентифицировать
  • ctrl - v для начала выбора блока
  • Перейти к первому символу первой строки, которую вы хотите идентифицировать
  • shift - i для входа в специальный режим вставки
  • введите столько интервалов / табуляций, сколько нужно сделать для отступа (например, 2
  • нажмите Esc , и во всех строках появятся пробелы
  • Это полезно, если вы не хотите изменять настройки идент / вкладки в vimrc или запоминать их для изменения во время редактирования.

    Для удаления отступов я использую тот же блок 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 воля Выровнять строки по левому краю в [диапазоне].Он устанавливает отступ в строках на [indent] (по умолчанию 0).

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

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

    :le без какой-либо ценности или :le 0 будет выровнено по левому краю с отступом 0.

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

    :line_num_start,line_num_end>
    

    например

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

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

    например

    14,21>>> for 3 tabs
    

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

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

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

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

    Опция 1:Сделайте отступ блока кода в vi до трех пробелов в режиме Visual Block:

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

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

    3. Чтобы установить отступ в 3 пробела, введите le 3 и нажмите Enter.Вот что появляется: :'<,'>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 раз)

      Esc Shift+я

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

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

    esc 4G=G
    

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

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

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

    • В середине строк.
    • Вставить любую строку во все строки.
    • Чтобы изменить столбец (используйте c вместо I).
    • выдернуть, удалить, заменить и т. д.
    • Для блока кода {}: = + %

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

    • Для всего файла: гарантированная победа + = + г

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

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

    int main() {
    line1
    line2|
    line3
    }
    

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

    int main() {
        line1
        line2|
        line3
    }
    

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

    do
    line2|
    line3
    line4
    done
    

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

    do
        line2|
        line3
        line4
    done
    

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top