Skip to content

Instantly share code, notes, and snippets.

@chemzqm
Last active December 11, 2015 04:01
Show Gist options
  • Save chemzqm/e1152ab1f9bca7662a83 to your computer and use it in GitHub Desktop.
Save chemzqm/e1152ab1f9bca7662a83 to your computer and use it in GitHub Desktop.
function! PreviewModule(name, ...)
if empty(a:name) | echo "need module name" | return | endif
if empty(a:000)
let res = system("findmodule ".a:name)
let file = res
else
let type = a:000[0]
let res = system("moduledir ".a:name)
if type ==? 'doc'
let file = res . "/readme.md"
if !filereadable(file)
let file = res . "/Readme.md"
if !filereadable(file)
let file = res . "/README.md"
if !filereadable(file)
echo 'readme file not found'
endif
endif
endif
elseif type ==? 'json'
let file = res . "/package.json"
endif
endif
if v:shell_error | echo res | return | endif
let h = &previewheight
let &previewheight = 40
execute "pedit " . file
let &previewheight = h
execute "normal! \<c-w>k"
endfunction
function! ListModules(A, L, p)
let res = system("dependencies")
if v:shell_error | echo res | return | endif
return res
endfunction
" E module 预览模块主文件
command! -nargs=1 -complete=custom,ListModules E :call PreviewModule('<args>')
" J module 预览模块 package.json
command! -nargs=1 -complete=custom,ListModules J :call PreviewModule('<args>', 'json')
" H module 查看模块帮助
command! -nargs=1 -complete=custom,ListModules H :call PreviewModule('<args>', 'doc')
#!/usr/bin/env node
# 列出所有 dependencies 模块,用于自动补全,支持 browser 属性
var fs = require('fs')
var path = require('path')
var moduleName = process.argv[2]
var dir = process.cwd()
function exit(msg, code) {
console.error(msg)
process.exit(1)
}
function locate(folder, name) {
if(folder === '/') return ''
var f= path.join(folder, name)
if (fs.existsSync(f)) {
return f
} else {
return locate(path.resolve(folder, '..'), name)
}
}
var f = locate(dir, 'package.json')
if (!f) exit('package.json not found in ' + dir)
var o = require(f)
if (o.browser && o.browser[moduleName]) {
var str = o.browser[moduleName]
if (typeof str === 'string') {
moduleName = str
}
}
var deps = Object.keys(o.dependencies)
var browsers = Object.keys(o.browser).map(function (key) {
return o.browser[key]
})
var deps = deps.filter(function (n) {
return browsers.indexOf(n) === -1
})
deps = deps.concat(Object.keys(o.browser))
deps.forEach(function (dep) {
console.log(dep)
})
#!/usr/bin/env node
# 根据模块名找到它的根目录
# 可执行文件,请确保放到 path 下面,并添加可执行权限
var fs = require('fs')
var path = require('path')
var moduleName = process.argv[2]
var dir = process.cwd()
function exit(msg, code) {
console.error(msg)
process.exit(1)
}
function locate(folder, name) {
if(folder === '/') return ''
var f= path.join(folder, name)
if (fs.existsSync(f)) {
return f
} else {
return locate(path.resolve(folder, '..'), name)
}
}
var f = locate(dir, 'package.json')
if (!f) exit('package.json not found in ' + dir)
var o = require(f)
if (o.browser && o.browser[moduleName]) {
var str = o.browser[moduleName]
if (typeof str === 'string') {
moduleName = str
}
}
var folder = path.resolve(path.dirname(f), 'node_modules', moduleName)
if (!fs.existsSync(folder)) exit('module folder for ' + moduleName + ' not found')
try {
o = require(path.join(folder, 'package.json'))
} catch(e) {
exit('package.json not found under ' + folder)
}
o.main = o.main || 'index.js'
if (path.extname(o.main) === '') o.main = o.main + '.js'
var fullpath = path.join(folder, o.main)
process.stdout.write(fullpath)
#! /usr/local/bin/fish
set module $argv[1]
if test -z $module
echo 'need module name' > /dev/stderr ^&1
exit 1
end
set dir $PWD
while true
if test $dir = '/'
echo 'can\'t find package.json' > /dev/stderr ^&1
exit 1
end
if test -f $dir/package.json
break
end
set dir (dirname $dir)
end
# parse package.json
set name (json -f $dir/package.json browser | json $module)
if test (count $name) -ne 0
set module $name
end
set folder $dir/node_modules/$module
if not test -d $folder
echo "$module not found" > /dev/stderr ^&1
exit 1
end
if not test -f $folder/package.json
echo "package.json of $module not found" > /dev/stderr ^&1
exit 1
end
echo -n $folder
@chemzqm
Copy link
Author

chemzqm commented Dec 11, 2015

竟然有一段是fish脚本,如果不想装 fish,用别的方式实现也很容易

@chemzqm
Copy link
Author

chemzqm commented Dec 11, 2015

之所以没有纯粹用 vim 写,一个原因是 vimscript 不熟练,另外独立的脚本也可在 shell 下使用

@alsotang
Copy link

嗯嗯。没有人会用 vimscript 写的,那个渣渣语言。

不过用 js 写也是蛋疼,js 的库太基础,很多基础点的需求都需要自己写函数。

感觉用 python 写是兼容性最好而且最方便的,也是业界最认可的方式。

@alsotang
Copy link

补充一下:python 的很多自带库函数,拿来就能用,js 写小脚本特别不方便。你有这种感觉吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment