Должно быть тривиально, и это может быть даже в помощи, но я не могу понять, как его перемещать. Как быстро вставить несколько строк в vi?
Быстрый отступ нескольких строк в vi
Ответ 1
Используйте команду >. Для отступов 5 строк, 5 > >. Чтобы пометить блок строк и отступ, V j j > до отступа 3 строки (только vim). Чтобы отложить блок фигурных скобок, наведите курсор на одну из фигурных скобок и используйте > %.
Если вы копируете блоки текста вокруг и должны выровнять отступ блока в своем новом местоположении, используйте ] p вместо просто p. Это выравнивает вложенный блок с окружающим текстом.
Кроме того, параметр shiftwidth
позволяет вам контролировать количество пробелов в отступ.
Ответ 2
Этот ответ суммирует другие ответы и комментарии по этому вопросу и добавляет дополнительную информацию на основе документации 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 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
Отступы с использованием маркеров
Другой подход - markers:
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
Ссылки
Ответ 3
Большой выбор будет
gg=G
это действительно быстро, и все становится отступом; -)
Ответ 4
Также попробуйте сделать это для отступов с отступом, сделайте :help =
для получения дополнительной информации:
={
Это будет автоматически отступать текущий код, в котором вы находитесь.
Или просто:
==
чтобы автоматически отложить текущую строку.
Ответ 5
Key-Presses для более визуальных людей:
-
Введите командный режим:
Escape -
Переместитесь к началу области в отступ:
h j k l ↑ ↓ ← → -
Запустить блок:
v -
Переместитесь в конец области до отступа:
h j k l ↑ ↓ ← → -
(Необязательно) Введите количество уровней отступов, которые вы хотите
0..9 -
Выполните отступ в блоке:
>
Ответ 6
В дополнение к уже предоставленному и принятому ответу также можно поместить маркер, а затем отстучить все от текущего курсора до маркера. Таким образом, введите ma
, где вы хотите верхнюю часть вашего отступающего блока, указав курсор до упора, а затем введите >'a
(обратите внимание, что "a
" может быть заменено любым допустимым именем маркера). Это иногда проще, чем 5>>
или vjjj>
.
Ответ 7
Мастер всех команд
gg=G
Это отступы всего файла!
И ниже приведены некоторые простые и изящные команды, используемые для быстрого отступа строк в Vim или gVim.
Чтобы отложить текущую строку
==
Чтобы отложить все строки ниже текущей строки
=G
Отступы n
под текущей строкой
n==
Например, чтобы отступать 4 строки ниже текущей строки
4==
Чтобы отложить блок кода, перейдите к одной из фигурных скобок и используйте команду
=%
Это самые простые, но мощные команды для отступов нескольких строк.
Ответ 8
Как и предлагаемые решения, мне нравится делать абзацы одновременно с >}
Ответ 9
Перейдите к началу текста
- нажмите v для визуального режима.
- используйте стрелку up/down, чтобы выделить текст.
- нажмите =, чтобы выделить все выделенные строки.
Ответ 10
когда вы выбираете блок и используете > в отступ, его отступы возвращаются в нормальный режим. У меня это в моем .vimrc:
vnoremap < <gv
vnoremap > >gv
Это позволяет вам отступать ваш выбор столько раз, сколько вы хотите.
Ответ 11
Красота vim UI заключается в том, что она последовательна. Команды редактирования состоят из команды и перемещения курсора. Движения курсора всегда одинаковы:
- H в верхней части экрана, L снизу, M до середины
- n G, чтобы перейти к строке n, G только к нижней части файла, G G в начало
- n, чтобы перейти к следующему совпадению поиска, n к предыдущему
- } до конца абзаца
- % в следующую совпадающую скобку, либо в круглых скобках, либо в виде тега
- enter на следующую строку
- ' x, чтобы отметить x, где x является буквой или другой буквой
- еще много, в том числе w и w для слова, $ или 0 для подсказок строки и т.д., которые здесь не применяются, потому что не являются движениями линии.
Итак, чтобы использовать vim, вам нужно научиться перемещать курсор и запоминать репертуар команд, например, > для отступа (и < до "outdent" ).
Таким образом, для отступов линий от позиции курсора в верхней части экрана вы делаете > H, > G для отступа в нижней части файла.
Если вместо ввода > H введите d H, то вы удалите один и тот же блок строк, c H для его замены и т.д.
Некоторые перемещения курсора лучше подходят для определенных команд. В частности, команда % удобна для отступов целого блока HTML или XML.
Если в файле выделен синтаксис (:syn on
), то установка курсора в тексте тега (например, в "i" <div> и входе > % будет отступ до закрытия </div> .
Вот как работает vim: нужно помнить только движения курсора и команды, и как их смешивать.
Поэтому мой ответ на этот вопрос был бы "перейти к одному концу блока строк, который вы хотите отступом, а затем ввести команду > и движение на другой конец блока", если отступ интерпретируется как сдвиг строк, =, если отступ интерпретируется как в довольно печатной.
Ответ 12
Предположим, вы используете 2 пробела для отступов кода. Тип:
:set shiftwidth=2
- Введите v (чтобы войти в режим редактирования визуального блока)
- Переместите курсор с помощью клавиш со стрелками (или с помощью h/j/k/l), чтобы выделить линии, которые вы хотите отступом или отменить.
Тогда:
- Введите > в отступ один раз (2 пробела).
- Введите 2 > в отступ дважды (4 пробела).
- Введите 3 > в отступ трижды (6 пробелов).
- ...
- Введите < однократно (2 пробела).
- Введите 2 < в два раза подряд (4 пробела).
- Введите 3 < в unindent трижды (6 пробелов).
- ...
Вы получаете идею.
(Пустые строки не будут иметь отступы, которые, как я думаю, хороши.)
Я нашел ответ в документации (g) vim для отступов:
:help visual-block
/indent
Если вы хотите дать счет команде, сделайте это непосредственно перед вводом символ оператора: "v {move-around} 3 > " (перемещение строк 3 отступов до справа).
Ответ 13
сделайте это
$vi .vimrc
и добавьте эту строку
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
Это только для файла cpp, вы можете сделать это для другого типа файла, просто изменив тип файла...
Ответ 14
Быстрый способ сделать это с помощью VISUAL MODE
использует тот же процесс, что и комментарий блока кода.
Это полезно, если вы не хотите изменять свой shiftwidth
или использовать любые директивы set
и достаточно гибки для работы с TABS или SPACES или любым другим символом.
- Поместите курсор в начало на блоке
- v для переключения на
-- VISUAL MODE --
- Выберите текст для отступов
- Введите
:
, чтобы переключиться на приглашение -
Замена тремя ведущими пробелами:
:'<,'>s/^/ /g
-
Или замените ведущие вкладки:
:'<,'>s/^/\t/g
-
Краткое пояснение:
'<,'>
- В пределах визуально выбранного диапазонаs/^/ /g
- Вставьте 3 пробела в начале каждой строки во всем диапазоне(или)
s/^/\t/g
- ВставитьTab
в начале каждой строки всего диапазона
Ответ 15
Мне нравится отмечать текст для отступов:
- перейдите к началу строки текста, затем введите ma (a - метка из 'm'ark: это может быть любая буква)
- перейти к концевой строке текста и ввести mz (снова z может быть любой буквой)
- : 'a,' z > или: 'a,' z < будет отступ или outdent (это слово?)
- Voila! текст перемещается (пустые строки остаются пустыми без пробелов)
PS: вы можете использовать: 'a,' z для обозначения диапазона для любой операции (d, y, s///и т.д.), где вы можете использовать строки, числа или%
Ответ 16
>}
или >{
отступ от текущей строки до следующего абзаца
<}
или <{
тот же самый отступ
Ответ 17
Есть еще один способ, о котором еще не упоминалось - вы можете использовать команду norm i
, чтобы вставить данный текст в начале строки. Чтобы вставить 10 пробелов перед строками 2-10:
:2,10norm 10i
Помните, что в конце команды должен быть символ пробела - это будет символ, который мы хотим вставить. Мы также можем отступать с любым другим текстом, например, чтобы отложить каждую строку в файле с 5 символами подчеркивания:
:%norm 5i_
Или что-то еще более фантастическое:
:%norm 2i[ ]
Более практичный пример - комментарий Bash/код Python/etc с символом #:
:1,20norm i#
Для повторного ввода используйте x вместо i. Например, чтобы удалить первые 5 символов из каждой строки:
:%norm 5x
Ответ 18
Для меня решение MacVim (Visual) было, выберите мышью и нажмите " > ", но после помещения следующих строк в "~/.vimrc", поскольку мне нравятся пробелы вместо вкладок:
set expandtab
set tabstop=2
set shiftwidth=2
Также полезно иметь возможность вызывать MacVim из командной строки (Terminal.app), так как у меня есть следующий вспомогательный каталог "~/bin", где я помещаю script, называемый "macvim":
#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app [email protected]
И, конечно, в "~/.bashrc":
export PATH=$PATH:$HOME/bin
Маскирует файлы с "~/.profile" много, поэтому переменная среды PATH может быть довольно длинной.
Ответ 19
5==
будет отступать 5 строк от текущей позиции курсора.
поэтому вы можете ввести любое число до ==
, это будет отступы числа строк.
Это находится в командном режиме.
gg=G
будет отступать весь файл сверху вниз.
Ответ 20
Я не знаю, почему так сложно найти простой ответ, как этот...
Мне самому пришлось много бороться, чтобы знать это его очень простой
отредактируйте файл .vimrc
в домашнем каталоге
добавьте эту строку
set cindent
в вашем файле, где вы хотите отступать правильно
в режиме нормального/командного режима
10== (this will indent 10 lines from the current cursor location )
gg=G (complete file will be properly indented)
Ответ 21
Используя Python много, мне приходится часто нуждаться в смене блоков более чем на один отступ. Вы можете сделать это, используя любой из методов выбора блока, а затем просто введите количество отступов, которые вы хотите прыгать прямо перед >
Eg. V5j3>
будет отступать 5 строк 3 раза - это 12 пробелов, если вы используете 4 пробела для отступов
Ответ 22
Я не нашел метод, который я использую в комментариях, поэтому я поделюсь им (я думаю, только vim):
- Esc для входа в командный режим
- Перейдите к первому символу последней строки, которую вы хотите идентифицировать.
- ctrl - v, чтобы начать выбор блока
- Перейдите к первому символу первой строки, которую вы хотите идентифицировать.
- shift - i для входа в специальный режим вставки
- введите столько spases/tabs, сколько вам нужно, чтобы отступы (например,
- нажмите Esc, и пробелы появятся во всех строках
Это полезно, когда вы не хотите изменять настройки идентификатора/вкладки в vimrc или помнить, что они меняли его во время редактирования.
Для unindent я использую тот же блок ctrl - v, чтобы выбрать пробелы и удалить его с помощью d.
Ответ 23
Чтобы отложить каждую строку в типе файла, esc, тогда G = gg
Ответ 24
: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
.
Ответ 25
Как выделить выделенный код в 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+i
В выделенном тексте выделены дополнительные 5 пробелов.
Ответ 26
:line_num_start,line_num_end>
например.
14,21> shifts line number 14 to 21 to one tab
Увеличьте символ ' > ' для большего количества вкладок
например.
14,21>>> for 3 tabs
Ответ 27
Отложить все файлы на 4:
esc 4G=G
Ответ 28
Я использую визуальный выбор блочного режима:
- Перейдите к передней части блока для перемещения (вверху или внизу).
- Нажмите ctrl-v, чтобы перейти в режим визуальных блоков.
- Перейдите к выбору столбца перед строками.
- Нажмите я (сдвиг i), чтобы войти в режим вставки.
- Введите несколько пробелов.
- Нажмите ESC. Все строки сдвинутся.
Работы:
- В середине строк.
- Вставить любую строку во все строки.
- Чтобы изменить столбец (используйте c вместо I).
- удалить, удалить, заменить и т.д.