2013-04-24 1 views
1

Я хочу, чтобы Vim менял filetype, когда я печатаю строку shebang (например, #!/bin/bash) в первой строке нового буфера.Vim change filetype после ввода строки shebang

В настоящее время я использую плагин vim-shebang для изменения типа файла, но он работает только при открытии нового буфера.

Уточнение: Я заинтересован в достижении желаемого результата путем сопоставления <CR> в режиме вставки. Я хочу, когда я набираю #!/bin/bash<CR> в первой строке буфера, чтобы автоматически выполнить :filetype detect и вернуться к редактированию.

ответ

1

Я рекомендую read the (always great) documentation of Vim (который я цитирую, приведенную ниже):

:help new-filetype-scripts 

Это может помочь вам.

Если ваш тип файла может быть обнаружен только путем проверки содержимого файла .

  1. Создайте свой пользовательский каталог времени выполнения. Обычно вы используете первый пункт опции 'runtimepath'. Пример для Unix: :!mkdir ~/.vim

  2. Создайте файл сценария vim для этого. Пример:

    if did_filetype() " filetype already set.. 
        finish  " ..don't do these checks 
    endif 
    if getline(1) =~ '^#!.*\<mine\>' 
        setfiletype mine 
    elseif getline(1) =~? '\<drawing\>' 
        setfiletype drawing 
    endif 
    

    См $VIMRUNTIME/scripts.vim другие примеры.

    Пишите этот файл как "scripts.vim" в своем рабочем каталоге пользователя. Для Например, для Unix:

    :w ~/.vim/scripts.vim 
    

Update (после редактирования оригинального вопроса): Я бы рекомендовал против картографирования , но вы можете сделать это с

:inoremap <CR> YOUR_SPECIAL_FUNCTION_WHICH_DETECS_THE_CURRENT_LINE_AND_RUNS_FILETYPE_DETECT 

выше фрагмент кода (if getline(1) ... достаточно, чтобы вы начали. Мы не writethecodeformeforfree.com с ommunity.

5

Вы можете использовать

:filetype detect 

повторно запустить обнаружение типа файла после того, как вы написали притон линию.

Это может быть автоматизировано с помощью :autocmd, например. на BufWritePost, когда &filetype по-прежнему пуст.

 Смежные вопросы

  • Нет связанных вопросов^_^