【问题标题】:Refactor local variable name using Visual Studio Code使用 Visual Studio Code 重构局部变量名称
【发布时间】:2018-05-04 07:53:27
【问题描述】:

我有这种简单的情况。我想重构角色变量的名称:

看起来 Visual Studio Code 足够聪明,知道不应触及 URL 中的“角色”。

我只想重构单个文件中的变量名称,在单个范围内,而不是整个文件,绝对不是多个文件!

如果我使用 Ctrl + H,它将带我进入一个菜单,默认情况下会重构多个文件或整个单个文件中的名称,但我只想在单个函数范围内重构名称!

【问题讨论】:

    标签: visual-studio-code


    【解决方案1】:

    使用rename symbol 而不是标准的查找/替换。 Rename 默认绑定到 F2

    重命名符号将知道仅触及示例中的本地 roles 引用。 Visual Studio Code 附带对 JavaScript 和 TypeScript 的重命名支持。其他语言可能需要安装语言扩展。

    【讨论】:

    • 伙计,有没有比 f2 键更容易使用的方法?这真的很难使用。为什么没有更多的右键选项?
    • 右键单击符号。它应该在那里。你也可以rebind这个到任何你想要的键盘快捷键
    • 如果当前语言服务器不支持该功能,则不会显示上下文菜单项。
    • 就我而言,是 CTRL + F2。我目前使用的是 1.30.2 版
    • 请注意,“更改所有出现次数”与“重命名符号”不同。 “更改所有出现”似乎仅限于当前文档,而“重命名符号”则通过项目传播。除此之外,“更改所有事件”也会很高兴地重命名不同对象的属性,如果它们被命名相同(例如,如果你有两个对象 a.SomeValue:stringb.SomeValue:number 并使用 ctrl 更改 a 的 SomeValue 属性+F2,也会重命名b的属性,即使它们是不同的类型。“重命名符号”只会重命名类型的属性。
    【解决方案2】:

    使用重命名符号。默认情况下使用 Ctrl + F2 定义。

    但是,请记住,您正在更改的变量、定义、函数等将在文件本身中更改,而不仅仅是范围。 Visual Studio Code 目前没有用于重命名范围内的变量(例如,函数内的变量)的实现。所以请记住这一点。

    Visual Studio Code - change all occurrences

    【讨论】:

    • 不知道在发布此答案后是否已更改,但目前有两个不同的命令:重命名符号 (F2) 和更改所有出现次数 (Ctrl+F2)。据我所知,如果是第一个,那就是聪明的。
    • 只是补充一下,使用它时要小心,我只是使用它,它改变了整个项目中的每个实例,而不仅仅是我正在处理的文件,vscode 无法反转它,它刚刚出现错误提示重构失败。感谢上帝,我只能说 Git。
    【解决方案3】:

    对于 macOS 用户:使用 Fn + + F2 重命名代码块内的变量。

    【讨论】:

    • 对我来说,只是Fn + F2
    【解决方案4】:

    要打开您的用户和工作区设置,请使用以下 Visual Studio Code 菜单命令:

    Windows/Linux 上:菜单 文件首选项设置。在 ma​​cOS 上:代码首选项设置

    您还可以使用首选项从命令面板(Ctrl + Shift + P)打开设置编辑器>,打开设置或使用键盘快捷键(Ctrl + ,)。

    在搜索栏中,输入keybindings.json,并添加以下代码:

    {
      "command": "editor.action.changeAll",
      "key": "ctrl+f2",
      "when": "editorTextFocus && !editorReadonly"
    }
    

    {
      "command": "editor.action.rename",
      "key": "f2",
      "when": "editorHasRenameProvider && editorTextFocus && !editorReadonly"
    }
    

    在键绑定中。

    F2 似乎适用于所有文件,而 Ctrl + F2 仅适用于当前文件。

    【讨论】:

    • 你的意思是说keybindings.json而不是settings.json
    • 命令editor.action.changeAll 将根据text 值执行此操作,而editor.action.rename 将根据reference 执行此操作。这就是为什么,如果您导出/导入变量/函数名称,它将跨文件重命名。请注意这一点!此外,如果您想重命名 所有 引用,并且不使用别名(如 originalName as newName),您可以在 settings.json 中更改此设置:"javascript.preferences.useAliasesForRenames": false
    猜你喜欢
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    相关资源
    最近更新 更多