在 PHPStorm 中重命名文件而不重构

Posted

技术标签:

【中文标题】在 PHPStorm 中重命名文件而不重构【英文标题】:Rename file in PHPStorm without refactoring 【发布时间】:2011-12-10 15:56:32 【问题描述】:

如何在 phpStorm 中快速重命名文件名无需重构?即使在我刚刚创建了文件之后,PHPStorm 也需要很长时间来搜索我的文件以了解其使用情况。

【问题讨论】:

【参考方案1】:

还有一个选项可用右键单击文件选择“在资源管理器中显示”,然后在 Windows 资源管理器中按 F2 重命名文件。它不会重构或影响您项目中的任何其他文件。

【讨论】:

【参考方案2】:

这适用于 linux 用户。

它取决于zenity,所以首先检查它是否安装在您的系统上, 在控制台中运行:zenity --version 如果它输出类似3.18.1.1 的东西 - 那就没问题了。

创建文件idea-rename.sh,内容如下:

#!/usr/bin/env bash

FileDir="$1"
FileName="$2"

NewFileName="$(zenity --entry --title "Rename $FileName" --text "Please enter new name" --entry-text "$FileName" --ok-label="Rename" 2>/dev/null)"

if [[ "$NewFileName" != "" ]]; then
    if [[ -f "$FileDir/$FileName" ]]; then
        path="$FileDir"
        name="$NewFileName"

        if [[ "$NewFileName" == *"/"* ]]; then
            IFS='/' read -ra newDirs <<< "$NewFileName"
            IFS='/' read -ra dirs <<< "$FileDir"

            last=$(($#newDirs[@] - 1))
            path=""
            name="$newDirs[$last]"
            unset 'newDirs[last]'

            if [[ "$NewFileName" == *"./"* ]]; then
                for i in "$!newDirs[@]"; do
                    dir="$newDirs[i]"

                    if [[ "$dir" == ".." ]]; then
                        unset 'newDirs[i]'
                        j=$i

                        while [ $j -ge 0 ]; do
                            j=$(($j-1))

                            if [ $j -lt 0 ]; then
                                for (( k=$#dirs[@]-1 ; k>=0 ; k-- )); do
                                    if [[ "$dirs[k]" ]]; then
                                        echo 'dirs[k]'
                                        unset 'dirs[k]'
                                        break
                                    fi
                                done
                            elif [[ "$newDirs[j]" ]]; then
                                echo 'newDirs[j]'
                                unset 'newDirs[j]'
                                break
                            fi
                        done

                    elif [[ "$dir" == "." ]]; then
                        unset 'newDirs[i]'
                    fi
                done
            fi

            for dir in "$dirs[@]"; do
                if [[ "$dir" ]]; then
                    path="$path/$dir"

                    if [[ ! -d "$path" ]]; then
                        mkdir -m 0777 "$path"
                    fi
                fi
            done

            for dir in "$newDirs[@]"; do
                if [[ "$dir" ]]; then
                    path="$path/$dir"

                    if [[ ! -d "$path" ]]; then
                        mkdir -m 0777 "$path"
                    fi
                fi
            done
        fi

        if [[ ! -f "$FileDir/$NewFileName" ]]; then
            mv "$FileDir/$FileName" "$path/$name"
        fi
    fi
fi

打开你的Settings > Tools > External Tools,点击 并填写如下表格

姓名:Rename 群:File 程序:/bin/bash 参数:/path/to/idea-rename.sh $FileDir$ $FileName$ 工作目录:$ProjectFileDir$

点击OkApply 之后,您可以在文件菜单中看到新项目

当你点击rename时会打开对话框

在某些情况下 phpstorm 重命名后不会同步文件,因此在文件所在的路径中需要单击文件菜单中的“同步'路径'”

【讨论】:

【参考方案3】:

默认为 Shift-F6。对于不重构,请禁用弹出窗口中的复选框。

我想像 Windows 默认一样使用 F2 进行文件重命名。

您可以为 F2 创建一个快捷方式。前往:

    文件 设置 键盘映射 搜索“重命名” 双击“重构 -> 重命名” 点击“键盘快捷键” 按 F2 好的

编辑

如果不能立即生效,重启 PHPStorm。

【讨论】:

+1 这就是我来这里的原因。谷歌带来了我,但我没有失望。 F2 对我来说是预期的快捷方式。谁听说过 Shift+f6 用于重命名操作? 奇怪,不知道为什么这个快捷方式需要重启,而其他的不需要。 我做了所有这些但忘记重新启动 phpstorm .. :(【参考方案4】:

我快速重命名文件的技巧是单击文件名并按Shift-F6。将打开一个对话框,您可以立即键入文件的新名称,然后按回车键以完成重命名。

我发现这种技术很直观,因为您不必将鼠标移动到对话窗口、输入新名称或单击任何内容进行确认。只要您所做的只是一个您知道是安全的重命名,您只需输入即可。

我也喜欢此功能,因为您仍然可以选择在更改之前快速预览更改。在那些情况下,当您重构可能对应用程序的其余部分产生影响的东西时,您仍然可以启用“搜索引用”和/或“在 cmets 和字符串中搜索”以获取整个 enchilada。 (我默认禁用这些选项。)

我同意你的观点,右键单击文件名,向下滚动到 Refactor,选择 Rename,然后输入新名称很麻烦,尤其是在启用安全检查的情况下。我发现 PhpStorm 开发人员似乎了解这些类型的问题,并且通常也想到了一种“更快的方法”来做事。

【讨论】:

还可以使用助记符(Alt + ) 快速启用/禁用复选框。【参考方案5】:

如果不进行重构,您将无法做到这一点,尽管Refactor | Rename 通常很快,您可以禁用选项来搜索参考。

【讨论】:

有时我会创建一个新文件,然后我想更改它的名称。虽然文件刚刚创建,但重构器报告了很多对它的引用?! 如果您在 cmets 中搜索错误引用,并且文件名是一些常用词,则可以找到错误引用,因此只需在“重命名”对话框中禁用这两个复选框。

以上是关于在 PHPStorm 中重命名文件而不重构的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 重命名而不重构

在 Entity Framework Core 中重命名外键而不删除数据

如何在 Visual Studio 中重命名方法并保留历史记录?

如何删除一列并创建一个新列而不是在 EF Core 中重命名?

Xcode:编辑>重构>重命名说“操作无法完成。文件存在。”

在 Websphere MQ 中重命名队列