Авто отступ / формат кода для Vim?


35

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

Есть ли способы автоматического форматирования кода (HTML, CSS, PHP), чтобы он был правильно отступ?

Если так, как вы устанавливаете это в Vim? Я не очень разбираюсь в плагинах. Я попытался просмотреть эту ветку, и это меня смутило больше: Как изменить поведение авто-отступа vim?


Не могли бы вы уточнить, на каком языке вы пытаетесь сделать отступ? Я ожидаю, что, если он уже поддерживается vim, он должен автоматически вставлять отступ без дополнительных усилий. Если нет, вы сможете получить плагин.
Эдд Стил

в идеале HTML / CSS и PHP
Chrisjlee

Ответы:


54

Чтобы сделать отступ для всего файла автоматически:

gg
=G

Разъяснение:

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

2
Не могли бы вы сломать это? Что такое г, как правило, само по себе? и = G?
Chrisjlee

@ Крис, см. Правку
снимает

1
Хороший намек, я никогда этого не знал. Тем не менее, он делает мусор с Bash.
Sparhawk

Как выполнить gg=Gиз оболочки без открытия файла?
WM

@takeshin Можете ли вы объяснить это намного дальше, нужно ли вводить его в файл или запускать его в терминале
Касун Сиямбалапития,

14

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

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

Я надеюсь, что это даст вам хорошее начало.


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

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

2
set tw = 4 устанавливает для TEXTWIDTH значение 4
Штеффен Роллер

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

В Bash я делаю это:

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

это исключает комментарии и переопределяет скрипт "bash way". это не будет работать, если скрипт содержит HEREDOCS, но если вы сделаете это:

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

он будет работать с любым скриптом, но весь скрипт будет иметь отступ в 4 пробела. не стесняйтесь изменять, но укажите свое имя в своем сценарии и опубликуйте его! : D


Я полагаю, что это может упускать суть вопроса; Я полагаю, что вместо отступа набора строк, OP хотел автоматически делать отступы в VIM для разных языков. Кроме того, вы можете достичь этого чуть более напрямую, sedесли пожелаете: cat script_to_be_reindented.sh | sed 's#^# #g'(э-э, ну да, SO markdown заменяет пробелы табуляцией, но вы получаете точку)
eacousineau

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.