我最近放弃了鼠标驱动的,特定于平台的GUI编辑器,并完全致力于vim.迄今为止的体验非常棒,但是当涉及到Javascript时我就陷入了困境.
广受欢迎的taglist实用程序(使用Exuberant Ctags)除了Javascript外,一切都很棒.使用该语言过于自由的形式和结构,taglist只能在我打开它时获取一些功能 - 只有以下格式定义的那些:
function FUNCNAME (arg1, arg2) {
Run Code Online (Sandbox Code Playgroud)
但没有定义的变量或函数对象:
var myFunc = function (arg1, arg2) {
Run Code Online (Sandbox Code Playgroud)
所以我google了一下,找到了ctags的以下定义集,我把它放在〜/ .ctags文件中:
--langdef=js
--langmap=js:.js
--regex-js=/([A-Za-z0-9._$]+)[ \t]*[:=][ \t]*\{/\1/,object/
--regex-js=/([A-Za-z0-9._$()]+)[ \t]*[:=][ \t]*function[ \t]*\(/\1/,function/
--regex-js=/function[ \t]+([A-Za-z0-9._$]+)[ \t]*([^])])/\1/,function/
--regex-js=/([A-Za-z0-9._$]+)[ \t]*[:=][ \t]*\[/\1/,array/
--regex-js=/([^= ]+)[ \t]*=[ \t]*[^""]'[^'']*/\1/,string/
--regex-js=/([^= ]+)[ \t]*=[ \t]*[^'']"[^""]*/\1/,string/
Run Code Online (Sandbox Code Playgroud)
之后,从命令行运行ctags非常棒.它找到了我需要它找到的每个功能和对象.
问题是taglist.vim插件没有看到这些新结果.当我在vim中打开我的javascript文件并点击:TlistToggle时,我得到了与之前相同的少量功能.我点击'u'更新列表,没有任何效果.
深入taglist.vim,我发现了这个:
" java language
let s:tlist_def_java_settings = 'java;p:package;c:class;i:interface;' .
\ 'f:field;m:method'
" javascript language
let s:tlist_def_javascript_settings = 'javascript;f:function'
Run Code Online (Sandbox Code Playgroud)
...这意味着我们只是从jta的ctags实用程序中查看一种特定类型的输出.不幸的是,我对taglist或vim一般都不够精明(尚未)发现我可以做出哪些改变以使所有那些精彩的ctags命令行结果显示在vim中.
帮助赞赏!
我正在通过命令行PHP脚本运行MySQL查询(使用mysqlnd驱动程序上的PDO准备好的查询).这是一个简单的查询,只有一个左连接,每行返回100行和7个小列.
当我在MySQL CLI中运行此查询时(在运行相关PHP脚本的同一台机器上),它需要0.10秒 - 即使抛出了SQL_NO_CACHE标志.
当我运行此查询时,通过PDO准备它需要超过9秒.这是执行()只 -这还不包括需要为获取呼叫的时间.
我的查询示例:
SELECT HEX(al.uuid) hexUUID, al.created_on,
IFNULL(al.state, 'ON') actionType, pp.publishers_id publisher_id,
pp.products_id product_id, al.action_id, al.last_updated
FROM ActionAPI.actionLists al
LEFT JOIN ActionAPI.publishers_products pp
ON al.publisher_product_id = pp.id
WHERE (al.test IS NULL OR al.test = 0)
AND (al.created_on >= :since OR al.last_updated >= :since)
ORDER BY created_on ASC
LIMIT :skip, 100;
Run Code Online (Sandbox Code Playgroud)
我不相信查询是错误的,考虑到我尝试过的每个原生MySQL客户端都在近乎即时运行它,但这里是解雇的EXPLAIN:
+----+-------------+-------+--------+-------------------------+------------+---------+-----------------------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-------------------------+------------+---------+-----------------------------------+------+-------------+ …Run Code Online (Sandbox Code Playgroud) 我已经遇到过这种情况很多次了,但仍然没有找到答案.我正在开始一个新的Node.js项目,这个项目将依赖于其他一些库.为了论证,让我们说一些纯粹的JS库可以在新项目中作为git子模块添加,但是有些需要额外工作的部分(例如npm安装的系统依赖项,或者必须编译的C库) ).
什么是启动此项目并将其添加到git的最佳方式,具有以下两个要求:
有没有想过最好的方法呢?这似乎是一个简单,基本的东西,但我找不到我想要做的一个例子.
编辑:语法
我有一个PHP类存储数据库查询结果,但也包含一个PDO对象,以便可以动态更新/重新插入/等结果.一个临时的ORM,如果你愿意的话.
问题是,我需要序列化这个类,但PDO的实例无法序列化.我很好; 当对象被序列化时,我不需要PDO实例.
有没有办法在类中标记变量以排除序列化,就像有其他语言一样?我知道在我想要序列化类之前我可以手动取消设置()PDO变量,但是使用代码的当前结构,这将是一个噩梦.
我在这里保存的优雅是一个可以被覆盖的__serialize()方法,但它不会出现类似的东西.
IntelliJ IDEA 13通过Node.js插件为Mocha测试提供了非常出色的支持:https://www.jetbrains.com/idea/webhelp/running-mocha-unit-tests.html
问题是,当我在本地机器上编辑代码时,我有一个VM(流浪者),我在其中运行并测试代码,因此它尽可能像生产一样.
每当我从IntelliJ中调用"Run"时,我写了一个小的bash脚本来在这个VM上远程运行我的测试,并且结果在控制台中弹出得足够好,但是我喜欢使用Mocha时出现的优秀界面调用测试运行器.
有任何想法吗?
我有一个日志类,需要定义各种便利函数,例如error、warn、info等,它们都执行相同的操作:调用函数log及其严重性和要记录的数据。
这很冗长并且浪费知识库:
class Logger {
error(...args: any[]): void {
this.log('error', ...args)
}
warn(...args: any[]): void {
this.log('warn', ...args)
}
// ...and so on
}
Run Code Online (Sandbox Code Playgroud)
我目前有所有严重性的枚举,以及所有严重性的字符串的联合:
enum severityLevels {
error,
warn,
info
}
type severities = keyof typeof severityLevels
Run Code Online (Sandbox Code Playgroud)
我想做的是以编程方式在记录器类的构造函数中为每个严重级别创建函数(Object.keys(severityLevels).forEach(...)在普通 JS 中非常简单),但是我不知道如何让 TypeScript 允许这种情况发生。如果我用所有严重性函数定义创建一个接口,我就做不到implements(这些函数尚不存在)。如果我将它们设为可选,那么调用这些日志函数(“可能不存在”)会变得混乱。
有任何想法吗?