Код автоматичного відступу / формату для Vim?


35

Я намагаюся все більше і більше використовувати Vim, коли можу. Один з моїх найбільших захватів між Vim та IDE, як Aptana, - це можливість автоматичного відступу.

Чи існує засіб автоматичного форматування коду (HTML, CSS, PHP), щоб він був правильно з відступом?

Якщо так, як це встановити у vim? Я не дуже розумію плагіни. Я спробував переглянути цю тему, і це мене більше збило з пантелику: Як змінити поведінку автоматичного відступу vim?


Не могли б ви уточнити, якою мовою ви намагаєтесь відступити? Я б очікував, що якщо він підтримується vim, він вже повинен автоматично відступати без додаткових зусиль. Якщо ні, ви маєте змогу отримати плагін.
Edd Steel

в ідеалі Html / css і php
chrisjlee

Відповіді:


54

Для автоматичного відступу всього файлу:

gg
=G

Пояснили:

  • gg - перейти до початку файлу
  • G - перейти до кінця файлу
  • =- відступ

2
Не могли б ви її розбити? Що таке g, як правило, саме по собі? і = G?
chrisjlee

@Chris дивіться правку
1111

1
Гарний натяк, я цього ніколи не знав. Однак він робить сміття з баш.
Sparhawk

Як виконати gg=Gз оболонки, не відкриваючи файл?
WM

@takeshin, будь ласка, поясніть це набагато далі, чи потрібно вводити його у файл чи нам потрібно запустити його в терміналі
Kasun Siyambalapitiya

14

Я не знаю про автоматичне форматування існуючого коду, але якщо ви пишете код і вам потрібен автоматичний відступ:

  • :set autoindent(або :set ai) увімкне автоматичний відступ
  • Ctrl- dскасувати відступ (AKA outdent) вашого коду
  • Вкладка або пробіли для відступу - я особисто використовую вкладку
  • :set tabwidth=4(або :set tw=4) контролюватиме кількість пробілів на вкладці
  • >>Команда рухають поточний рядок. Якщо ви будете префіксувати числом, скажіть, 4>>він буде відступати 4 рядками, починаючи з поточного рядка.
  • Аналогічно <<команда скасує відступ рядка

Я сподіваюся, що це вам добре почало.


7
Для автоматичного відступу наявного коду використовуйте його ={motion}в звичайному режимі - наприклад =G, відступ всього коду з поточного рядка до кінця файлу. ==буде відступати поточний рядок.
Edd Steel

1
також переконайтеся, що плагіни відступів завантажуються (наприклад, з :filetype indent on)
jw013,

2
set tw = 4 встановлює TEXTWIDTH на 4
Steffen Roller

4

Автовідступ *.sh

Просто додайте наступні рядки в ~/.vimrc

filetype indent on
set smartindent
autocmd BufRead,BufWritePre *.sh normal gg=G

Чи стосується це лише редагування за допомогою vim або всіх інструментів редактора?
WM

1
~./vimrcзастосовується лише для редактора vim.
Рахул Патіл

2

Цей плагін полегшує виконання форматування вашого коду. Він інтегрує зовнішні формати та має резервну функцію відступу vim.

https://github.com/Chiel92/vim-autoformat

Також помітьте різницю між форматуванням і відступом. Відступ виправляє лише пробіл перед кожним рядком, а форматування також стосується будь-якої іншої речі, наприклад, пробіл навколо операторів тощо.


2

Створіть / відредагуйте ~/.vimrcфайл та додайте наступний рядок:

set autoindent

2
Це нічого не додає до наявних відповідей ...
Jasonwryan

@jasonwryan Насправді у відповіді Хай Ву згадується, :set autoindentщо дозволяє автоматично відступати лише для поточного файлу. Додавання його у .vimrcфайл дозволяє автоматично відступати автоматично.
Акшат Махешварі

ваш коментар уже згадується у відповіді Рахула, тому подумайте перед публікацією
Індраджет Гур

0

У баші я роблю це:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3

це виключає коментарі та нагадує сценарій "бій шлях". він не буде працювати, якщо сценарій містить HEREDOCS, але якщо ви це зробите:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri|head --lines=-1|tail --lines=+3

він буде працювати з будь-яким сценарієм, але весь сценарій буде відступ 4 пробілами. не соромтеся змінювати, але цитуйте моє ім’я у вашому сценарії та публікуйте його! : D


Я вважаю, що це може бути відсутнім у питанні; замість відступу набору рядків, я вважаю, що ОП хотіла зробити автоматичне відступ у VIM для різних мов. Як осторонь, ви, можливо, зможете досягти цього трохи безпосередньо, sedякщо цього захочете: cat script_to_be_reindented.sh | sed 's#^# #g'(е, ну, так,
розмітка ТА

0

Автоформат / відступ vim працює досить добре. Спочатку введіть цей рядок у своє ~/.vimrc:

filetype plugin indent on

Потім відкрийте файл vim та введіть gg=G

( ggпереміщує курсор до першого рядка. =виконує команду відступу. Gповідомляє команду відступу виконувати звідси до останнього рядка.)

Якщо автоматичний формат виглядає дуже погано, так як кожен рядок залишається з відступом, запустіть :scriptnamesі перевірте, чи немає .../indent/html.vim(чи якою б ви не використовували мову) у списку. Якщо ні, то переконайтеся, що ви ~/.vimrcправильні. Або якщо ви перейшли :filetype plugin indent onз командного рядка vim, вам потрібно буде знову відкрити файл:e

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.