2012-01-17 2 views
33

Иногда я пишу скрипты без расширения имени файла. Например:Как заставить Vim определить тип файла из строки shebang?

#!/usr/bin/env node 

console.log('hello world!'); 

Я надеюсь, что Вим может обнаружить тип файл из хижины линии (например, #!/usr/bin/env node является javascript). Что я должен положить в filetype.vim?

+6

Почему бы не добавить модель последней или последней строки '# vim: ft = javascript', так как Vim уже проверяет модель, а не изобретает колесо? –

+13

@SwaroopCH Почему бы не анализировать информацию из строки, уже находящейся в файле, который имеет необходимую информацию, как и любой [настоящий редактор] (http://www.gnu.org/software/emacs/), который выполнялся годами, а не повторяя его избыточно в специальном редакторе, который объединяет файл для пользователей других редакторов? */me dons flame suit * –

ответ

27

Следуя инструкции, перечисленных в :help new-filetype-scripts, создать scripts.vim файл в директории пользователя во время выполнения (~/.vim на Unix-подобные системы), и написать следующий сценарий в нем.

if did_filetype() 
    finish 
endif 
if getline(1) =~# '^#!.*/bin/env\s\+node\>' 
    setfiletype javascript 
endif 
+3

См. также весь раздел ': help new-filetype', который стоит прочитать. –

+0

Почему не сбрасывается прямая косая черта? /bin/env –

+1

@ LaiYu-Hsuan: Символ прямой косой черты не является особым символом в соответствии с синтаксисом регулярных выражений Vim. Конечно, это может быть экранировано как '\ /', но это необходимо только для шаблонов, которые используются в команде прямого поиска ('/') или в команде подстановки (': s'), когда разделители шаблонов являются слэшами. –

10

создать этот файл ~/.vim/ftdetect/node.vim с этим содержанием

fun! s:DetectNode() 
    if getline(1) == '#!/usr/bin/env node' 
     set ft=javascript 
    endif 
endfun 

autocmd BufNewFile,BufRead * call s:DetectNode() 
+5

на самом деле, «ft = javascript» гораздо с большей вероятностью будет работать. У большинства людей есть «javascript», и у них нет «узла». –

0

Немного опоздали на вечеринку, но Node.vim ручек обнаружения таких файлов JavaScript для вас. А потом некоторые. :-)

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

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