Last active
December 11, 2015 04:01
-
-
Save chemzqm/e1152ab1f9bca7662a83 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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') | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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) | |
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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 |
之所以没有纯粹用 vim 写,一个原因是 vimscript 不熟练,另外独立的脚本也可在 shell 下使用
嗯嗯。没有人会用 vimscript 写的,那个渣渣语言。
不过用 js 写也是蛋疼,js 的库太基础,很多基础点的需求都需要自己写函数。
感觉用 python 写是兼容性最好而且最方便的,也是业界最认可的方式。
补充一下:python 的很多自带库函数,拿来就能用,js 写小脚本特别不方便。你有这种感觉吗?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
竟然有一段是fish脚本,如果不想装 fish,用别的方式实现也很容易