以前各种编辑器都尝试过, webstorm 算是我比较满意的一款,但是 IDE 略显笨重,每次打开都需要点时间,但是优点也很明显,基本上你能想到的功能都有了,而且还更进一步,不过很多功能 sublime +插件+ gui 客户端也能解决,但是 sublime 到现在最不满意的就是侧边栏项目文件管理目录下你不能在一个项目内,项目与项目之间,外部与项目之间靠鼠标拖拽来移动文件,比如有时有个图片在桌面上,我还要找到文件夹然后放进去,而 ide 直接一拖就完事了,可能没找到好方法吧,单纯吐个槽
1
yoa1q7y 2015-09-09 22:53:00 +08:00
多大点事,要啥自行车
|
2
FrankFang128 2015-09-09 22:54:17 +08:00
sublime 能重构?不可能。
|
3
ChiangDi 2015-09-09 23:12:20 +08:00 via Android
我一般开好几个 Sublime 加一个 webstorm 一起写。
|
4
SolidZORO 2015-09-09 23:21:29 +08:00
不能拖拽著點的確不方便。深有同感。 VS code 就支持得很好,估計 ST4 會支持這個特性。 ST 開放的接口可能不多, sidebar 的相關 plugins 非常非常少。
|
5
YuJianrong 2015-09-09 23:22:59 +08:00
@FrankFang128 重构不就是替换一下名字吗……为什么不行……
|
6
phoenixlzx 2015-09-09 23:27:23 +08:00
@SolidZORO ST4 ... 有生之年吧
|
7
FrankFang128 2015-09-09 23:27:27 +08:00
@YuJianrong var a = 0; function b (){ var a = 1;} a = 2;
IDE ( WebStorm )可以直接重命名第 1 和第 3 个 a ,跳过第 2 个 a 。因为它做了语义分析。 |
8
YuJianrong 2015-09-09 23:30:52 +08:00
@FrankFang128 我知道有些编辑器有这种功能啦,但事实上
1. 绝大多数情形下根本没有重名的 case 2. 有时代码复杂到静态语义分析并本不管用 所以直接替换也就可以了啊(至少对于我来说重构就是替换名字)。 |
9
incompatible 2015-09-09 23:33:14 +08:00
@YuJianrong
“ 2. 有时代码复杂到静态语义分析并本不管用 ” 这是不可能的 |
10
YuJianrong 2015-09-09 23:34:56 +08:00
@incompatible 我说的又不是静态类型语言,我说的是 JS 这类。
|
11
YuJianrong 2015-09-09 23:37:22 +08:00
@incompatible 而且静态类型语言有编译期保证替换就更放心了(以前用 VC 写 C++重构代码还是替换……)。
|
12
FrankFang128 2015-09-10 00:07:10 +08:00
@YuJianrong 那跨文件重构呢,一个文件引用了另一个文件的接口,你在重命名时,就很怕了,根本不知道谁在调用你。
编辑器就是编辑器,没法做 IDE 做的事情。 |
13
YuJianrong 2015-09-10 00:34:44 +08:00 via iPhone
@FrankFang128 所以说究竟是说静态类型还是动态类型语言呢?
1. 静态类型语言跨文件重命名也无所谓,因为有编译期保证。 2. 动态类型语言跨文件 IDE 也帮不了你,因为分析不出来。 我们自己的 JS 项目采用自己的类 AMD 协议模块定义,不过增加了模块 namespace 支持,重命名的时候就是按模块名(包括 namespace )全局查找一下就能找到所有引用了,然后全局替换即可。这其实即使是 IDE 也是做不到的(根本分析不出来)。 所以重要的是模块和类定义规范,而不是什么 IDE 吧。 |
14
cxbig 2015-09-10 00:47:58 +08:00
回楼上的 @YuJianrong
我用 PhpStorm ,所有主流 PHP 框架,不管多复杂,有特殊用法的做好 meta 定义,各种 rename 无压力,反射类、方法、变量都没有问题。 一个项目一个 meta 文件,一个人做好了全组都能用。 |
15
FrankFang128 2015-09-10 00:56:38 +08:00 via Android
@YuJianrong 用一下 WebStorm 或者 PHPStorm 再说吧, AMD 、 CommomJS 完全没问题, JS 跨文件也没问题。静态语言能在编译前就知道错误也是 IDE 的能力。
|
16
FrankFang128 2015-09-10 00:58:51 +08:00 via Android
我唯一喜欢编辑器的一点就是快,不过有人说 IDE 的正确打开方式是入职开启,离职关闭,也就不慢了 :)
|
17
gaitana 2015-09-10 01:03:25 +08:00
@cxbig 求 meta 定义相关资料,搜谷歌了没搜到,另求点拨: pycharm 、 rubymine 能不能用 meta 定义
|
18
YuJianrong 2015-09-10 01:33:45 +08:00 via iPhone
@cxbig 没用 php 不懂。对于我们来说额外的 meta 定义不大可能,文件太多了。
@FrankFang128 这个是类 AMD 不是说就是 AMD ,就用 AMD 的风格解析是行不通的,要想正确解析唯一的可能性是自己写解析。很遗憾我们没有这样的动力。不过这个 IDE 在静态分析上用了多少奇技淫巧,想直接分析出我们项目的依赖是根本不可能的…… |
19
YuJianrong 2015-09-10 01:34:46 +08:00 via iPhone
修正: “无论这个 IDE 在静态分析上用了多少奇技淫巧,想直接分析出我们项目的依赖是根本不可能的……”
|
20
cxbig 2015-09-10 04:07:44 +08:00
@YuJianrong
不是说让你每个文件都写进 meta 文件,类似于定义 namespace 对于 PHP 来说,常规的用法 IDE 自己就会识别,比方说: $model = new MyClass (); $model->doThis (); 你在运用的时候,觉得 doThis ()名字起得不好,要改成 doThat (),你直接在运用的地方改,其他所有地方都会自动改变。 IDE 还会进行分析,如果它没把握重构所有的地方,还会触发预览模式让你判断。 特别的调用格式,你只要描述特征,它自己会进行匹配。 例:项目有很多和 table 对应的 model ,一开始他们都有一个方法是 setName (),属于反射方法,自动对应表里的 column 名字 因为项目比较大, model 不能全放一个地方,而且为了区分名字很长 用 new LONG_NAME_MODEL_A ()写起来很不方便,于是开始使用统一的反射调用方法: MYAPP::getModel ('a'); MYAPP::getModel ('b'); 如果只是几个 model ,你还可以写在 phpdoc 里,进哪个参数,出哪个 model ,如果有几百个 model , phpdoc 就没办法了 @gaitana 你可以参考这个 这个时候 model b 的 field 名字改了,从 name 变成了 firstname , setName 和 getName 都要重构, PhpStorm 在这个情况下是不会自动识别::getModel ()调用了哪个 class 的。为了开发方便,让 IDE 识别我们特别的方式 就要把这个特例写进 meta 文件: 项目根目录放文件 .myapp.meta.php 结构大致如下: <? php namespace = PHPSTORM_META { $STATIC_METHOD_TYPES = [ \MYAPP::getModel ('') => [ 'a' instanceof \LONG_NAME_MODEL_A, 'b' instanceof \LONG_NAME_MODEL_B .... 这样等 IDE 做完 index ,重构的时候就可以准确定位到某一个 model 的方法了 |
21
Perry 2015-09-10 07:19:09 +08:00
一个 IDE 一个编辑器,最好别放在一起比较
|
22
YuJianrong 2015-09-10 08:42:23 +08:00 via iPhone
|
23
864000951 2015-09-10 09:54:03 +08:00
jetbrain 的 IDE ,开几天不关闭看看占的内存,吓死你们
|