Подтвердить что ты не робот

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

У меня есть некоторые разделы в моем .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 каким-то образом быть адресован группе действий? (это простой пример, я действительно прошу о более сложных ситуациях.)

4b9b3361

Ответ 1

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

autocmd Filetype ruby call SetRubyOptions()
function SetRubyOptions()
    setlocal ts=2
    ...
endfunction

Ответ 2

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

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

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

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

Ответ 3

ftplugins - это аккуратный ответ на ваш вопрос.

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

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

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