Это должно быть тривиально, и это может даже помочь, но я не могу понять, как с этим справиться. Как быстро сделать отступ в нескольких строках в vi?
Это должно быть тривиально, и это может даже помочь, но я не могу понять, как с этим справиться. Как быстро сделать отступ в нескольких строках в vi?
Ответы:
Используйте >команду. Для отступа пяти строк 5>>. Чтобы отметить блок строк и сделать отступ, Vjj>выделите три строки (только Vim). Чтобы сделать отступ для блока фигурных скобок, наведите курсор на одну из фигурных скобок и используйте >%или из любого места внутри блока >iB.
Если вы копируете блоки текста вокруг, и вам нужно выровнять отступ блока на его новом месте, используйте ]pвместо just p. Это выравнивает вставленный блок с окружающим текстом.
Кроме того, shiftwidth
настройка позволяет вам контролировать количество пробелов для отступа.
shiftwidth
Настройки для способа изменить это.
Этот ответ суммирует другие ответы и комментарии на этот вопрос, а также добавляет дополнительную информацию на основе документации Vim и вики- сайта Vim . Для краткости этот ответ не различает команды 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 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
Ссылки
>}
. Большое спасибо
Большой выбор будет:
gg=G
Это действительно быстро, и все становится с отступом ;-)
gg=G
просто помещает каждую строку, начиная с позиции 1. Все пробелы были удалены. Есть ли что-то еще специфичное для XML?
set cindent
должен быть в vimrc или должен запускаться :set cindent
перед выполнением этой команды
Также попробуйте это для отступа C-отступа . Есть :help =
для получения дополнительной информации:
={
Это автоматически сделает отступ для текущего блока кода, в котором вы находитесь.
Или просто:
==
для автоматического отступа текущей строки.
Нажатие клавиш для более визуальных людей:
Войдите в командный режим:
Escape
Переместитесь в начало области, чтобы сделать отступ:
hjkl↑↓←→
Начать блок:
v
Переместитесь в конец области, чтобы сделать отступ:
hjkl↑↓←→
(Необязательно) Введите желаемое количество уровней отступов
0..9
Выполните отступ на блоке:
>
Мастер всех команд
gg=G
Это отступы всего файла!
Ниже приведены некоторые простые и элегантные команды, используемые для быстрого отступа строк в Vim или gVim.
Для отступа текущей строки
==
Чтобы сделать отступ для всех строк под текущей строкой
=G
Для отступа n
строк ниже текущей строки
n==
Например, чтобы сделать отступ на 4 строки ниже текущей
4==
Чтобы сделать отступ для блока кода, перейдите к одной из фигурных скобок и используйте команду
=%
Это самые простые, но мощные команды для отступа в несколько строк.
vim
, нет vi
.
vim
что было связано с как vi
?
В дополнение к ответу, который уже дан и принят, также можно разместить маркер и затем сделать отступ от всего курсора до маркера.
Таким образом, введите, ma
где вы хотите, верхнюю часть блока с отступом, наведите курсор вниз, сколько вам нужно, и затем введите >'a
(обратите внимание, что « a
» может быть заменено на любое допустимое имя маркера). Это иногда проще, чем 5>>
или vjjj>
.
Перейти к началу текста
Помимо предлагаемых решений, мне нравится делать вещи по параграфу одновременно с >}
Когда вы выбираете блок и используете >отступ, он отступает и возвращается в нормальный режим. У меня есть это в моем файле .vimrc:
vnoremap < <gv
vnoremap > >gv
Это позволяет вам делать отступы столько раз, сколько вы хотите.
Предположим, вы используете 2 пробела для отступа вашего кода. Тип:
:set shiftwidth=2
Затем:
Вы поняли идею.
( Пустые строки не получат отступ, что, я думаю, неплохо. )
Я нашел ответ в документации (g) vim для блоков отступов:
:help visual-block
/indent
Если вы хотите дать счет команде, сделайте это непосредственно перед вводом символа оператора: «v {move-around} 3>» (переместите строки на 3 отступа вправо).
Прелесть пользовательского интерфейса Vim в том, что он согласован. Команды редактирования состоят из команды и перемещения курсора. Движения курсора всегда одинаковы:
'
.Итак, чтобы использовать vim, вы должны научиться перемещать курсор и запоминать набор команд, например, >для отступа (и< отступ).
Таким образом, для отступа строки из позиции курсора в верхней части экрана вы делаете >H, >Gчтобы сделать отступ в нижней части файла.
Если вместо ввода >Hвы набираете , dHто удаляете тот же блок строк, cHчтобы заменить его и т. Д.
Некоторые движения курсора лучше соответствуют определенным командам. В частности, %команда удобна для отступа всего блока HTML или XML. Если для файла выделен синтаксис ( :syn on
), установите курсор в тексте тега (например, в «i» элемента <div> и введите>% будет делать отступ до закрывающего тега </ div>.
Вот как работает Vim: нужно помнить только движения курсора и команды, и как их смешивать. Поэтому мой ответ на этот вопрос будет следующим: «перейдите к одному концу блока строк, для которого вы хотите сделать отступ, а затем введите >команду и движение к другому концу блока», если отступ интерпретируется как смещение строк,= если отступ интерпретируется как в симпатичной печати.
Сделай это:
$vi .vimrc
И добавьте эту строку:
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
Это только для файла cpp. Вы можете сделать это для другого типа файла, также просто изменив тип файла ...
Вы можете использовать norm i
команду, чтобы вставить данный текст в начале строки. Чтобы вставить 10 пробелов перед строками 2-10:
:2,10norm 10i
Помните, что в конце команды должен быть символ пробела - это будет символ, который мы хотим вставить. Мы также можем сделать отступ для строки с любым другим текстом, например, чтобы сделать отступ для каждой строки в файле с пятью символами подчеркивания:
:%norm 5i_
Или что-то еще более причудливое:
:%norm 2i[ ]
Более практический пример - комментирование кода Bash / Python / etc символом #:
:1,20norm i#
Для повторного отступа используйте xвместо i. Например, чтобы удалить первые 5 символов из каждой строки:
:%norm 5x
Быстрый способ сделать это с помощью VISUAL MODE
использованием того же процесса, что и комментирование блока кода.
Это полезно, если вы предпочитаете не менять shiftwidth
или использовать какие-либо set
директивы и достаточно гибки для работы с TABS, SPACES или любым другим символом.
-- VISUAL MODE --
:
чтобы переключиться на приглашениеЗамена на 3 ведущих пробела:
:'<,'>s/^/ /g
Или заменить ведущими вкладками:
:'<,'>s/^/\t/g
Краткое объяснение:
'<,'>
- в пределах визуально выбранного диапазона
s/^/ /g
- Вставьте 3 пробела в начале каждой строки во всем диапазоне
(или)
s/^/\t/g
- Вставлять Tab
в начале каждой строки во всем диапазоне
Мне нравится отмечать текст для отступа:
PS: вы можете использовать эту :'a,'zтехнику, чтобы отметить диапазон для любой операции (d, y, s /// и т. Д.), Где вы можете использовать строки, числа или %.
: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
вставьте пробелы. Спасибо!
Для меня решение 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 может быть довольно длинной.
5==
будет отступать пять строк от текущей позиции курсора.
Таким образом, вы можете ввести любой номер раньше ==
. Это будет отступать количество строк. Это в командном режиме.
gg=G
будет отступать весь файл сверху вниз.
Я не нашел метод, который я использую в комментариях, поэтому я поделюсь им (я думаю, только 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)
: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.
Много пользуясь Python, мне часто приходится сдвигать блоки более чем на один отступ. Вы можете сделать это, используя любой из методов выбора блока, а затем просто введите количество отступов, которые вы хотите перепрыгнуть прямо перед>
Например, V5j3>
три строки отступят пять раз - это 12 пробелов, если вы используете четыре пробела для отступов.
Вариант 1. Отступ блока кода в vi от трех пробелов в режиме Visual Block:
Выберите блок кода, который вы хотите сделать отступ. Сделайте это с помощью Ctrl+Vобычного режима и используйте стрелки вниз для выбора текста. Пока он выбран, введите, :
чтобы дать команду блоку выделенного текста.
В командной строке появится следующее: :'<,'>
Чтобы установить отступ в три пробела, введите le 3
и нажмите ввод. Вот что появляется::'<,'>le 3
Выделенный текст сразу же отступает в три пробела.
Вариант 2. Отступ блока кода в vi от трех пробелов в режиме Visual Line:
Перейдите в обычный режим и нажмите следующие клавиши:
Vjjjj:le 3
Интерпретация того, что вы сделали:
V
означает начать выделять текст.
jjjj
стрелки вниз на четыре строки, выделяя четыре строки.
:
говорит vi, что вы введете инструкцию для выделенного текста.
le 3
означает отступ выделенного текста на три строки.
Выбранный код сразу увеличивается или уменьшается до трех пробелов.
Вариант 3: используйте режим Visual Block и специальный режим вставки для увеличения отступа:
Находясь в обычном режиме, нажмите следующие клавиши:
Ctrl+V
jjjj
(нажмите пробел пять раз)
Esc Shift+i
Весь выделенный текст имеет отступ в пять дополнительных пробелов.
Я использую блочный режим визуального выбора:
I
( Shift+ I), чтобы войти в режим вставки.Это не однозадачность. Оно работает:
c
вместо I
).vim-prettier
вместо механизма отступа по умолчанию). В >
противном случае использование по-королевски улучшит форматирование, выполненное Преттиером.
Чтобы сделать отступ для всего файла на четыре:
esc 4G=G
Источник: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html