Быстро сделать отступ в нескольких строках в vi
-
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 или любым другим символом.
- Поместите курсор в начало блока
- v, чтобы переключиться на
-- VISUAL MODE --
- Выберите текст для отступа
- Тип
:
чтобы переключиться на подсказку Замена на 3 ведущих пробела:
:'<,'>s/^/ /g
Или заменить ведущими табами:
:'<,'>s/^/\t/g
Краткое объяснение:
'<,'>
- В пределах визуально выбранного диапазонаs/^/ /g
- Вставьте 3 пробела в начале каждой строки во всем диапазоне.(или)
s/^/\t/g
- ВставлятьTab
в начале каждой строки во всем диапазоне
Мне нравится отмечать текст для отступов:
<Ол>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):
<Ол>Это полезно, если вы не хотите изменять настройки идент / вкладки в 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:
Выберите блок кода, в котором вы хотите сделать отступ.Сделайте это, используя Ctrl+V в обычном режиме и стрелкой вниз для выбора текста.Пока он выбран, введите
:
дать команду блоку выделенного текста.В командной строке появится следующее:
:'<,'>
Чтобы установить отступ в 3 пробела, введите
le 3
и нажмите Enter.Вот что появляется::'<,'>le 3
Выделенный текст сразу же будет смещен на 3 пробела.
Вариант 2:Сделайте отступ блока кода в vi до трех пробелов в режиме Visual Line:
- Откройте файл в VI.
- Наведите курсор на какой-нибудь код
Находясь в обычном режиме, нажмите следующие клавиши:
Vjjjj:le 3
Интерпретация того, что вы сделали:
V
означает начать выделение текста.jjjj
стрелки вниз на 4 строки, выделение 4 строк.:
сообщает vi, что вы введете инструкцию для выделенного текста.le 3
означает отступ выделенного текста на 3 строки.Выбранный код сразу увеличивается или уменьшается до трех пробелов.
Вариант 3:используйте режим Visual Block и специальный режим вставки для увеличения отступа:
- Откройте файл в VI.
- Наведите курсор на какой-нибудь код
Находясь в обычном режиме, нажмите следующие клавиши:
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).