Как исправить отступы всего файла в Vi?

625

В Vim, какая команда исправить отступ всех строк?

Часто я копирую и вставляю код в удаленный терминал и все перепутано. Я хочу исправить это одним махом.

mmcdole
источник
Аналогично:
повторная установка
8
Профилактика лучше лечения. В этом духе приходит этот комментарий. Сделайте «: set paste» перед тем, как войти в режим вставки и вставить код с удаленного терминала.
Хтонический проект

Ответы:

1215

=команда indent может принимать движения. Таким образом, ggчтобы получить начало файла, =для отступа, Gдо конца файла, gg=G.

Логан Капальдо
источник
39
Я никогда не смогу отучить свой драгоценный 1G =) Один из моих любимых =% стоя на открывающей скобке. Исправляет отступы всего блока.
PEZ
2
: 0 <return> не так уж плохо, но gg это хорошо. (да, я изучил Эд первым)
Эрик Олсон
8
Могу ли я сделать отступ для всего файла, не выходя из текущей строки?
Фабио Перес
86
@ Фабио: ''(две одинарные кавычки) возвращает вас туда, где вы были, поэтому gg=G''следует сделать отступ, а затем вернуться.
Nemo157
@ArchimedesTrajano Mac OS очень устарел, я рекомендую версию HomeBrew; это намного новее. У меня были некоторые раздражающие проблемы с Mac vim. Кроме того, я слышал, что вы не должны связываться со встроенным, поэтому не пытайтесь обновить его самостоятельно, если вы не будете очень осторожны.
AlexMA
126

Прежде чем вставлять в терминал, попробуйте :set pasteи затем, :set nopasteкогда вы закончите. Это отключит авто-отступ, перенос строки и другие функции, которые портят вашу пасту.

edit: Кроме того, я должен отметить, что гораздо лучший результат, чем =отступ, обычно можно получить с помощью внешней программы. Например, я бегаю :%!perltidyвсе время. astyle, cindentИ т.д. , также могут быть использованы. И, конечно же, вы можете сопоставить их нажатию клавиш и сопоставить разные нажатия клавишам в зависимости от типа файла.

derobert
источник
5
Вы можете установить equalprgпараметр в ftplugin, чтобы использовать внешний фильтр для =отступа, а не пользовательскую привязку клавиш.
Джош Ли
Theres также опция привязки клавиш pastetoggle, например. : установите pt \ p для переключения между режимами
Майкл
Примечание: в vimconfig от grml клавиша pastetoggle отображается на F11
Thomas
Я использую formatpgmс приборкой и astyle, а затем gq. Вот несколько примеров из моего .vimrc: au FileType xml set fp=tidy\ -q\ -i\ -xmlиau FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
Раффи Хачадурян
только что скачал perltidy после прочтения этого, это намного лучше, чем стандартный отступ vim по умолчанию
Joey Ciechanowicz
29

Если вы хотите переименовать блок, в котором находитесь, без необходимости ввода каких-либо аккордов, вы можете сделать:

[[=]]
Эндрю Вагнер
источник
1
Извините, что оживил это, но что вы имели в виду под аккордами? Coords?
Джон П
7
«Аккорды» здесь означают команды, издаваемые удерживанием одной клавиши при нажатии другой, по аналогии с музыкальными аккордами звучало несколько нот одновременно. Так что G это shift + g, ^] это ctrl +] и так далее. Это займет больше времени, чем одноклавишные привязки.
Ральф Джайлс
Вы также можете использовать =aBкоторый не будет перемещать курсор вообще.
Амин
7
На скандинавской клавиатуре [[=]]требуется 5 аккордов :(
k4kuz0
29

Мастер всех команд

gg=G

Это отступы всего файла!

Ниже приведены некоторые простые и элегантные команды, используемые для быстрого отступа строк в Vim или gVim.

Чтобы сделать отступ для всех строк под текущей строкой

=G

Для отступа текущей строки

==

Для отступа nстрок ниже текущей строки

n==

Например, чтобы сделать отступ на 4 строки ниже текущей

4==

Чтобы сделать отступ для блока кода, перейдите к одной из фигурных скобок и используйте команду

=%
Сагар Джайн
источник
17

Вы можете использовать аккуратное приложение / утилиту для отступа файлов HTML и XML, и это отлично работает при отступе этих файлов.

Префтификация файла XML

:!tidy -mi -xml %

Украсьте HTML-файл

:!tidy -mi -html %
Нага Киран
источник
16

нажмите escape и затем быстро введите следующие комбинации:

gg=G
tokhi
источник
28
Я медленно печатал, ты не поверишь, что случилось потом.
k0pernikus
Я просто дал ответ и комментарий, потому что это было бесценно! lol @ k0pernikus
очки
12

1G=G, Это должно сделать отступ для всех строк в файле. 1Gзаймет первую строку, =запустит авто-отступ, а финал G- последнюю строку в файле.

Amjith
источник
Или даже1gg=G
Biggybi
1G = G исправил это для меня. Потрясающие!
Натус Дрю
8

:set pasteтвой друг, я использую замазку и в итоге копирую код между окнами. До того, как я был включен :set paste:set nopaste) копировать / вставлять, мне было то же самое.

Elsporko
источник
1
Да, я также использую шпаклевку. : набор пасты потрясающий
mmcdole
7

В Vim используйте :insert. Это сохранит все ваше форматирование и не сделает автоиндентирование. Для получения дополнительной информации help :insert.

Эрик Джонсон
источник
7

если вы не хотите использовать :set paste, щелкните средней кнопкой мыши set nopaste, вы также можете вставить содержимое буфера обмена:

"*p
"+p

Таким образом, вам не нужно выходить из нормального режима. если вам нужно вставить +или *зависит от того, как вы выбрали текст, см :help quoteplus.

0x89
источник
4

vim-autoformat форматирует ваши исходные файлы, используя внешние программы, специфичные для вашего языка, например, гем "rbeautify" для файлов Ruby, пакет "js-beautify" npm для JavaScript.

Войтек Крушевский
источник
3

Для сложных файлов C ++ vim не всегда получает правильное форматирование при использовании команды =filter vim . Поэтому для таких ситуаций лучше использовать внешний форматер C ++, такой как astyle (или uncrustify ), например:

:%!astyle

Функция Vim '=' по умолчанию использует свой внутренний форматер (который не всегда правильно понимает), но можно также настроить его на использование внешнего форматера, такого как astyle, установив его соответствующим образом, как обсуждалось в этом вопросе .

Пирз
источник
1

Вы можете создать отображение, чтобы сделать это для вас.

Этот файл автоматически сделает отступ для всего файла и все еще будет держать курсор в том положении, в котором вы находитесь:

nmap <leader>ai mzgg=G`z
Серхио Д. Маркес
источник
0

Для редактора vi используйте: insert. Это сохранит все ваше форматирование и не вставит авто-отступ. Как только вы закончите, нажмите escape для просмотра реального отформатированного файла, в противном случае вы увидите некоторые символы мусора. как ^ я например:

public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert"); 
}
ps2090
источник
0

Просто перейдите в визуальный режим в vim и выберите строки сверху вниз после выбора, просто нажмите =, все выбранные строки будут с отступом.

Рамананд Ядав
источник
Я бы избежал этого. Визуальный режим предназначен для случаев, когда вы не уверены в своих движениях, если вы знаете, как запечатлеть набор символов, тогда нет никакого смысла в дополнительном шаге перехода в визуальный режим. Почему, ggvG=когда ты можешь gg=G. Какой смысл делать движение видимым? Это относится ко всем действиям, которые предпринимаются.
Алекс