【问题标题】:How to refactor in Sublime Text? (Ruby, Rails, JavaScript)如何在 Sublime Text 中重构? (Ruby、Rails、JavaScript)
【发布时间】:2013-09-10 12:08:17
【问题描述】:

我以前使用过 Netbeans。如何在 Mac 上的 Sublime Text 2 中进行一些重构(更改变量名称、使用代码制作方法等)?我现在正在做的是“选择一个单词的下一个实例”,但这只是因为我只使用一个文件

【问题讨论】:

    标签: javascript ruby-on-rails ruby sublimetext2


    【解决方案1】:

    我为 JavaScript 重构编写了这个插件 https://github.com/s-a/sublime-text-refactor

    我想还有更多支持 RoR。

    【讨论】:

    • @StephanAhif 有没有办法为您的插件功能分配快捷方式?谢谢
    • 您可以在菜单 {Preferences / Key Bindings - User} 中使用 Sublime Text 用户定义的键绑定。这是我用来跳转到 var 定义 { "keys": ["f2"], "command": "gotodefinition", "args": {}} 的条目。
    • 我没有看到这个插件有任何问题。它很简单。
    【解决方案2】:

    对我有用的是“查找全部”选项(Ctrl+F 和 Alt+Enter)。

    这样你可以编辑文本,同时编辑所有匹配项。

    【讨论】:

    • 指定“整个单词”和“区分大小写”在使用此方法时有很大帮助。问题是它也会替换 cmets 和字符串中的单词。有时,当我在调试打印语句中包含变量名时,这很方便,但通常不受欢迎。
    【解决方案3】:

    这里发生的事情是我只是通过 grepping 和 find/replace 进行了重构。我现在在 Vim 上,当我需要重构时,替代/grepping 仍然是我的方法。我想这是 IDE 提供的文本编辑器不提供的功能之一。

    【讨论】:

    • 不幸的是,人们不得不把这些写成插件。截至今天(2015 年 1 月 8 日),有 3 个允许重构的已知插件:python - PyRefactor、php - PhpSimpleRefactor 和 javascript - JsRefactor
    【解决方案4】:

    除了 ctrl+click,您还可以使用 ctrl+D。对我有用。

    【讨论】:

    • 这可以解决独立脚本的问题。对于多文件重构,我们可以使用“在文件中搜索”选项,因为它会查看每个人,而不仅仅是“项目”或“打开的”文件。我仍然想念的是文件夹移动/复制重构,遵循路径。我记得 Eclipse 在“重构”菜单选项中执行此操作。
    • 您必须再次按 ctrl+D 才能在文件中获得更多选择。
    • 对于mac用户:我更喜欢使用command+D。多次同时按下按钮以选择要重构的项目。
    【解决方案5】:

    我所做的是使用 ctrl+click 选择多个变量,一旦您键入,所有选定的字符串都会更改。唯一的区别是您需要手动选择它们。但话又说回来——一旦你选择了第一个,所有匹配的变量都会突出显示

    【讨论】:

      【解决方案6】:

      只要您需要重构变量,sublime-text-refactor 插件就可以工作。如果您需要重构纯字符串,则它不起作用。例如,如果您需要将文件路径'file/*/components' 中的'components' 替换为'sections',插件将无法帮助您,因为它希望重命名变量(当我尝试重构时控制台会显示:无法找到components 变量)。

      我的回答与 sublime text 无关,但是当我找到合适的解决方案时,我被引导到这个线程,因此它可能会在相同情况下对人们有所帮助。 Sublime text 不一定是重构的解决方案。

      在 NodeJs 中,为了确保跨文件重构,我所做的是创建一个 gulp 任务来替换值并重写文件:

      var gulpReplace = require('gulp-replace');
      
      gulp.task('refactor', function(){
        gulp.src(['app/**/*.js'], { base: './' })
        .pipe(gulpReplace(/components/g, 'sections'))
        .pipe(gulp.dest('./'));
      });
      
      $gulp refactor
      

      这样做的目的是,在app 目录下的所有js 文件中,我将字符串'components' 替换为字符串'sections'。在我的情况下,我需要简单的字符串替换,它不是变量重命名,所以需要非常简单,这种方法非常有效。根据您的情况调整此方法并在重构之前备份您的代码,因为它相当于通过 grep 查找/替换,没有事先检查,请确保您在做什么。

      我建议在完成重构后删除 gulp 任务,因为它可能非常危险!注意

      【讨论】:

        猜你喜欢
        • 2015-02-25
        • 2015-11-27
        • 1970-01-01
        • 1970-01-01
        • 2013-07-27
        • 1970-01-01
        • 2018-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多