Як виправити відступ цілого файлу у Vi?


625

У Vim, яка команда виправити відступ усіх рядків?

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



8
Профілактика краще, ніж лікування. В такому дусі приходить цей коментар. Зробіть ": встановити вставку" перед тим, як перейти в режим вставки та вставити код з віддаленого терміналу.
Chthonic Project

Відповіді:


1215

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


39
Я ніколи не зможу виучити свій дорогоцінний 1G =) Одним із моїх улюблених є =%, що стоїть на відкривній дужці. Він фіксує відступи всього блоку.
ПЕЗ

2
: 0 <повернення> не так вже й погано, але gg - це приємно. (так, я дізнався перше редагування)
Ерік Олсон

8
Чи можу я відступити весь файл, не виходячи з поточного рядка?
Фабіо Перес

86
@ Фабіо: ''(дві одиничні цитати) повертає вас туди, де ви були, gg=G''слід відступити, а потім повернутися.
Nemo157

@ArchimedesTrajano Mac OS Stock Vim дуже старий, рекомендую версію HomeBrew; це набагато новіше. У мене були деякі прикри проблеми з вимом Mac. Крім того, я чув, що вам не слід возитися із вбудованим, тому не намагайтеся оновити його самостійно, якщо ви не дуже обережні.
AlexMA

126

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

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


5
Ви можете встановити equalprgопцію у ftplugin використовувати зовнішній фільтр для =відступу, а не спеціальне прив'язування клавіш.
Джош Лі

Є також варіант введення клавіатури, наприклад,. : встановити pt \ p для перемикання між режимами
michael

Примітка: у vimconfig grml клавіша pastetoggle відображається у F11
Thomas

Я використовую formatpgmз охайним та стильним, а потім 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
Вибачте, що пожвавите це, але що ви мали на увазі під акордами? Коорди?
Джон П

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

28
Я набирав повільно, ви не повірите, що сталося далі.
k0pernikus

Я просто дав відповідь та коментар, що це було безцінно! lol @ k0pernikus
gglasses

12

1G=G. Це має відступити всі рядки у файлі. 1Gвізьме вас за перший рядок, =запустить автоматичне відступ, а фінал Gвізьме вам останній рядок у файлі.


Або навіть1gg=G
Biggybi

1G = G зафіксував це для мене. Дивовижно!
Natus Drew

8

:set pasteя твій друг, я використовую шпаклівку і в кінцевому підсумку копіюю код між вікнами. До того, як мене ввімкнули :set paste:set nopaste) копіювати / вставляти, мені саме тому підходили.


1
Так, я також використовую шпаклівку. : встановити пасту приголомшливо
mmcdole

7

У Vim використовуйте :insert. Це дозволить зберегти все ваше форматування і не робити автопомирення. Для отримання додаткової інформації help :insert.


7

якщо ви не хочете користуватися :set pasteсереднім клацанням,, set nopasteви також можете вставити вміст буфера обміну:

"*p
"+p

Таким чином, вам не доведеться залишати звичайний режим. якщо вам потрібно вставити +або *залежить від того, як ви вибрали текст, див :help quoteplus.


4

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


3

Для складних файлів C ++ vim не завжди отримує правильне форматування при використанні команди =фільтра vim . Тож для таких ситуацій краще використовувати зовнішній формат C ++, наприклад astyle (або unrustfy ), наприклад:

:%!astyle

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



1

Ви можете створити відображення для цього.

Цей файл автоматично відрізає весь файл і зберігатиме курсор у такому положенні:

nmap <leader>ai mzgg=G`z

0

Для редактора vi використовуйте: вставте. Це дозволить зберегти все форматування і не вставити автоматичне відступ. Після завершення натисніть клавішу Escape, щоб переглянути фактично відформатований файл, інакше ви побачите деякі символи сміття. як я, наприклад:

public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert"); 
}

0

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


Я б цього уникав. Візуальний режим - це коли ви не впевнені у своїх рухах, якщо ви знаєте, як захопити набір символів, то немає зайвого кроку переходити у візуальний режим. Чому ggvG=коли можна gg=G. Який сенс робив рух видимим? Це стосується всіх дій, які здійснюють рухи.
alextes
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.