Terminal: Копировать и вставить привязки клавиш

Созданный на 24 мая 2019  ·  60Комментарии  ·  Источник: microsoft/terminal

Окружающая обстановка

Windows build number: 10.0.18362.86
Windows Terminal version (if applicable):

Действия по воспроизведению

В стандартной консоли Windows 10 вы можете включить использование Ctrl + C / V для копирования и вставки. В Windows Terminal этого нет, и это очень расстраивает.

Ожидаемое поведение

Включите использование Ctrl + C для копирования и Ctrl + V для вставки.

Фактическое поведение

Ctrl + C ничего не копирует, а Ctrl + V просто записывает ^ V в командной строке.

Area-User Interface Help Wanted Issue-Task Needs-Tag-Fix Product-Terminal

Самый полезный комментарий

Мне нравится, как WSL + Bash обрабатывает копирование / вставку. Ctrl + C копирует, только когда что-то выделено. Если ничего не выбрано, Ctrl + C ведет себя как обычно и отправляет SIGINT.

Все 60 Комментарий

Это звучит прямо на аллее @ carlos-zamora

Во всяком случае, на это мог рассчитывать любой. Вы хотите настроить действия копирования и вставки в App.cpp (например, _Scroll ), которые запускают соответствующие действия в TermControl. Там уже должны быть действия Copy и Paste ShortcutActions, поэтому остается лишь зарегистрировать для них значения по умолчанию и привязать действия к привязкам (см. HookupKeyBindings или аналогичный в App.cpp).

Я должен настоять на том, чтобы привязки по умолчанию для этого не были Ctrl+ -only.

Ах, прости. Я не собирался закрывать этот выпуск.

Я должен настоять на том, чтобы привязки по умолчанию для этого не были Ctrl+ -only.

Я знаю, почему вы так говорите, и, конечно, поэтому на обычной консоли он стоит за настройкой, которую нужно включить. Но наличие их за Ctrl + Shift или чем-то подобным приводит к поражению цели. Именно благодаря мышечной памяти эти комбинации клавиш заслуживают внимания.

Для меня использование Ctrl + V для ввода ^V никогда не было полезным, и я подозреваю, что это верно для очень значительного числа людей. Можно ли включить это как настройку?

Возможно, нам понадобятся привязки клавиш для конкретного профиля. Прямо сейчас все привязки можно привязать заново: smile:

Мне нравится, как WSL + Bash обрабатывает копирование / вставку. Ctrl + C копирует, только когда что-то выделено. Если ничего не выбрано, Ctrl + C ведет себя как обычно и отправляет SIGINT.

@namatoj Это прекрасно; именно так и должно быть.

Думаю, мы должны хотя бы поддерживать Ctrl-Insert / Shift-Insert / Shift-Delete, если у Ctrl-C / V / X могут быть конфликты?

ИМО варианты должны быть:

  • «Умное» поведение, где CTRL-C копирует, только если что-то выделено.
  • Настраиваемое поведение с привязками клавиш по умолчанию CTRL-SHIFT-C / V.
  • Нет поведения, копирование доступно в контекстном меню при выборе.

Все обсуждения о том, что « CTRL + C копируется, только если что-то выбрано» игнорируют CTRL + V - нет индикатора, который бы знал, что мы _должны_ вставлять, и если кто-то ценит согласованность выше всего остального, проблематично сказать « CTRL + C only» работает, когда X, но CTRL + V работает всегда ». Альтернатива, « CTRL + C, если выбрано, CTRL + SHIFT + V, чтобы вставлять всегда», также не очень согласована.

Но CTRL-C всегда означает «послать СИГНАЛ», в этом есть огромная двусмысленность. Терминал Ubuntu решает эту проблему, используя CTRL-SHIFT-C / V для копирования / вставки; терминал MacOS решает эту проблему, используя CMD-C для копирования и CTRL-C для прерывания.

CTRL-V не имеет такого конфликта. Некоторые пользователи emacs могут привязывать его к чему-то, но если у вас достаточно опытного пользователя emacs для повторной привязки ключей, вы, вероятно, все равно используете capslock в качестве метаключа.

Я думаю, что основной риск использования «умного» поведения по умолчанию заключается в том, что пользователи случайно прервут процесс, потому что они пропустили свой выбор. Если это вызывает беспокойство или мы хотим согласованности, я бы посоветовал просто скопировать Ubuntu и сделать привязки по умолчанию для CTRL-SHIFT-C / V.

Путем реализации настраиваемых сочетаний клавиш для каждого профиля это может позволить сочетаниям клавиш Ubuntu по умолчанию вести себя должным образом или позволить пользователю изменять их, чтобы ярлыки буфера обмена Windows работали должным образом.

@mikepurvis Умное поведение Ctrl-C без проблем используется во многих терминалах Windows. Мне нравится, как это делает https://github.com/Eugeny/terminus , когда всплывает короткое всплывающее окно, указывающее, что текст был скопирован или вставлен.

@mikepurvis Умное поведение Ctrl-C без проблем используется во многих терминалах Windows. Мне нравится, как это делает https://github.com/Eugeny/terminus , когда всплывает короткое всплывающее окно, указывающее, что текст был скопирован или вставлен.

Всплывающие подсказки для копирования были бы хороши, особенно если Ctrl + C не всегда назначен для копирования.

Gnome Terminal имеет последовательную привязку клавиш, которая сначала не является интуитивно понятной, но легко адаптируется и не слишком отличается от обычного CTRL + C для копирования.

CTRL + C : отмена
CTRL + Shift + C : копировать
CTRL + Shift + V : вставить.

Нет логики для выбора, всегда работает определенным образом. Я думаю, это прекрасно. Это также будет согласовано с другими ОС, поскольку такое поведение согласуется с Linux и MacOS .

На самом деле, я не думаю, что у нас есть оправдания, поскольку в командной строке для копирования используется Enter, а для вставки - щелчок правой кнопкой мыши.

@NatoBoram Это нормально, как вариант. Но многим нравится умное поведение. В остальном в Windows Ctrl + C - это копия, и сложно настроить поведение для одного приложения, поэтому мне нужно разумное поведение.

Кроме того, поскольку Конхост тоже живет здесь; эффекты вставки текста, полученного с помощью Ctrl+C и Ctrl+Shift+C имеют разные эффекты.

image

Способ чтения буфера правильный для Ctrl+C известного как ярлык умного поведения (то есть с окончанием строки).

У всех terminal -подобных приложений есть эта проблема ( CMD , Powershell , WLS -apps), и, поскольку мозг, стоящий за всеми ними, живет здесь, подумал я выложу это.

Везде в Windows Ctrl + C копирует

И в Linux, и в MacOS. В этом отношении Windows ничем не отличается.

Трудно настроить поведение для одного приложения

Да, именно поэтому Microsoft решила, что было бы неплохо использовать Enter для копирования и щелчок правой кнопкой мыши для вставки.
* Кхм *
Я имею в виду, что сложно настроить поведение для одной операционной системы. 🧂

Еще одно голосование (даже если вопрос закрыт) за возможность настройки умного поведения. Я бы, например, всегда настраивал умное поведение для копирования и CTRL+v для вставки. Если у меня выделен текст и я хочу отправить SIGINT, я ожидаю, что я нажму ESC а затем CTRL+c .

То же самое и здесь, мне бы хотелось иметь возможность всегда вставлять ctrl + v и ctrl + c для копирования при выборе и SIGINT, когда выделения не существует. Это то поведение, которое у меня сейчас есть в conemu.

: tada: Эта проблема устранена в # 1093, который теперь успешно выпущен как Windows Terminal Preview v0.3.2142.0 .: tada:

Полезные ссылки:

🎉Эта проблема устранена в выпуске №1093, который теперь успешно выпущен как Windows Terminal Preview v0.3.2142.0 .🎉

Полезные ссылки:

* [Release Notes](https://github.com/microsoft/terminal/releases/tag/v0.3.2142.0)

* [Store Download](https://www.microsoft.com/store/apps/9n0dx20hk701?cid=storebadge&ocid=badge)

Добавление этих привязок клавиш делает свое дело

{
                "command" : "copy",
                "keys" : 
                [
                    "ctrl+shift+c"
                ]
},
{
                "command" : "paste",
                "keys" : [
                    "ctrl+shift+v"
                ]
}

Почему никто не подумал сделать это замазкой? В настоящее время вся пользовательская база использует putty или cygwin. Выберите для копирования, щелкните правой кнопкой мыши, чтобы вставить. Нет ничего проще.
Изменить: удален невоспитанный комментарий. сожалею

никто не думал о

Вы имеете в виду # 524 и # 2152 (что является запросом на вытягивание одного из членов команды?)

Небольшое примечание: почему вставка текста, скопированного с помощью Ctrl+C и Ctrl+Shift+C похоже, имеет разные эффекты в PowerShell (описанный выше в одном из комментариев, повторенный здесь, 🙈 извините!)?

Лично я предпочитаю «тупое» поведение копирования, т.е. отдельную привязку для него, вместо привязки ctrl + c (обычно SIGINT) для копирования, когда что-то выбрано и нарушает поведение по умолчанию многих оболочек. Это может раздражать, когда вы случайно закрываете приложение, работающее на переднем плане, когда вы пытаетесь что-то скопировать. Текущая реализация великолепна!

Я добавил привязки для Ctrl + C (который копирует, если выбран и отправляет SIGINT) и Ctrl + V, которые работают отлично и очень интуитивно понятны для меня.

Как сказал @aolchawa , добавив

        {
            "command" : "copy",
            "keys" : 
            [
                "ctrl+c"
            ]
        },
        {
            "command" : "paste",
            "keys" : [
                "ctrl+v"
            ]
        }

к привязкам клавиш приводит к " умному " поведению
Я не совсем понимаю, как терминал сейчас выбирает между SIGINT и Ctrl + C, я не вижу изменения в # 1093, которое определяет это, я вижу в строке 46, мы теперь передаем trimWhitespace в CopyTextEventArgs .
Я полагаю, что это должно быть частью изменения, которое вызывает желаемое (для меня) поведение.
Похоже, что в profiles.json или схеме профиля нет конфигурации, которую можно использовать для переключения поведения.

В любом случае это именно то поведение, которое я искал; Надеюсь, моя бессвязная беседа спасет кого-то на несколько минут, копаясь в PR, чтобы понять, что происходит.

@ltomes Итак, изменение, которое заставило Терминал выбирать между SIGINT и Ctrl + C, на самом деле было # 2446. Теперь название немного вводит в заблуждение: на самом деле он реализует «если действие привязки клавиш говорит, что оно ничего не делало (или не было обработано), дайте Терминалу второй шанс справиться с этим». :улыбка:

Спасибо за продолжение / объяснение @ DHowett-MSFT! Теперь, видя это изменение, я чувствую себя более разумным, я думал, что устал действовать. 🤣

Спасибо за привязки клавиш.
Теперь Windows Terminal работает как Windows cmd. :) (я был действительно удивлен, что он не работал как стандартный Windows cmd)

Gnome Terminal имеет последовательную привязку клавиш, которая сначала не является интуитивно понятной, но легко адаптируется и не слишком отличается от обычного CTRL + C для копирования.

CTRL + C: отмена
CTRL + Shift + C: копировать
CTRL + Shift + V: вставить.

Нет логики для выбора, всегда работает определенным образом. Я думаю, это прекрасно. Это также будет согласовано с другими ОС, поскольку такое поведение согласуется с Linux и MacOS .

На самом деле, я не думаю, что у нас есть оправдания, поскольку в командной строке для копирования используется Enter, а для вставки - щелчок правой кнопкой мыши.

Я всегда переопределяю Gnome Terminal, чтобы вместо этого использовать CTRL + C / CTRL + V. Меня бесит то, что это одно приложение использует разные привязки для копирования / вставки, чем остальная часть всей системы.

Обходной путь путем ручного добавления привязки клавиш полезен, но давайте назовем вещи своими именами: проблема не будет решена, пока не появятся повсеместные привязки клавиш по умолчанию для функции копирования-вставки. Что, конечно, должно быть отменено. И обязательно должны быть задокументированы.

Какая-либо конкретная причина для регистрации Ctrl + Insert как ;5~ и Shift + Insert для регистрации как ;2~ и, следовательно, не работы в качестве привязки клавиш для копирования / вставки?

Я просто люблю эти ключи и не могу понять, почему они не должны работать

@darthcabs Не

привязки с аккордами (это не сработает, а когда сработает, то не будет иметь желаемого эффекта)

"keybindings": [
    { "command": "copy", "keys": ["ctrl+shift+c", "shift+ins"] }
]

индивидуальные привязки (это должно сработать; # 3324 предполагает проблему, которую мы не можем воспроизвести)

"keybindings": [
    { "command": "copy", "keys": ["ctrl+shift+c"] },
    { "command": "copy", "keys": ["shift+ins"] }
]

@ DHowett-MSFT Я отвечал вам, когда понял, в чем проблема ... На клавиатуре моего ноутбука клавиша INS такая же, как клавиша F12.

Раньше я пытался ввести INS, нажав FN + F12, но, как оказалось, проще сопоставить копирование / вставку в Терминале с ctrl + f12 / shift + f12 соответственно.

Большое спасибо за вдохновение, лол!

@darthcabs Не

привязки с аккордами (это не сработает, а когда сработает, то не будет иметь желаемого эффекта)

"keybindings": [
  { "command": "copy", "keys": ["ctrl+shift+c", "shift+ins"] }
]

индивидуальные привязки (это должно сработать; # 3324 предполагает проблему, которую мы не можем воспроизвести)

"keybindings": [
  { "command": "copy", "keys": ["ctrl+shift+c"] },
  { "command": "copy", "keys": ["shift+ins"] }
]

Для меня сработало shift+insert , а не shift+ins - публикация здесь на всякий случай кому-то поможет.

Как мы видим, это постоянно возникающая проблема, потому что она не интуитивно понятна. См. Https://github.com/ayugioh2003/today-i-learned/issues/281

Ctrl + C, Ctrl + V должны «просто работать», и обойти это невозможно. Пользователи вынесли (и продолжают делать) свой вердикт.

И так как новый инструмент командной строки (не этот) работает «правильно», т.е. как и ожидалось, это тоже должно быть. Если вам, разработчикам, нравится другой сценарий, добавьте его как настройку и оставьте популярное поведение по умолчанию.

Я ценю ваш вклад здесь. Благодаря! Подчеркну пару моментов:

  • Это установка сегодня! Эти привязки клавиш могут быть установлены в profiles.json .
  • Предварительный взгляд на пользователей, которые _устроили_ свои профили, показывает, что менее 1% пользователей Терминала связывают ctrl + c / v. Похоже, что популярное поведение было установлено по умолчанию.

Но это при условии, что люди знают, как это изменить. Простите за плохие манеры.

Более значимой метрикой будет то, сколько нажатий Ctrl + V имеет что-то
в их буфер обмена, а затем получил ^ V, затем стер его или просто закончил на
выход из приложения ...

Ден торс 19 марта 2020 02:31 Дастин Л. Хауетт (MSFT) [email protected]
скрев:

Для всех, кто попадает в эту ветку от Google: по умолчанию используются комбинации клавиш Ctrl+Shift+C и Ctrl+Shift+V . Я не нашел их в своих настройках, поэтому не был уверен, какие они используются по умолчанию.

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

С точки зрения доступности использование комбинации из 3 клавиш или щелчка мыши + клавиша очень сложно, если не невозможно, для людей с одной рукой или другими ограниченными функциями руки. Это большая причина, по которой я не могу использовать emacs и застрял на vi / vim.

Поведение по умолчанию, которое у нас было в Linux / Xwindows за последние 20 лет, является наиболее доступным. DoubleClick, чтобы выбрать слово, трижды щелкните строку и щелкните правой кнопкой мыши вставку. Похоже, что это работает во фрейме терминала, но не заполняет буфер обмена надежно. Примечание. В ConEmu есть эта функция - я могу выделить текст в терминале, и он заполнит буфер обмена.

@ DHowett-MSFT, я тоже застрял, не понимая, почему копирование / вставка не работает так же, как любой другой терминал в Windows или Linux (что и привело меня к этой проблеме с github после некоторого поиска). Я не думаю, что люди предпочитают этот параметр, они просто не знают, как его изменить, и не чувствуют себя комфортно при редактировании файла привязок клавиш.

не работает так же, как любой другой терминал в Windows или Linux

Это немного драматично, учитывая, что текущее поведение терминала по умолчанию (Ctrl-Shift-C / V) точно соответствует тому, что делает терминал по умолчанию в Ubuntu.

Это вопрос более высокого уровня; для кого мы должны оптимизировать? Ясно, что не
пользователи Windows ...

Den tors 9 апр. 2020 19:08 Майк Первис [email protected] skrev:

Я просто говорю, что несправедливо сжимать наши жемчужины и утверждать, что команда Терминалов сделала здесь неправильный звонок, потому что он отличается от «любого другого терминала в Windows или Linux», когда каждый другой терминал в Windows является делом третьей стороны. и команда здесь _ скопировала по умолчанию то, что ведущий дистрибутив Linux делал всегда_.

И единственная причина, по которой это не проблема и в Mac OS, заключается в том, что cmd и ctrl в этой системе являются отдельными кнопками.

Все справедливо, Майк, но давайте посмотрим правде в глаза, большинство пользователей Windows не узнают
как вставить в этот терминал.

Это моя единственная проблема. Не только мой, но и много людей, много людей
достаточно хорошо разбирается в Windows, но не имеет никакого опыта работы с Linux, и
есть проблема с тем, что никто не знает, сколько именно. Мы хотим этих людей
использовать терминал или отклонить его как неполнофункциональный?

Если нас устраивает текущее положение дел, то, по крайней мере,
давайте измерим, сколько попыток вставить, но не может.

Если нам не нужна телеметрия по этому поводу, то как насчет небольшого счетчика и когда
вы пробовали 3 раза за 3 минуты, покажите уведомление со ссылкой на
Эта проблема.

... Шучу, инструкция как поменять.

Den tors 9 апр. 2020 19:57 Майк Первис [email protected] skrev:

Ради телеметрии я только что скачал и построил этот терминал сегодня, и пока это моя единственная серьезная жалоба. В настройках есть опция, которая указывает мне, что Ctrl-C / V должен работать, но совершенно очевидно, что это не так. Пожалуйста, включите упомянутую выше функцию "Smart Ctrl-C", это моя жалоба №1 на CMD с незапамятных времен. :)

Хочу отметить, что я обнаружил эту проблему, пытаясь выяснить, как Терминал Windows реализовал копирование. Одна из самых больших жалоб, которые я слышу от разработчиков, работающих как над Linux, так и с Windows, заключается в том, что копирование / вставка Windows несовместимо с любой установленной сторонней оболочкой и между Linux. Почти каждый дистрибутив / терминал Linux использует ctrl+shift+c/v , поэтому я рад, что в Терминале Windows это также установлено по умолчанию.

Почему бы не использовать Ctrl + C / V и Ctrl + Shift + C / V?

@ bjorn-ali-goransson На самом деле мы просто изменили файл настроек по умолчанию, чтобы включить оба, так что пользователи могут легко отказаться от Ctrl + C / Ctrl + V, если захотят.

См. Этот PR и # 5187

  • Похоже, что популярное поведение было установлено по умолчанию.

Бред какой то. Это означает, что люди отказываются от попыток исправить это или не знают, что это можно исправить.

Это причина, по которой я сейчас вообще на этой теме.

@soilstack спасибо. Прочтите последние сообщения в этой ветке.

Меня действительно поразило то, что вы, ребята, не можете понять, как сделать что-то настолько фундаментальное, как эта работа! Это большое дело. Мне нравится все остальное в приложении «Терминал», но этот основной недостаток улавливает меня каждый раз, когда я его использую.

@SteveIves Вы же знаете, что можете менять сочетания клавиш, как хотите, верно? Если вы хотите, чтобы Ctrl + C / V использовался для копирования и вставки, добавьте их в свои сочетания клавиш. Если вам нужны Ctrl + Shift + C / V , вы тоже можете их использовать. Если вы хотите, чтобы alt + q был скопирован, а shift + 0 вставлен, сделайте это.

Начиная с версии 1.0, по умолчанию используются Ctrl + Shift + C / V в качестве копирования и вставки, а новые пользователи _также_ получат Ctrl + C / V в качестве копирования / вставки в своем файле настроек.

РЕДАКТИРОВАТЬ:используйте любое подмножество из них, которое хотите:

{
  "keybindings": [
    // Ctrl+C / Ctrl+V for copy paste
    { "keys": "ctrl+c", "command": "copy"},
    { "keys": "ctrl+v", "command": "paste"},

    // Ctrl+Shift+C / Ctrl+Shift+V for copy paste
    { "keys": "ctrl+shift+c", "command": "copy"},
    { "keys": "ctrl+shift+v", "command": "paste"},


    // Disable Ctrl+Shift+C / Ctrl+Shift+V for copy paste
    { "keys": "ctrl+shift+c", "command": "unbound"},
    { "keys": "ctrl+shift+v", "command": "unbound"},
  ]
}

@ zadjii-msft да, я знаю это, и как разработчик я могу это сделать. Но если вы хотите, чтобы Терминал заменил cmd.exe, вам нужно это исправить.

Из любопытства, какая часть

Начиная с версии 1.0, по умолчанию используются Ctrl + Shift + C / V в качестве копирования и вставки, а новые пользователи _также_ получат Ctrl + C / V в качестве копирования / вставки в своем файле настроек.

мы не исправляем это?

Ctrl + Shift + C / V неестественно. Тоже не контекстное меню? Я считаю Терминал Windows полезным, но отсутствие меню и Ctrl + C / V заставляет меня пересмотреть свои варианты.

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги