LINUX.ORG.RU

Форматирование в vim

 


1

2

Всем привет.

В vim-е замечательная функция автоформатирования текста. К примеру, есть такой кусок конфига nginx:

server {
listen 127.0.0.1;
server_name localhost;
root /var/www/localhost;
# Lets encrypt
location ^~ /.well-known/acme-challenge/ {
alias /usr/local/www/acme/.well-known/acme-challenge/;
}
location / { 
return 301 https://localhost;
}
}
Нажимаем gg=G в командном режиме текст превращается в:
server {
        listen 127.0.0.1;
        server_name localhost;
        root /var/www/localhost;
# Lets encrypt
        location ^~ /.well-known/acme-challenge/ {
                alias /usr/local/www/acme/.well-known/acme-challenge/;
        }
        location / {
                return 301 https://localhost;
        }
}

Все отлично... Но только к строкам с комментариями не применяются отступы. Можно ли как-нить сделать чтоб после форматирования текст выглядел так?:

server {
        listen 127.0.0.1;
        server_name localhost;
        root /var/www/localhost;
        # Lets encrypt
        location ^~ /.well-known/acme-challenge/ {
                alias /usr/local/www/acme/.well-known/acme-challenge/;
        }
        location / {
                return 301 https://localhost;
        }
}
Заранее благодарен.

P.S: sudo cast LINUX-ORG-RU

★★★★★

А хрен его знает, я ручками выравниваю. В инете куча костылей каких-то, надо явно /indent/nginx.vim (или как там) прописать/скачать нормальный. Как выход финтом сначала на файле сделать %s/#/ #/g тогда комент уедет куда надо. Но повторюсь янинаю :(

Во, хехе https://github.com/nginx/nginx/blob/master/contrib/vim/indent/nginx.vim

Типа оно и так работает по их мнению, nginx форматируется сишным индентом в котором # нельзя/ненужно перемещать. Устанавливай плагин для FileType nginx или пиши indent сам. Готовые примеры можно глянуть в /usr/share/vim/vimfiles/indent/ но я сам выравнивалки не писал ибо с regex общаюсь на вы =)

Сорямба, досвиданья.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Как выход финтом сначала на файле сделать %s/#/ #/g тогда комент уедет куда надо.

Работает этот лайфак, но хотелось бы универтальное решение которое можно положить в ~/.vimrc и забыть про эту проблему.

Во, хехе

Не пашет.

Устанавливай плагин для FileType nginx

В ~/.vimrc есть filetype plugin indent on, # vim:syntax=nginx присутствует в конфиге, синтакс корректно подсвечивается. Вродь как все условия соблюдены...

я сам выравнивалки не писал ибо с regex общаюсь на вы =)

А я написал макрос который убивает лишние пробелы, табы и переносы строк, делает правильное форматирование. Но потом понял что уже есть готовое решение... если бы не одно НО...

iron ★★★★★
() автор топика
Ответ на: комментарий от leave

O! То что нужно.

Оказывается при открытии .conf vim автоматом выставляет filetype=conf. При :set filetype=nginx или добавлении filetype=nginx в modeline форматирование работает как нужно.

Спасибо!

iron ★★★★★
() автор топика

Если кому-то вдруг понадобится - написал команду которая делает конфиг более читабельным.

В ~/.vimrc добавить:

command! NgxFmt :set filetype=nginx | %s/^\s*\n//ge | %s/\v^(.*\S+)\s+$/\1/ge | %s/^}$/}\r/ge | normal gg=G


Открываем любой nginx конфиг и выполняем команду:
:NgxFmt

Что она делает:

  • удаляет все пустые строки вместе с символами табуляции.
  • во всей строках удаляет пробелы в конце строки
  • после каждой закрывающей фигуркой скобкой блока server вставляет пустую строку
  • выполняет автоформатирование с отступами и прочей лабудой
iron ★★★★★
() автор топика