Несколько автокоманд в vim - PullRequest
       11

Несколько автокоманд в vim

52 голосов
/ 12 сентября 2009

У меня есть несколько разделов в моем .vimrc, которые выглядят так:

autocmd Filetype ruby setlocal ts=2
autocmd Filetype ruby setlocal sts=2
autocmd Filetype ruby setlocal sw=2

теперь, кажется, я могу преобразовать их в это:

autocmd Filetype ruby setlocal ts=2 sts=2 sw=2

но вот мой вопрос: есть ли vim способ создать такую ​​структуру?

<something mentioning Filetype ruby>
  setlocal ts=2
  setlocal sts=2
  ...
<end>

т.е. можно ли каким-то образом сделать бит autocmd Filetype для обращения к группе действий? (это простой пример, я действительно прошу более сложные ситуации.)

Ответы [ 3 ]

66 голосов
/ 12 сентября 2009

Вы можете вызвать функцию, если вам нравится:

autocmd Filetype ruby call SetRubyOptions()
function SetRubyOptions()
    setlocal ts=2
    ...
endfunction
50 голосов
/ 12 сентября 2009

Вы можете связать большинство команд с помощью |:

au Filetype ruby
            \ setlocal ts=2  |
            \ setlocal sts=2 |
            \ ...

Не уверен, что этот синтаксис лучше или хуже, чем написание функции. Некоторые команды не могут быть связаны таким образом, но вы можете использовать execute, чтобы обойти это; см :h :bar.

Также см. :h line-continuation для объяснения странного синтаксиса с \ в начале строк.

21 голосов
/ 12 сентября 2009

ftplugins - точный ответ на ваш вопрос.

  1. Убедитесь, что у вашего .vimrc есть строка, такая как :filetype plugin on
  2. Определите файл с именем {rtp}/ftplugin/{thefiletype}.vim или {rtp}/ftplugin/{thefiletype}/whatever.vim (подробнее см. :h rtp).
  3. Отредактируйте этот новый файл и вставьте туда свои команды VIM. Вероятно, было бы неплохо использовать команду :setlocal, чтобы гарантировать, что специфичные для типа файла настройки относятся только к этому файлу (например, не делайте все комментарии фиолетовыми для всех типов файлов).

Смотрите примеры в дистрибутиве vim, если вы планируете переопределить настройки по умолчанию; или среди многих ftplugins, которые я написал в противном случае), просто запишите свои :setlocal, :*map <buffer> и т. д. определения.

Он представляет собой еще одну строку для ввода, но, по крайней мере, масштабируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...