Как изменить Ctrl + C в Visual Studio 2017 для копирования слова, а не всей строки - PullRequest
2 голосов
/ 01 мая 2019

Этот вопрос похож на Отключение однострочного копирования в Visual Studio , за исключением того, что я хочу изменить его, просто скопировав слово, на котором находится курсор, если ничего не выбрано. Если это на пустом месте, конечно, мне все равно, скопируйте строку, но 99% я пытаюсь скопировать слово, а не строку. Возможно ли это?

1 Ответ

3 голосов
/ 02 мая 2019

Чтобы скопировать слово, в котором включена каретка, вы можете назначить ярлык для следующей Visual Commander (разработанной мной) команды (язык C #):

public class C : VisualCommanderExt.ICommand
{
    public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) 
    {
        this.DTE = DTE;
        EnvDTE.TextSelection ts = TryGetFocusedDocumentSelection();
        if (ts != null && ts.IsEmpty)
            CopyWord(ts);
        else if (IsCommandAvailable("Edit.Copy"))
            DTE.ExecuteCommand("Edit.Copy");
    }

    private void CopyWord(EnvDTE.TextSelection ts)
    {
        EnvDTE.EditPoint left = ts.ActivePoint.CreateEditPoint();
        left.WordLeft();

        EnvDTE.EditPoint right = ts.ActivePoint.CreateEditPoint();
        right.WordRight();

        System.Windows.Clipboard.SetText(left.GetText(right));
    }

    private EnvDTE.TextSelection TryGetFocusedDocumentSelection()
    {
        try
        {
            return DTE.ActiveWindow.Document.Selection as EnvDTE.TextSelection;
        }
        catch(System.Exception)
        {
        }
        return null;
    }

    private bool IsCommandAvailable(string commandName)
    {
        EnvDTE80.Commands2 commands = DTE.Commands as EnvDTE80.Commands2;
        if (commands == null)
            return false;
        EnvDTE.Command command = commands.Item(commandName, 0);
        if (command == null)
            return false;
        return command.IsAvailable;
    }

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