Visual Studio: сокращенный ключ: дублирующая линия

Вы можете сохранить строку, начиная с конца. Поскольку вы, кажется, уже знаете maxSize ...

Так что в основном, если файл первоначально был (foo.txt)

[] [] [] [] [] [f] [o] [o] [.] [t] [x] [t] [\0]
             ^
             |
          lastEmpty           

Теперь, если вы добавите родительский каталог a / it, он будет

[] [] [] [a] [/] [f] [o] [o] [.] [t] [x] [t] [\0]
       ^      
       |      
    lastEmpty           

Таким образом, код будет выглядеть примерно так (могут быть ошибки, но вы получаете идею).

char temp[LENGTH], file[LENGTH]; 
int lastEmpty = put_at_end(some_file_name, file);  
// lastEmpty points to right most empty slot

while (some_condition) { 
    parent_dir = some_calculation_that_yields_name_of_parent_dir; 

    int len = strlen(parent_dir);
    char *tmp = parent_dir + len -1;

    while (lastEmpty > 0) {
        file[lastEmpty] = *tmp;
        lastEmpty --;
        tmp--;
    }
} 

Так как я предполагаю, что мы могли бы ожидать, что parent_dir будет быть маленьким, перебирать его дважды должно быть хорошо. Если вы хотите передать строку файла, вы можете просто использовать file+lastEmpty+1.

382
задан Guilherme Fidelis 22 September 2016 в 12:41
поделиться

5 ответов

В Visual Studio 2019

Ctrl + D

В Visual Studio 2017 (v15.6 и более поздние версии)

Ctrl + D

В Visual Studio 2017 (до версии 15.6)

(изменить) Эта функция теперь встроена в VS2017: Ctrl + E , V дублирует строку, если ничего не выбрано, или дублирует выделение. Вы можете назначить его другой комбинации клавиш или найти в меню:

Duplicate line in VS2017

См. этот справочник для получения дополнительной информации.

До VS2017, встроенный метод с использованием буфера обмена

Как упоминалось в @cand, вы можете просто выполнить Ctrl + C ; Ctrl + V .

Ctrl + C скопирует строку, если ничего не выбрано.

Макрорешение (до VS2017)

Если вы хотите реализовать более полное решение, например, создать более простую комбинацию клавиш или вы не хотите использовать буфер обмена, см. Это руководство:

Дублировать строка для Visual Studio

Visual Basic:

 Импортирует систему 
Импортирует EnvDTE 
Импортирует EnvDTE80 
Импортирует System.Diagnostics 
 
Общедоступный Модуль DuplicateLastLineModule 
Sub DuplicateLine () 
Размыть строку как строку 
DTE.ActiveDocument.Selection.StartOfLine (0) 
DTE.ActiveDocument.Selection.EndOfLine (True) 
line = DTE.ActiveDocument.Selection.Text 
DTE.ActiveDocument.Selection.EndOfLine () 
DTE.ActiveDocument.Selection.NewLine () 
DTE.ActiveDocument.Selection.StartOfLine (0) 
DTE.ActiveDocument.Selection.Text = line {{1} } End Sub 
End Module 
 

Чтобы создать макрос, просто перейдите в проводник макросов («Инструменты-> Макросы-> Обозреватель макросов» или Alt + F8 ) и скопируйте и вставьте код в новый модуль. Теперь просто назначьте ему сочетание клавиш:

  1. перейдите в Инструменты-> Параметры ...
  2. в разделе «Среда» нажмите «Клавиатура»
  3. в текстовом поле «Показать команды, содержащие», введите «дубликат» (согласно имя, которое вы дали модулю.)
  4. теперь вы должны увидеть макрос в списке ниже
  5. выберите «Текстовый редактор» из списка «Использовать новый ярлык в»
  6. установите фокус в текстовом поле «Нажимать сочетания клавиш» и нажмите комбинацию на клавиатуре, которую вы хотите использовать ( Ctrl + Shift + D в моем случае)
  7. нажмите Нажмите кнопку «Назначить»
  8. . Теперь вы должны увидеть ярлык в текстовом поле «Ярлыки для выбранной команды»
  9. , нажмите кнопку OK

И все. Наслаждаться!

376
ответ дан 22 November 2019 в 23:41
поделиться

Для Visual Studio 2019 :

сочетания клавиш меню Edit с: ctrl + k и ctrl + s Редактирование

"Копируют Строку" ( Сдвиг + Высокий звук + DownArrow ) к Вашему Вашему собственному ярлыку.

можно найти его с командой ID: editor.action.copyLinesDownAction

Для меня, Это ctrl + d

1
ответ дан 22 November 2019 в 23:41
поделиться

Это просто Ctrl + C ; Ctrl + V , проверьте это ссылка . Пока вы не выделяете какой-либо текст, это будет дублировать строку, над которой находится курсор, когда вы нажимаете Ctrl + C .

92
ответ дан 22 November 2019 в 23:41
поделиться

Если вам нравится дублирование строки (или блока) в стиле затмения, используя CTRL + ALT + UP или CTRL + ВВЕРХ + ВНИЗ , ниже я выкладываю макросы для этой цели:

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics

Public Module DuplicateLineModule
    Sub DuplicateLineDown()
        Dim selection As TextSelection = DTE.ActiveDocument.Selection
        Dim lineNumber As Integer
        Dim line As String

        If selection.IsEmpty Then
            selection.StartOfLine(0)
            selection.EndOfLine(True)
        Else
            Dim top As Integer = selection.TopLine
            Dim bottom As Integer = selection.BottomLine

            selection.MoveToDisplayColumn(top, 0)
            selection.StartOfLine(0)

            selection.MoveToDisplayColumn(bottom, 0, True)
            selection.EndOfLine(True)
        End If

        lineNumber = selection.TopLine
        line = selection.Text

        selection.MoveToDisplayColumn(selection.BottomLine, 0)
        selection.EndOfLine()
        selection.Insert(vbNewLine & line)
    End Sub
    Sub DuplicateLineUp()
        Dim selection As TextSelection = DTE.ActiveDocument.Selection
        Dim lineNumber As Integer
        Dim line As String

        If selection.IsEmpty Then
            selection.StartOfLine(0)
            selection.EndOfLine(True)
        Else
            Dim top As Integer = selection.TopLine
            Dim bottom As Integer = selection.BottomLine

            selection.MoveToDisplayColumn(top, 0)
            selection.StartOfLine(0)

            selection.MoveToDisplayColumn(bottom, 0, True)
            selection.EndOfLine(True)
        End If

        lineNumber = selection.BottomLine
        line = selection.Text

        selection.MoveToDisplayColumn(selection.BottomLine, 0)
        selection.Insert(vbNewLine & line)
        selection.MoveToDisplayColumn(lineNumber, 0)
    End Sub
End Module
11
ответ дан 22 November 2019 в 23:41
поделиться

Не ответ, а просто полезное дополнение: В качестве халявы я только что придумал (ну... эээ... подправил код, опубликованный Лоло) макрос RemoveLineOrBlock. Наслаждайтесь!

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics

Public Module RemoveLineOrBlock

    Sub RemoveLineOrBlock()
        Dim selection As TextSelection = DTE.ActiveDocument.Selection
        Dim lineNumber As Integer
        Dim line As String

        If selection.IsEmpty Then
            selection.StartOfLine(0)
            selection.EndOfLine(True)
        Else
            Dim top As Integer = selection.TopLine
            Dim bottom As Integer = selection.BottomLine

            selection.MoveToDisplayColumn(top, 0)
            selection.StartOfLine(0)

            selection.MoveToDisplayColumn(bottom, 0, True)
            selection.EndOfLine(True)
        End If

        selection.LineDown(True)
        selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn,True)

        selection.Delete()

        selection.MoveToDisplayColumn(selection.BottomLine, 0)
        selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)

    End Sub

End Module
0
ответ дан 22 November 2019 в 23:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: