2016-04-14 6 views
4

Примечание. Этот вопрос касается не только VB.NET, но и конкретной функции редактора Visual Studio 2015 Basic.Преобразование объединенного строкового литерала VB.NET в многострочную строку

У меня есть унаследованного кода, который выглядит следующим образом:

Dim someText = 
    " a " & 
    " AND b " & 
    " AND cd " & 
    " AND efg " & 
    " AND h " 

С Рослин ввел multi-line string literals в VB, я хочу, чтобы преобразовать его в этом:

Dim someText = 
    " a 
     AND b 
     AND cd 
     AND efg 
     AND h " 

(я знаю, что два не совсем эквивалентны, поскольку второй содержит дополнительные разрывы строк и пробелы. Это прекрасно. Предположим, что содержимое похоже на SQL или HTML, где дополнительные пробелы не имеют значения.)

Теперь мой подход будет выглядеть следующим образом: Сначала я block-select стартовые кавычки (для первого, кроме одного) и заменить их пробелом:

Dim someText = 
    " a " & 
    AND b " & 
    AND cd " & 
    AND efg " & 
    AND h " 

Затем я нажимаю в a линию, чтобы зафиксировать завершающие кавычки и пуф происходит следующее:

Dim someText = 
    " a " & 
     And b " & 
     AND cd " & 
     AND efg " & 
     AND h " 

капитализация первого «а» получил перепутались.

Я понимаю, почему это происходит. Я даже filed a bug report, чтобы исправить аналогичную проблему. К сожалению, исправление (которое, видимо, попало в VS 2015 Update 2), помогает только в том случае, если общее количество кавычек является нечетным, что здесь не так.

Кто-нибудь нашел обходное решение для переформатирования больших блоков конкатенированных строк в многострочные строковые литералы без Visual Studio, испортив содержимое строки? Я знаю, что я могу превратить довольно-форматирование по всему миру (Tools/Options/Text Editor/Basic/Advanced), но есть ли лучшее решение?

ответ

7

Вы можете использовать Find и Replace для этого. Включите регулярные выражения:

enter image description here

и использовать это выражение:

" &\r\n\s*" 

Это будет соответствовать цитатам и амперсанд в конце одной строки, за которым следует символ новой строки и любой пробел и цитаты в начале следующей строки:

enter image description here

замена затем:

\r\n 

Для замены согласованного текста на новую строку.

Если вы хотите сохранить пробелы в начале каждой строки, используйте захвата группы (в скобках), чтобы захватить его в выражении найти:

" &\r\n(\s*)" 

и положил его обратно в в замене, используя $1:

\r\n$1 

enter image description here