LightEdit mode в PHPSTorm

PHPSTorm – это шикарный инструмент. Он меня сильно избаловал подсветкой HTML внутри PHP строк, функциями типа “Structural Brace Matching” или своим уникальным поведением Ctrl+Z, когда отмена не происходит, если кусок кода не находится в поле видимости. Но в этой IDE есть и раздражающие вещи. Одна из них – режим LightEdit, который становится хуже с каждой версией.

Иногда я люблю поредактировать файлы прямо на боевом сервере, используя WinSCP и PHPStorm в качестве редактора. Вот только PHPStorm открывает такие файлы по умолчанию в режиме LightEdit, где не работает практически ни одна “удобная фича”, есть только минимальная подсветка кода. Наконец-то, у меня дошли руки это исправить.

Шаг 1. Отключаем LightEdit.

Нажимаем Ctrl+Shift+A, открываем Registry, ищем ключ light.edit.file.open.enabled и выключаем его. Теперь мы получаем такую ситуацию – файлы из WinSCP начинают открываться в PHPStorm, но каждый новый файл открывается в новом проекте.

Шаг 2. Создаём проект для временных файлов

Нам надо зайти в Шторм и создать там проект в какой-нибудь неинтересной для нас папке, например, у меня это D:\Work\PhpStorm\TempFilesProject.

Шаг 3. Пишем скрипт-прокладку для запуска PHPStorm

Задача этого скрипта – открыть Шторм, затем открыть проект, а после этого уже открыть наш файл в открытом проекте. Этот скрипт мы сохраняем как PHPStorm.vbs:

Option Explicit

Dim shell, args, i, filePath, fileFound, lineArg, stormPath, projectPath

Set shell = CreateObject("WScript.Shell")
Set args = WScript.Arguments

stormPath = """C:\Program Files\JetBrains\PhpStorm 2024.2.3\bin\phpstorm64.exe"""
projectPath = """D:\Work\PhpStorm\TempFilesProject"""
fileFound = False
lineArg = "1"

' Найдём файл среди аргументов
For i = 0 To args.Count - 1
    If Not fileFound Then
        filePath = args(i)
        ' Проверим, существует ли файл
        Dim fso
        Set fso = CreateObject("Scripting.FileSystemObject")
        If fso.FileExists(filePath) Then
            fileFound = True
        End If
        Set fso = Nothing
    End If
Next

' Если не нашли — выходим
If Not fileFound Then
    MsgBox "Не удалось найти путь к файлу", vbCritical, "Ошибка"
    WScript.Quit 1
End If

' Если первый аргумент — число, считаем это номером строки
If args.Count > 0 Then
    Dim maybeLine
    maybeLine = args(0)
    If IsNumeric(maybeLine) Then
        lineArg = maybeLine
    End If
End If

' Соберём команду
Dim command
command = stormPath & " " & projectPath & " --line " & lineArg & " """ & filePath & """"

' Запуск без консольного окна
shell.Run command, 0, False

Шаг 4. Замена редактора в WinSCP

В настройках WinSCP надо поставить путь к нашему vbs-файлу в качестве внешнего редактора. Всё.