2016-08-08 4 views
1

Я пытаюсь отложить длинную строку в записывающем узле. Хотя это тривиально для .PadLeft() или префиксных пространств при написании короткой строки, то же самое неверно для длинного, поскольку, как только курсор находится в последнем столбце строки, он будет продолжаться от столбца 0 следующей строки, например:Текст длинной строки Powershell Отступы/отступы

"{0}Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." -f $(" " * 5) 

будет отображаться как

 Lorem ipsum dolor sit amet, consectetur adipiscing elit, 
sed do eiusmod tempor incididunt ut labore et dolore magna aliq 
ua. 

но что, если я хочу, чтобы получить:

 Lorem ipsum dolor sit amet, consectetur adipiscing elit, 
     sed do eiusmod tempor incididunt ut labore et dolore mag 
     na aliqua. 

?

Есть ли способ сделать это? большое спасибо, ребята!

ответ

1

Вам придется разбить строку на себя на основе ширине консоли, а затем подушечка строка и дисплей:

$consoleWidth = $Host.UI.RawUI.BufferSize.Width 
$desiredIndent = 5 # spaces 
$chunkSize = $consoleWidth - $desiredIndent 

$bigString = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. '*10 

[RegEx]::Matches($bigString, ".{$chunkSize}|.+").Groups.Value | ForEach-Object { 
    ' '*$desiredIndent + $_ 
} 
+0

работает довольно хорошо, но получает «обмануть» строки, содержащей CRs и LFs, которые «перезапускают» строку в столбце 0. Я попытался расщепить [. \ S \ S] {splitvalue}, но это не работает так, как я ожидаю .. Я, конечно, пропустил что-то еще ... – Aldo

+0

также неработающие символы, похоже, «обманывают» его, например, кавычки, двойные кавычки, слэши и т. д. – Aldo

+1

'[RegEx] :: Матчи ($ _. InnerText," \ r \ n \. \ $ chunkSize} |. + "). Groups.Value | ForEach-Object {' сделал трюк. В принципе, я раскалываю CRLF сначала, ТОГДА размером с кусок. Большое спасибо @briantist !! – Aldo

Смежные вопросы