Хорошо это или плохо, но PHP-код часто включает в себя и HTML, и Javascript. Заставить Vim правильно сделать отступ, может быть сложно.

Мой .vimrc указывает, что табуляция всегда должна быть с двумя пробелами:

set tabstop=2
set softtabstop=2
set shiftwidth=2

Этот файл отступа отлично справляется с отступом смешанного PHP и HTML и использует 2 пробела для обоих, но по какой-то причине он отступает от встроенного Javascript с 4 пробелами. Фрагмент кода ниже автоматически вставляется, как показано на рисунке.

<?PHP
  if (false) {
    $foo = 'foo';
  }
?>
<html>
  <head>
    <script type="text/javascript">
      function(){
          if (false) {

              // Four spaces!?
              var foo = 'foo';
          }
      }
    </script>
  </head>
</html>

Если я создаю отдельный файл javascript, он выравнивается, как и должно быть, вот так:

if (false) {
  var foo = 'foo';
}

Я не уверен, почему Vim вставляет Javascript в первый пример так, как он это делает. Есть ли способ спросить Vim "какой синтаксис или отступ вы используете в этой конкретной строке?"

1 ответ1

2

Чтобы узнать используемый синтаксис, вы хотите узнать значение переменной b:current_syntax. Введите следующий пример команда

:echo b:current_syntax

b:current_syntax говорит, какой синтаксис vim загружен для файла. Если вы установите синтаксис вручную, например, с помощью команды

:ownsyntax cpp

который устанавливает синтаксис на синтаксис c++, тогда вы хотите узнать значение w:current_syntax. w:current_syntax не существует, пока вы его не установите, и вы не можете изменить b:current_syntax загруженного файла.

Посмотрите на запись current_syntax в справке для получения дополнительной информации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .