Как узнать, какие правила синтаксиса и отступов использует Vim для конкретной строки?

Хорошо это или плохо, но 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 ответ

Чтобы узнать используемый синтаксис, вы хотите узнать значение переменной 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 в справке для получения дополнительной информации.

Другие вопросы по тегам