Это должно быть тривиально, и это может быть даже в справке, но я не могу понять, как по нему ориентироваться. Как быстро сделать отступ в нескольких строках в vi?
Быстрый отступ для нескольких строк в vi
Ответы (33)
Используйте команду >. Чтобы сделать отступ в пять строк, 5 > >. Чтобы выделить блок строк и сделать для него отступ, V j j > для отступа в три строки (только для Vim) . Чтобы сделать отступ для блока фигурных скобок, поместите курсор на одну из фигурных скобок и используйте > % или из любого места внутри блока используйте > < kbd> я B.
Если вы копируете блоки текста вокруг и вам нужно выровнять отступ блока в его новом месте, используйте ] p вместо просто p kbd >. Это выравнивает вставленный блок по окружающему тексту.
Кроме того, параметр shiftwidth
позволяет вам контролировать количество пробелов для отступа.
shiftwidth
, чтобы узнать, как это изменить.
- person Greg Hewgill; 01.03.2011
5>>
Я только что попробовал. Он делает отступ для пятой строки, а не для 5 различных строк, начиная с курсора.
- person falsePockets; 08.04.2018
5>>
делает для меня отступы на 5 строк. Убедитесь, что вы не нажимаете Enter после 5.
- person Greg Hewgill; 08.04.2018
esc :5>>
), а не без режима. (esc 5>>
)
- person falsePockets; 09.04.2018
M
и ?
.
- person Dmitry; 18.03.2019
Этот ответ суммирует другие ответы и комментарии на этот вопрос, а также добавляет дополнительную информацию на основе документации Vim и Vim wiki. Для краткости этот ответ не делает различий между командами, специфичными для 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 three 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
Ссылки
>}
. Спасибо большое
- person Amit; 10.08.2011
Большой выбор будет:
gg=G
Это действительно быстро, и все имеет отступы ;-)
gg=G
каждая строка просто начинается с позиции 1. Все пробелы удалены. Есть ли что-нибудь еще, относящееся к XML?
- person asgs; 29.01.2014
set cindent
должен быть в vimrc или должен запустить :set cindent
перед выполнением этой команды
- person Amanuel Nega; 19.05.2015
Также попробуйте это для отступа C-indenting. Сделайте :help =
для получения дополнительной информации:
={
Это приведет к автоматическому отступу текущего блока кода, в котором вы находитесь.
Или просто:
==
для автоматического отступа текущей строки.
Ключевые прессы для более визуальных людей:
Войдите в командный режим:
EscapeПереместитесь к началу области для создания отступа:
h j k lНачать блок:
vПереместитесь к концу области, чтобы сделать отступ:
h j k l(Необязательно) Введите желаемое количество уровней отступа
0..9Выполните отступ на блоке:
>
Мастер всех команд gg=G
Это делает отступ для всего файла!
А ниже приведены некоторые из простых и элегантных команд, используемых для быстрого отступа строк в Vim или gVim.
Для отступа текущей строки ==
Чтобы сделать отступ для всех строк ниже текущей строки
=G
Чтобы сделать отступ на n
строк ниже текущей строки
n==
Например, чтобы сделать отступ на 4 строки ниже текущей строки
4==
Чтобы сделать отступ в блоке кода, перейдите к одной из фигурных скобок и используйте команду
=%
Это простейшие, но мощные команды для создания отступа в несколько строк.
vim
, а не в vi
.
- person rojomoke; 30.07.2014
vim
, связанный с vi
?
- person rojomoke; 31.07.2014
Помимо уже предоставленного и принятого ответа, это также возможно разместить маркер, а затем сделать отступ от текущего курсора до маркера.
Таким образом, введите ma
там, где вы хотите, чтобы верх вашего блока с отступом, переместите курсор вниз, насколько вам нужно, а затем введите >'a
(обратите внимание, что «a
» можно заменить на любое допустимое имя маркера). Иногда это проще, чем 5>>
или vjjj>
.
Перейти к началу текста
- нажмите v для визуального режима.
- используйте стрелку вверх / вниз для выделения текста.
- нажмите =, чтобы сделать отступ для всех выделенных вами строк.
Когда вы выбираете блок и используете > для отступа, он возвращается в нормальный режим. У меня есть это в моем файле .vimrc:
vnoremap < <gv
vnoremap > >gv
Это позволяет делать отступ для выделения сколько угодно раз.
Помимо предлагаемых решений, мне нравится делать что-то по абзацу за раз с >}
Предположим, вы используете 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 отступа вправо).
Прелесть пользовательского интерфейса Vim в его согласованности. Команды редактирования состоят из команды и перемещения курсора. Курсор перемещается всегда одинаково:
- H к верху экрана, L к низу, M к середине
- n G для перехода к строке n, G только до конца файла, g kbd > g в начало
- n для перехода к следующему поисковому совпадению, N к предыдущему
- } до конца абзаца
- % до следующей подходящей скобки, либо круглых скобок, либо типа тега
- перейти к следующей строке
- ' x, чтобы отметить x, где x - буква или другое
'
. - многие другие, включая w и W для слова, $ или 0 для концовки линии и т. д., которые здесь не применяются, потому что не являются движением линии.
Итак, чтобы использовать vim, вам нужно научиться перемещать курсор и запомнить набор команд, таких как, например, > для отступа (и ‹ для« outdent » ).
Таким образом, для отступа строк от позиции курсора до верха экрана вы делаете > H, > G kbd > сделать отступ до конца файла.
Если вместо ввода > H вы наберете d H, то вы удаляете тот же блок строк, c H для его замены и т. д.
Некоторые движения курсора лучше подходят для определенных команд. В частности, команда % удобна для создания отступа для всего блока HTML или XML. Если синтаксис файла выделен (:syn on
), то установка курсора в тексте тега (например, в «i» в ‹div> и ввод > % приведет к отступ до закрывающего тега ‹/div>.
Вот как работает Vim: нужно помнить только движения курсора и команды, а также то, как их смешивать. Итак, я отвечу на этот вопрос: «перейдите к одному концу блока строк, в котором вы хотите сделать отступ, а затем введите команду > и переместитесь к другому концу блока», если отступ интерпретируется как сдвиг строк, =, если отступ интерпретируется как приличная печать.
Вы можете использовать команду norm i
, чтобы вставить заданный текст в начало строки. Чтобы вставить 10 пробелов перед строками 2-10:
:2,10norm 10i
Помните, что в конце команды должен быть пробел - это будет символ, который мы хотим вставить. Мы также можем сделать отступ для строки с любым другим текстом, например, чтобы сделать отступ для каждой строки в файле пятью символами подчеркивания:
:%norm 5i_
Или что-то еще более необычное:
:%norm 2i[ ]
Более практический пример - это комментирование кода Bash / Python / etc с помощью символа #:
:1,20norm i#
Чтобы изменить отступ, используйте x вместо i. Например, чтобы удалить первые 5 символов из каждой строки:
:%norm 5x
Сделай это:
$vi .vimrc
И добавьте эту строку:
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
Это только для файла cpp. Вы можете сделать это для другого типа файла, также просто изменив тип файла ...
Быстрый способ сделать это с помощью VISUAL MODE
использует тот же процесс, что и комментирование блока кода.
Это полезно, если вы предпочитаете не изменять свой shiftwidth
или использовать какие-либо set
директивы, и достаточно гибко для работы с TABS, SPACES или любым другим символом.
- Поместите курсор в начало блока
- v переключиться на
-- VISUAL MODE --
- Выделите текст для отступа
- Введите
:
, чтобы переключиться на подсказку. Замена тремя ведущими пробелами:
:'<,'>s/^/ /g
Или заменив ведущие вкладки:
:'<,'>s/^/\t/g
Краткое объяснение:
'<,'>
- В пределах визуально выбранного диапазонаs/^/ /g
- Вставить 3 пробела в начале каждой строки во всем диапазоне(or)
s/^/\t/g
- вставлятьTab
в начало каждой строки во всем диапазоне
>}
или >{
отступ от текущей строки до следующего абзаца
<}
или <{
то же снятие отступа
Мне нравится отмечать текст для отступа:
- перейдите к началу строки текста, затем введите m a (a - это метка из 'm'ark: это может быть любая буква)
- перейдите к конечной строке текста и введите m z (опять же, z может быть любой буквой)
- : 'a,' z> или : 'a,' z ‹ будет с отступом или с отступом (это слово?)
- Вуаля! Текст перемещен (пустые строки остаются пустыми без пробелов)
PS: вы можете использовать технику : 'a,' z, чтобы отметить диапазон для любой операции (d, y, s /// и т. Д.), Где вы можете использовать строки, числа или < kbd>%.
:line_num_start,line_num_end>
Например,
14,21> shifts line number 14 to 21 to one tab
Увеличьте символ '>', чтобы увидеть больше вкладок.
Например,
14,21>>> for three tabs
:set number
для переключения номеров строк (они выключены по умолчанию) или поместить set number
в ваш vimrc.
- person DryLabRebel; 04.03.2020
Для меня решение 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 может быть довольно длинная.
: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.
:'<,'>le4
для вставки пробелов. Спасибо!
- person Subfuzion; 12.08.2017
5==
будет отступать на пять строк от текущей позиции курсора.
Таким образом, вы можете ввести любое число перед ==
. Он изменит количество строк. Это в командном режиме.
gg=G
сделает отступ для всего файла сверху вниз.
Я не нашел в комментариях метода, который использую, поэтому поделюсь им (думаю, только Vim):
- Esc для входа в командный режим
- Перейти к первому символу последней строки, для которой нужно сделать отступ
- Ctrl + V для начала выбора блока
- Перейти к первому символу первой строки, для которой нужно сделать отступ
- Shift + I для входа в специальный режим вставки
- Введите столько пробелов / табуляции, сколько вам нужно для отступа (например, два
- Нажмите 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)
Я часто использую Python, и мне часто нужно сдвигать блоки более чем на один отступ. Вы можете сделать это, используя любой из методов выбора блока, а затем просто введите количество отступов, на которые вы хотите перейти, прямо перед >
Например, V5j3>
сделает отступ в пять строк три раза, что составляет 12 пробелов, если вы используете четыре пробела для отступов.
Чтобы сделать отступ для каждой строки в типе файла, нажмите Esc, а затем G = gg.
Я использую визуальное выделение в блочном режиме:
- Подойдите к передней части блока, чтобы переместиться (вверху или внизу).
- Нажмите Ctrl + V, чтобы войти в режим визуального блока.
- Перейдите, чтобы выбрать столбец перед строками.
- Нажмите
I
(Shift + I), чтобы войти в режим вставки. - Введите несколько пробелов.
- Нажмите Esc. Все линии сместятся.
Это не однозадачник. Оно работает:
- В середине строк.
- Вставить любую строку во все строки.
- Чтобы изменить столбец (используйте
c
вместоI
). - копировать, удалять, заменять и т. д.
vim-prettier
вместо механизма отступов по умолчанию). В противном случае использование >
существенно изменит форматирование, выполненное Prettier.
- person oligofren; 27.03.2018
Для блока кода {}: = + %
Для выделенной строки: Shift + v выберите, используя клавиши со стрелками вверх / вниз, а затем нажмите =.
Для всего файла: gg + = + G
Примечание. 'gg' означает переход к строке 1, '=' - команда отступа, а 'G' перемещает курсор в конец файла.
Как сделать отступ выделенного кода в vi сразу несколькими пробелами:
Вариант 1. Отступите в блоке кода в vi до трех пробелов в режиме визуального блока:
Выберите блок кода, для которого нужно сделать отступ. Сделайте это, используя Ctrl + V в обычном режиме и выделив текст со стрелкой вниз. Пока он выбран, введите
:
, чтобы дать команду блоку выделенного текста.В командной строке появится следующее:
:'<,'>
Чтобы установить отступ в три пробела, введите
le 3
и нажмите клавишу ВВОД. Вот что появляется::'<,'>le 3
Выделенный текст сразу становится отступом до трех пробелов.
Вариант 2. Отступите в блоке кода в vi до трех пробелов в режиме Visual Line:
- Откройте ваш файл в vi.
- Наведите курсор на код
Перейдите в обычный режим и нажмите следующие клавиши:
Vjjjj:le 3
Интерпретация того, что вы сделали:
V
означает начать выделение текста.jjjj
стрелки вниз на четыре строки, выделяя четыре строки.:
сообщает vi, что вы вводите инструкцию для выделенного текста.le 3
означает отступ выделенного текста в три строки.Выбранный код сразу увеличивается или уменьшается с отступом до трех пробелов.
Вариант 3: используйте режим визуального блока и специальный режим вставки для увеличения отступа:
- Откройте ваш файл в vi.
- Наведите курсор на код
В нормальном режиме нажмите следующие клавиши:
Ctrl + V
jjjj
(нажмите пробел пять раз)
Esc Shift + i
Весь выделенный текст имеет отступ на пять дополнительных пробелов.
- Нажмите SHIFT + v, чтобы войти в режим VISUAL LINE.
- Выделите текст, для которого хотите сделать отступ, используя клавиши курсора или клавиши j и k.
- Чтобы сделать отступ вправо, нажмите SHIFT + точка (символ ›). Для отступа влево нажмите SHIFT + запятая (символ ‹).
Источник: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html
Чтобы сделать четыре отступа для всего файла:
esc 4G=G
Для тех, кто любит современные редакторы делать отступ для выделенной строки с помощью <TAB>
и <S-TAB>
:
vnoremap <TAB> >gv
vnoremap <S-TAB> <gv
Использование: нажмите V
для линейного визуального режима, выберите нужные строки, затем нажмите Tab (может быть со сдвигом), затем отступы применяются по вашему желанию, и выделение остается ...
Предположим, |
представляет позицию курсора в 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).