Автоматически устанавливать несколько типов файлов в `filetype`, если файл имеет несколько расширений - PullRequest
5 голосов
/ 07 декабря 2011

Я часто разрабатываю на Ruby on Rails.С недавним включением Tilt в RoR 3 у нас есть расширения файлов, такие как .scss.erb.Как я могу сделать filetype = scss.erb в этом случае автоматически, и то же самое для каждого файла, который имеет несколько расширений?

Редактировать: В этом случае должно быть scss.eruby, так как расширение erb по умолчанию равно eruby filetype.

Редактировать: Если неясно, я ищу способ сделать это динамически для всех файлов с несколькими расширениями.Например, файл foo.js.html должен иметь тип файла js.html.

Повторное редактирование: в ответе принца Гуляша не указан тип файла по умолчанию для определенного расширения.

1 Ответ

16 голосов
/ 07 декабря 2011

В вашем vimrc:

autocmd BufRead,BufNewFile *.scss.erb setlocal filetype=scss.eruby

(см. :help ftdetect, раздел 2).

EDIT

Чтобы установить тип файла dyanamically для нескольких расширений, мне кажется, это работает:

autocmd BufRead,BufNewFile *.*.*
    \ sil exe "setlocal filetype=" . substitute(expand("%"),"^[^.]*\.","",1)

Команда substitute создает filtype, просто удаляя весь текст из имени файла перед первым .. Там может быть более изощренный способ ...

ИЗМЕНИТЬ СНОВА

Вот еще одна попытка. MultiExtensionFiletype() - это функция, которая использует тип файла по умолчанию для последней части расширения и ставит перед ним префикс первой части расширения (то есть части, расположенной между точками).

function MultiExtensionFiletype()
    let ft_default=&filetype
    let ft_prefix=substitute(matchstr(expand('%'),'\..\+\.'),'\.','','g')
    sil exe "set filetype=" . ft_prefix  . "." . ft_default
endfunction

Функция должна вызываться для события BufReadPost, поэтому начальный тип файла устанавливается путем игнорирования нескольких расширений.

autocmd BufReadPost *.*.* call MultiExtensionFiletype()

Надеюсь, этот ответ сходится к чему-то полезному!

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