Powershell_ise не обновляет изменения, сделанные снаружи - PullRequest
7 голосов
/ 09 января 2012

Как обновить Powershell_ise для содержимого, измененного за пределами IDE.

Большую часть времени я бы открывал и Powershell_ise, и notepad ++

Если я внесу изменения в Powershell_ise, notepad ++ запрашивает перезагрузку, ноесли я изменяю в notepad ++, в Powershell_ise невозможно обновить.

Можно ли каким-либо образом обновить содержимое или я пропускаю какую-либо функцию, обеспечивающую это?

Ответы [ 3 ]

4 голосов
/ 30 мая 2014

Это сообщение старое, но я решил опубликовать его, потому что Google привел меня сюда с той же проблемой.

В конце концов я просто написал эту маленькую функцию, которая не выполняет точно то, что хотел ОП,но, возможно, другие гуглеры сочтут это полезным:

function Build {
    #Reload file
    $CurrentFile = $psise.CurrentFile
    $FilePath = $CurrentFile.FullPath
    $PsISE.CurrentPowerShellTab.Files.remove($CurrentFile)
    $PsISE.CurrentPowerShellTab.Files.add($FilePath)

    iex $PsISE.CurrentPowerShellTab.Files.Editor.Text
}

$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Clear()
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Reload file and run",{Build},'f4')

Это не идеально, но на данный момент мне этого достаточно.Все, что нужно сделать, - это создать привязку ключа, которая закрывает, снова открывает и выполняет текущий файл.Это немного раздражает, потому что когда вы запустите его, вы потеряете текущую позицию курсора, когда файл будет закрыт и снова открыт.Я уверен, что вы можете сохранить положение курсора в столбцах и строках и восстановить его при перезагрузке, но мне пока лень беспокоиться об этом.

Редактировать: Я случайно разместил более старый номерверсия моего кода.Обновлено с рабочей версией.

3 голосов
/ 09 января 2012

PowerShell ISE не поддерживает автоматическое обновление измененных файлов.Его нет даже в ISE v3.

В этой теме есть предложения по подключению: https://connect.microsoft.com/PowerShell/feedback/details/711915/open-ise-files-should-update-when-edited-externally

Однако это можно сделать с помощью объектной модели PowerShell ISE и событий PowerShell.Изучите коллекцию $ psise.CurrentFile и $ psise.CurrentPowerShellTab.Files.Это должно дать вам достаточно информации, чтобы написать свой собственный простой аддон.

2 голосов
/ 03 сентября 2015

Вот другое вращение сценария red888:

function Reload {

    $CurrentFile = $psise.CurrentFile
    $FilePath = $CurrentFile.FullPath

    $lineNum = $psise.CurrentFile.Editor.CaretLine
    $colNum = $psise.CurrentFile.Editor.CaretColumn

    $PsISE.CurrentPowerShellTab.Files.remove($CurrentFile) > $null

    $newFile = $PsISE.CurrentPowerShellTab.Files.add($FilePath)

    $newfile.Editor.SetCaretPosition($lineNum,$colNum)
}

$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Clear()
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Reload File",{Reload},'f4') > $null

Восстанавливает положение каретки после перезагрузки.Я удалил строку

iex $PsISE.CurrentPowerShellTab.Files.Editor.Text

Так как она мне не нужна, она также не похожа на выполнение скрипта (и поэтому приводит к странному поведению операторов вроде $script:MyInvocation.MyCommand.Path).

Кстати, если вы поместите этот код в свой профиль ISE, он будет автоматически запускаться при первой загрузке ISE.Профиль ISE - это просто скрипт powershell, местоположение которого задается переменной $profile.

Вот некоторые команды, которые создают профиль, если он не существует, а затем открывают его.Запустите его изнутри ISE:

if (!(Test-Path (Split-Path $profile))) { mkdir (Split-Path $profile) } ;
if (!(Test-Path $profile)) { New-Item $profile -ItemType file } ;
notepad $profile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...