Копирование текста за пределы Vim с помощью команды set mouse = a


232

После включения set mouse=aтекст, скопированный внутри Vim, не будет вставлен за пределы Vim. Кто-нибудь знает, как это исправить?

Здесь выделение текста с помощью мыши включает визуальный режим и отключает Copyопцию во всплывающем меню:

введите описание изображения здесь


2
Если ваш vim скомпилирован с +clipboardи mouse=a, вы сможете копировать / вставлять из / в vim без использования всплывающего меню терминала. Вы можете проверить, если clipboardэто включено, используя vim --version.
Жером Пуйлер

@Jezz Стоит уточнить, что A) mouse=aне является опцией компиляции, это что-то в vimrc B) Когда vim был скомпилирован с +clipboardним, вы можете копировать / вставлять, когда :set numberон включен, и без копирования / вставки чисел, хотя, возможно, вам все равно придется сделать некоторые сопоставления C) Не нужно самостоятельно перекомпилировать VIM, это может быть включено в vim на некоторых менеджерах пакетов, поддерживаемых любой ОС. В osx bim имеет vim, хотя в vim по умолчанию osx нет. В моем ответе упоминается этот вопрос.
Барлоп

Может быть установка xselработает для вас тоже, вы можете выделить текст с помощью редактора или с помощью мыши и нажмите , ctrl+cчтобы скопировать текст, кстати , это для neovim, github.com/neovim/neovim/issues/7945#issuecomment-361970165
Наим Баги

Ответы:


426

Нажмите shiftво время выбора с помощью мыши. Это заставит выделение мыши вести себя так, как будто оно mouse=aне было включено.

Примечание: этот прием также применим к «вставке средней кнопки»: если вы хотите вставить текст vim, который был выбран снаружи, нажмите, shiftудерживая нажатой среднюю кнопку. Просто убедитесь, что режим вставки активирован, когда вы делаете это (вы также :set pasteможете избежать неожиданных эффектов).

OS X (mac): удерживайте alt / option при выборе ( источник )


2
ОК, это действительно решение. Но что, если вы хотите выбрать много кода, который больше, чем на вашем экране? (тогда вы должны прокрутить и выбрать одновременно)
Ozkan

3
Существует также возможность использовать выбор блока, нажав <kbd> ctrl </ kbd> + <kbd> shift </ kbd> + левую кнопку мыши, чтобы начать выбор блока. Средняя кнопка мыши вставляет скопированное содержимое в другое окно.
micrub

6
Если у вас есть номера строк (как показано на скриншоте), то при выборе использования ALT в Mac OS X номера строк также копируются. В этом случае лучше использовать ALT + CMD при выборе режима выбора блоков, чтобы избежать выбора номеров.
Аарон

16
Для Mac Terminal, после OS X 10.11 El Capitan , Fnключ - правильный путь. Т.е. (с mouse=aвключением) выделение текста при нажатииFn клавиши, затем используйте CMD + C для копирования и вставки в любое место.
YaOzI

1
Я не знаю, откуда у этого ответа столько голосов. Если вы включили поддержку мыши, чтобы избежать копирования номеров строк, то это предложение совершенно бесполезно.
Стелиос Адамантидис

49

Используйте ", +, yпосле создания визуального выбора. В любом случае вам не следует использовать команду копирования терминала, потому что она копирует то, что видит терминал, а не фактическое содержимое. Вот что это делает:

  • ", +сообщает Vim использовать регистр, названный +для следующего удаления, восстановления или вставки. Именованный регистр +- это специальный регистр, это регистр буфера обмена X11. (В других системах вы бы использовали *вместо этого, я думаю, увидеть :help clipboardи:help x11-selection )
  • y это команда yank, которая говорит Vim поместить выбор в ранее указанный регистр.

Вы можете отобразить это так:

:vmap <C-C> "+y

Затем выделите что-нибудь мышью и нажмите, Control-Cчтобы скопировать.

Эта функция работает только тогда, когда Vim был скомпилирован с +xterm_clipboardопцией. Беги, vim --versionчтобы узнать, есть ли у него.


4
Или возможно в "*yзависимости от ОС.
радостный

Это сработало! Тем не менее, комбинация довольно сложная, на самом деле 4 кнопки. Вероятно, мне нужно сопоставить другую, используя способ «сдвиг» от другого ответа.
Люба

Картографирование также работает отлично :) Теперь я не знаю, какие ответы от вас, ребята, я должен отметить как принятые :)
Люба

2
Для меня это лучшее решение, чем принятый ответ, потому что с этим методом номера строк не копируются.
Сауло Сильва

Как насчет +clipboard? А что +clipboardс xterm_clipboardвыключенным?
Барлоп

18

Вместо set mouse=aиспользования set mouse=rв .vimrc


1
Но это отключает прокрутку
Makesh

3
Пожалуйста, скажи почему. На первый взгляд, это похоже на полное отключение режима мыши, что не является вопросом вопроса.
Микель

@Микель, смотри, мой ответ тоже может помочь, ответ Джоша Ли
скачка

К сожалению, это также скопирует номера строк, если они включены.
vikin9

17

На OSX используйте fnвместо shift.


работал для меня с optionключом, который является altключевым эквивалентом на хосте MacOS. Это был удаленный терминал на Debian9, хотя. не работал, добавив любой из set mouse=a/ set mouse=rв /etc/vim/vimrcна удаленном.
mrtipale

5

В Ubuntu можно использовать привязки X-Term для копирования и вставки внутри VIM (Ctrl-Shift-C и Ctrl-Shift-V) для текста, выделенного с помощью клавиши Shift.


4

Другой вариант OSX-Mac - снять флажок View->Allow Mouse Reporting(или нажать ⌘-R для его переключения). Это позволяет переключаться между взаимодействием с мышью и выбором мыши, что может быть полезно при выборе и копировании / вставке нескольких битов, поскольку у вас нет держать клавишу модификатора, чтобы сделать это.

Примечание для Multiline с номерами строк:

У меня обычно включены номера строк, так что это также будет копировать номера строк, если вы выберите несколько строк. Если вы хотите скопировать несколько строк без номеров строк, отключите номера с помощью, :set nonuа затем вы сможете :set nuснова включить их после завершения копирования.


1

Вы можете использовать :set mouse&в командной строке vim включить копирование / вставку текста, выделенного с помощью мыши. Затем вы можете просто использовать среднюю кнопку мыши или shiftinsertвставить ее.


Затем, когда у вас есть, :set numberвыделяются цифры. Так что не очень хорошо. Таким образом, вы set mouse=a
отменяете

1

Параметры компиляции, с которыми был скомпилирован vim, являются частью проблемы. vim --versionпоказывает это.

В OSX по умолчанию vim имеет, -clipboard но вам нужно+clipboard

На OSX вы можете и, по-видимому, как правило, следует использовать Macvim. Вы можете сделать то, brew cask install macvim что есть +clipboard.

Их у вас будет два VIMS.

~$ ls -l /usr/bin/vim   <--- default vim
-rwxr-xr-x  1 root  wheel  1745984 15 Jul  2017 /usr/bin/vim

~$ ls -l /usr/local/bin/vim   <-- macvim, installed recently via that mentioned brew line. 
lrwxr-xr-x  1 apple  admin  42 16 May 23:32 /usr/local/bin/vim -> /Applications/MacVim.app/Contents/bin/mvim
~$ 

Запуск vim запустит macvim, потому что он /usr/local/binдолжен быть /usr/binв пути, хотя вы можете проверить с помощью which vim.

запуск vim (для запуска macvim) - это нормально, но вы можете захотеть отобразить vi на macvim, потому что в противном случае запуск vi останется по умолчанию vim! Вы можете переписать или удалить (с помощью rm) и заново создать ссылку на sy sym с помощью ln. И чтобы сделать это без ошибки «операция не разрешена», вам необходимо (временно) отключить SIL. Https://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity-protection- sip-aka-rootless-on-macos-os-x .

Маквим имеет +clipboardкак показаноvim --version

Вот работа ~/.vim/vimrcтолько с необходимыми строками.

:set mouse=a
:map <leader>c "+y
:map <leader>v "+p

Лидером по умолчанию является обратный слеш.

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

С этим упомянутым отображением \cбудет выполнено "+yкопирование из регистра, известного как +, в буфер обмена. И\v будет вставлять из реестра, известного как +.

Так что это копирование / вставка, которая работает между окнами.

Другая ОС может потребовать, "*а не"+


Оба VIMS имеют -xterm_clipboard. Может быть, что- +xterm_clipboardто будет полезно, но это не имеет значения для этого решения.
Барлоп

0

Если вы используете сессию Putty, то она автоматически копирует выделение. Если мы использовали опцию «set mouse = a» в vim, выбор с помощью Shift + перетаскивание мышью выделяет текст автоматически. Нужно проверить в Х-семестре.


0

Эм ... Продолжайте нажимать, Shiftа затем нажмите правую кнопку мыши


0

Я случайно объяснил, как выключить set mouse=a, когда перечитал вопрос и обнаружил, что ОП вообще не хочет его выключать. В любом случае для тех, кто ищет, как set mouse=централизованно отключить мышь ( ), я оставляю ссылку на свой ответ здесь: https://unix.stackexchange.com/a/506723/194822



0

Добавьте set clipboard=unnamedк своему .vimrc. Таким образом, он будет использовать регистр буфера обмена '*' вместо безымянного регистра для всех операций yank, delete, change и put (обратите внимание, что это влияет не только на мышь).

Поведение регистра '*' зависит от вашей платформы и от того, как вы vimее скомпилировали (или если вы используетеneovim ).

Если это не работает, вы можете попробовать set clipboard=unnamedplus, но этот вариант имеет смысл только в системах X11.


-3

В режиме ESC, когда установлено mouse = a, выделите текст с помощью мыши. Это включит визуальный режим в vim. Затем вы можете нажать «y», чтобы восстановить выделенный текст, и «p», чтобы вставить его в любое место. Это происходит только в VIM.


нет, это не сработает, когда вы вставляете вне vim
barlop
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.