From 212dcd0bf753f08c0127a26a71b673c734b45c02 Mon Sep 17 00:00:00 2001 From: Yaroslav Date: Thu, 5 Sep 2019 19:35:38 +0300 Subject: init commit, extracted vim config from i3rice --- .vim/plugin/node.vim | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .vim/plugin/node.vim (limited to '.vim/plugin/node.vim') diff --git a/.vim/plugin/node.vim b/.vim/plugin/node.vim new file mode 100644 index 0000000..a541292 --- /dev/null +++ b/.vim/plugin/node.vim @@ -0,0 +1,47 @@ +if exists("g:loaded_node") || &cp || v:version < 700 | finish | endif +let g:loaded_node = 1 + +let s:filetypes = ["javascript", "json", "jsx"] +if exists("g:node_filetypes") | let s:filetypes = g:node_filetypes | endif + +function! s:detect(dir) + if exists("b:node_root") | return | endif + let dir = a:dir + + while 1 + let is_node = 0 + let is_node = is_node || filereadable(dir . "/package.json") + let is_node = is_node || isdirectory(dir . "/node_modules") + if is_node | return node#initialize(dir) | endif + + let parent = fnamemodify(dir, ":h") + if parent == dir | return | endif + let dir = parent + endwhile +endfunction + +function! s:permutate(ft) + " Don't know right now how to detect javascript.jsx and other permutations + " without precomputing them in advance. Please let me know if you do. + return [a:ft, a:ft . ".*", "*." . a:ft, "*." . a:ft . ".*"] +endfunction + +function! s:flatten(list) + let values = [] + for value in a:list + if type(value) == type([]) | call extend(values, value) + else | add(values, value) + endif + endfor + return values +endfunction + +augroup Node + au! + au VimEnter * if empty(expand("")) | call s:detect(getcwd()) | endif + au BufRead,BufNewFile * call s:detect(expand(":p")) + + let s:filetype_patterns = s:flatten(map(s:filetypes, "permutate(v:val)")) + let s:filetype_patterns_joined = join(s:filetype_patterns, ",") + execute "au FileType " s:filetype_patterns_joined " call node#javascript()" +augroup end -- cgit v1.2.3