Использование двойного щелчка в окне терминала в Fedora 24 с помощью vim для выполнения копирования и вставки

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

Однако это поведение не работает в Fedora 24 при использовании vim. Если я дважды кликнул в сеансе vim, он выбирает только один сегмент имени файла, и он фактически не копирует эту часть в буфер обмена, потому что я не могу вставить ее средним щелчком.

Есть ли какая-то настройка в vim, которая вызывает это поведение (поэтому я могу отключить его)? Если я использую \vi file скопировать-вставку \vi file работает нормально, но я теряю подсветку синтаксиса.

Я использую Fedora 24 и vim версии 2: 8.0.124-2.fc24. У меня установлены следующие пакеты: vim-common, vim-Enhanced, vim-filesystem, vim-minimal.

  • Можно ли создавать и использовать меню в (терминальном) vim?
  • В чем проблема предоставления права на использование sudo vim?
  • Расширение youCompleteMe vim: как перейти к следующей ошибке?
  • обратные ссылки в regex `rename`
  • Копировать / вставить через vim без X
  • Минимизировать текущую ширину окна в Vim
  • В vim, как отобразить «command-right» и «command-left» до начала строки и конца строки на mac?
  • Поиск vim вокруг разрывов строк
  • One Solution collect form web for “Использование двойного щелчка в окне терминала в Fedora 24 с помощью vim для выполнения копирования и вставки”

    Все это в онлайн-справке vim. Но он распределяется по doco для ряда переменных и опций, и на самом деле нет действительно всеобъемлющего руководства по всему этому.

    Нормальный режим

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

    Если вы запускаете минимальный vim (который является программой с именем vi ) или используйте :set mouse= в полном vim, это то, что вы получаете. Если вы когда-либо пробовали вставлять в vim с помощью средней кнопки мыши, вы поймете, что vim явно не участвует в пасте, потому что если вы не находитесь в режиме вставки в то время, когда вставленный текст рассматривается как команды vim.

    Режим сообщений мыши

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

    Когда у вас есть mouse=a или mouse=h или аналогичный набор в vim, он изменяет режим терминала «на лету» между нормальными режимами и режимами сообщений мыши, в зависимости от точной настройки mouse и того, что вы делаете в то время. Например: Когда mouse=h , при переключении на экран справки он переключается на мышь, и при повторном выключении выключается.

    Когда режим отчетности мыши включен, именно vim сам определяет, что такое слово, которое делает выделение вашего выбора и которое передает выбор на и с X-сервера. Если вы запускаете (полный) vim с помощью mouse=a или аналогичный, но не можете узнать, что есть доступный графический интерфейс, удалив переменную среды DISPLAY из своей среды, вы обнаружите, что при выборе и вставке в vim, он не может видеть, что X-выбор и X-приложения не могут его выбрать. Действительно, на экране одновременно могут быть два выбора: один в приложении X и один в vim. (Минимальный vim не имеет возможности разговаривать с X-сервером в своем коде вообще).

    Решив, что такое слово

    Правила для определения того, что слово отличается. Ваш эмулятор терминала, в зависимости от того, какая программа эмулятора он может, может или не позволить вам настроить, как он определяет границы слов. roxterm, Terminate и LXTerminal имеют в настройках диалоги предпочтений «выбор за слова». Другие просто прокладывают это.

    В любом случае ясно, что a/b/c/d – все одно слово. Поэтому, когда эмулятор терминала отвечает за работу с мышью, это то, что он устанавливает как выбор в ответ на двойной щелчок.

    vim имеет свой собственный набор совершенно независимых настроек, которые основаны на том, что считается «ключевым словом» и, таким образом, ссылаются на регулярное соответствие выражений и раскраску синтаксиса. Очевидно, что все, что у вас есть vim, сконфигурированное для понимания текущего файла (параметр iskeyword являющийся локальным для буфера и настраиваемый вашим выбором типа файла), считает, что a/b/c/d является несколькими словами, разделенными слэшами. Так вот что вы получаете, когда vim взял на себя ответственность за действия с мышью.

    дальнейшее чтение

    • :help mouse-using
    • :help mouse
    • :help ttymouse
    • :help double-click
    • :help iskeyword
    • Что означает «мышиная отчетность»?
    • Глобально замените Vi на Vim на Fedora
    • https://unix.stackexchange.com/a/307925/5132
    Linux и Unix - лучшая ОС в мире.