Могу ли я повлиять на цитирование в функции расширения вкладки Powershell? - PullRequest
2 голосов
/ 05 октября 2010

Функции расширения вкладки Powershell принимают 2 параметра: строку и текущее слово.Функция должна возвращать замену для текущего слова.

Из эксперимента мне кажется, что текущее слово передается в функцию без кавычек, а возвращенное слово вставляется в строку с той же цитатойкак оригинал.Так, например, если я наберу

PS> foo "bar"<TAB>

, я получу строку bar, переданную в функцию расширения моей вкладки (без кавычек), и мое возвращенное значение будет помещено обратно в строку в двойных кавычках.

Такое поведение вызывает проблемы в определенных случаях.Например, частичное завершение имен файлов, где я мог бы набрать C:\Pro<TAB>, чтобы получить "C:\Program Files", но затем мне нужно удалить окончательную кавычку для дальнейшего расширения (скажем, набрав \Micro, а затем снова нажав TAB.

Кроме того, возврат расширенного значения, содержащего кавычки, может быть очень запутанным:

PS> function TabExpansion($line, $lastword) {
PS>    "looks like '" + $lastword + "' when quoted"
PS> }
PS>
PS> Silly 'example'<TAB>

Это приводит к несбалансированным кавычкам.

Есть ли способ избежать или обойти это поведение?

Пол.

1 Ответ

1 голос
/ 05 октября 2010

Во-первых, это не так:

Такое поведение вызывает проблемы в определенных случаях.Например, частичное завершение имен файлов, где я мог бы набрать C: \ Pro, чтобы получить «C: \ Program Files», но затем мне нужно удалить окончательную кавычку для дальнейшего расширения (скажем, набрав \ Micro и затем нажав TABснова.

Вы можете продолжить ввод \ Micro после кавычки, и он позаботится об этом за вас.

Если вам действительно нужно вернуть значение, содержащее кавычки, вы можетевставьте escape-символ (`) в вашу строку. Обратите внимание, что вам нужно будет экранировать сам символ escape, чтобы он не был съеден:

function TabExpansion($line, $lastword){
    "looks like ``'" + $lastword + "``' when quoted"
}

После раскрытия Tab ваш пример будет выглядеть так:

Silly "looks like `'example`' when quoted"

и парсер с этим не должен иметь проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...