V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Wangxf
V2EX  ›  Sublime Text

用 sublime text 小半年了,说下感受

  •  
  •   Wangxf · 2015-09-09 22:49:03 +08:00 · 5022 次点击
    这是一个创建于 3361 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以前各种编辑器都尝试过, webstorm 算是我比较满意的一款,但是 IDE 略显笨重,每次打开都需要点时间,但是优点也很明显,基本上你能想到的功能都有了,而且还更进一步,不过很多功能 sublime +插件+ gui 客户端也能解决,但是 sublime 到现在最不满意的就是侧边栏项目文件管理目录下你不能在一个项目内,项目与项目之间,外部与项目之间靠鼠标拖拽来移动文件,比如有时有个图片在桌面上,我还要找到文件夹然后放进去,而 ide 直接一拖就完事了,可能没找到好方法吧,单纯吐个槽

    23 条回复    2015-09-10 09:54:03 +08:00
    yoa1q7y
        1
    yoa1q7y  
       2015-09-09 22:53:00 +08:00
    多大点事,要啥自行车
    FrankFang128
        2
    FrankFang128  
       2015-09-09 22:54:17 +08:00
    sublime 能重构?不可能。
    ChiangDi
        3
    ChiangDi  
       2015-09-09 23:12:20 +08:00 via Android
    我一般开好几个 Sublime 加一个 webstorm 一起写。
    SolidZORO
        4
    SolidZORO  
       2015-09-09 23:21:29 +08:00
    不能拖拽著點的確不方便。深有同感。 VS code 就支持得很好,估計 ST4 會支持這個特性。 ST 開放的接口可能不多, sidebar 的相關 plugins 非常非常少。
    YuJianrong
        5
    YuJianrong  
       2015-09-09 23:22:59 +08:00
    @FrankFang128 重构不就是替换一下名字吗……为什么不行……
    phoenixlzx
        6
    phoenixlzx  
       2015-09-09 23:27:23 +08:00
    @SolidZORO ST4 ... 有生之年吧
    FrankFang128
        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 。因为它做了语义分析。
    YuJianrong
        8
    YuJianrong  
       2015-09-09 23:30:52 +08:00
    @FrankFang128 我知道有些编辑器有这种功能啦,但事实上
    1. 绝大多数情形下根本没有重名的 case
    2. 有时代码复杂到静态语义分析并本不管用

    所以直接替换也就可以了啊(至少对于我来说重构就是替换名字)。
    incompatible
        9
    incompatible  
       2015-09-09 23:33:14 +08:00
    @YuJianrong
    “ 2. 有时代码复杂到静态语义分析并本不管用 ” 这是不可能的
    YuJianrong
        10
    YuJianrong  
       2015-09-09 23:34:56 +08:00
    @incompatible 我说的又不是静态类型语言,我说的是 JS 这类。
    YuJianrong
        11
    YuJianrong  
       2015-09-09 23:37:22 +08:00
    @incompatible 而且静态类型语言有编译期保证替换就更放心了(以前用 VC 写 C++重构代码还是替换……)。
    FrankFang128
        12
    FrankFang128  
       2015-09-10 00:07:10 +08:00
    @YuJianrong 那跨文件重构呢,一个文件引用了另一个文件的接口,你在重命名时,就很怕了,根本不知道谁在调用你。
    编辑器就是编辑器,没法做 IDE 做的事情。
    YuJianrong
        13
    YuJianrong  
       2015-09-10 00:34:44 +08:00 via iPhone
    @FrankFang128 所以说究竟是说静态类型还是动态类型语言呢?
    1. 静态类型语言跨文件重命名也无所谓,因为有编译期保证。
    2. 动态类型语言跨文件 IDE 也帮不了你,因为分析不出来。

    我们自己的 JS 项目采用自己的类 AMD 协议模块定义,不过增加了模块 namespace 支持,重命名的时候就是按模块名(包括 namespace )全局查找一下就能找到所有引用了,然后全局替换即可。这其实即使是 IDE 也是做不到的(根本分析不出来)。

    所以重要的是模块和类定义规范,而不是什么 IDE 吧。
    cxbig
        14
    cxbig  
       2015-09-10 00:47:58 +08:00
    回楼上的 @YuJianrong
    我用 PhpStorm ,所有主流 PHP 框架,不管多复杂,有特殊用法的做好 meta 定义,各种 rename 无压力,反射类、方法、变量都没有问题。
    一个项目一个 meta 文件,一个人做好了全组都能用。
    FrankFang128
        15
    FrankFang128  
       2015-09-10 00:56:38 +08:00 via Android
    @YuJianrong 用一下 WebStorm 或者 PHPStorm 再说吧, AMD 、 CommomJS 完全没问题, JS 跨文件也没问题。静态语言能在编译前就知道错误也是 IDE 的能力。
    FrankFang128
        16
    FrankFang128  
       2015-09-10 00:58:51 +08:00 via Android
    我唯一喜欢编辑器的一点就是快,不过有人说 IDE 的正确打开方式是入职开启,离职关闭,也就不慢了 :)
    gaitana
        17
    gaitana  
       2015-09-10 01:03:25 +08:00
    @cxbig 求 meta 定义相关资料,搜谷歌了没搜到,另求点拨: pycharm 、 rubymine 能不能用 meta 定义
    YuJianrong
        18
    YuJianrong  
       2015-09-10 01:33:45 +08:00 via iPhone
    @cxbig 没用 php 不懂。对于我们来说额外的 meta 定义不大可能,文件太多了。

    @FrankFang128 这个是类 AMD 不是说就是 AMD ,就用 AMD 的风格解析是行不通的,要想正确解析唯一的可能性是自己写解析。很遗憾我们没有这样的动力。不过这个 IDE 在静态分析上用了多少奇技淫巧,想直接分析出我们项目的依赖是根本不可能的……
    YuJianrong
        19
    YuJianrong  
       2015-09-10 01:34:46 +08:00 via iPhone
    修正: “无论这个 IDE 在静态分析上用了多少奇技淫巧,想直接分析出我们项目的依赖是根本不可能的……”
    cxbig
        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 的方法了
    Perry
        21
    Perry  
       2015-09-10 07:19:09 +08:00
    一个 IDE 一个编辑器,最好别放在一起比较
    YuJianrong
        22
    YuJianrong  
       2015-09-10 08:42:23 +08:00 via iPhone
    @cxbig 不懂 php ,看来原生支持 namespace ,那确实会容易分析很多。

    @Perry 我的观点是至少对于 JS 这种特别灵活的动态类型语言 IDE 没啥用,在我以前用 VS 的时候 VS 也只是编辑器+调试器的作用,没有类似重构这样的高级功能也没觉得有啥不好。
    864000951
        23
    864000951  
       2015-09-10 09:54:03 +08:00
    jetbrain 的 IDE ,开几天不关闭看看占的内存,吓死你们
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2735 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:24 · PVG 23:24 · LAX 07:24 · JFK 10:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.