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

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

Ответы [ 30 ]

21 голосов
/ 31 января 2015

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

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

Тогда:

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

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

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


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

:help visual-block
/indent

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

18 голосов
/ 18 сентября 2012

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

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

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

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

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

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

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

14 голосов
/ 11 ноября 2009

сделать это

$vi .vimrc

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

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

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

12 голосов
/ 04 января 2012

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

11 голосов
/ 21 августа 2015

Есть еще один способ, который еще не был упомянут - вы можете использовать команду 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 голосов
/ 10 ноября 2010

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

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

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

11 голосов
/ 17 февраля 2012

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

<} или <{ такой же отступ:

9 голосов
/ 04 июня 2012

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

9 голосов
/ 06 февраля 2014

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

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

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

set cindent

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

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

10==   (this will indent 10 lines from the current cursor location )
gg=G   (complete file will be properly indented)
9 голосов
/ 10 сентября 2015

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

...