Копіювання тексту поза Vim за допомогою встановленої миші = увімкнено


232

Після ввімкнення set mouse=aтекст, скопійований всередині Vim, не вставитиме поза Vim. Хтось знає спосіб виправити це?

Тут, вибираючи текст за допомогою миші, вмикається візуальний режим і вимикається Copyпараметр у спливаючому меню:

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


2
Якщо ваш vim складений з +clipboardі mouse=a, ви зможете скопіювати / вставити з / в vim, не використовуючи спливаюче меню терміналу. Ви можете перевірити, чи clipboardввімкнено використання vim --version.
Jérôme Pouiller

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

Можливо, встановлення xselтворів теж для вас, ви можете вибрати текст із редактором або мишкою та натиснути, ctrl+cщоб скопіювати текст, до речі, це для neovim, github.com/neovim/neovim/isissue/7945#issuecomment-361970165
Naeem

Відповіді:


426

Натискаючи shiftпід час вибору за допомогою миші. Це призведе до того, що вибір миші веде себе так, ніби mouse=aне було включено.

Примітка: ця хитрість також стосується "вставлення середньої кнопки": якщо ви хочете вставити текст vim, який було обрано зовні, натисніть shift, натискаючи середню кнопку. Просто переконайтеся, що при цьому ввімкнено режим вставлення (можливо, ви також хочете :set pasteуникнути несподіваних ефектів).

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


2
Гаразд, це справді рішення. Але що робити, якщо ви хочете вибрати багато коду, який більше, ніж на екрані? (тоді вам потрібно прокрутити і вибрати одночасно)
Озкан

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

6
Якщо у вас є номери ліній (як показано на скріншоті), тоді, коли вибираєте ALT на Mac OS X, номери рядків також копіюються. У цьому випадку краще використовувати ALT + CMD при виборі для режиму вибору блоку, щоб уникнути вибору цифр.
Аарон

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

1
Я не знаю, як ця відповідь має стільки відгуків. Якщо ви включили підтримку миші, щоб уникнути копіювання номерів рядків, то ця пропозиція є абсолютно марною.
Stelios

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залежно від ОС.
frabjous

Це спрацювало! Однак комбінація є досить складною, 4 кнопки насправді .. Напевно, мені потрібно зіставити іншу, використовуючи шлях «перехід» від іншої відповіді.
Люба

Картограф також працює чудово :) Зараз я не знаю, яку відповідь від вас, хлопці, слід позначити як прийняту :)
Люба

2
Для мене це краще рішення, ніж прийнята відповідь, оскільки при цьому методі номери рядків не копіюються.
Саулу Сільва

Про що +clipboard? А що +clipboardз xterm_clipboardвимкнено?
барлоп

18

Замість set mouse=aвикористання set mouse=rв .vimrc


1
Але це відключає прокрутку
Makesh

3
Скажіть, будь ласка, чому. На перший погляд, це в основному те саме, що повністю відключити режим миші, що не в цьому питання.
Мікель

@Mikel праворуч, дивіться мою відповідь також може допомогти відповідь Джоша Лі
барлоп

На жаль, це також буде копіювати номери рядків, якщо вони включені.
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, щоб переключити його.) Це дозволяє перемикатися між взаємодією миші та вибором миші, що може бути корисно під час вибору та копіювання / вставки декількох бітів, оскільки у вас немає утримувати клавішу модифікатора, щоб це зробити.

Примітка для багаторядкових номерів рядків:

У мене зазвичай включені номери рядків, тому це також буде копіювати номери рядків, якщо ви виберете кілька рядків. Якщо ви хочете скопіювати кілька рядків без відключення номерів рядків, :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.

Їх у вас буде дві вими.

~$ 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
~$ 

run vim запустить macvim 'cos /usr/local/binмає бути раніше /usr/binна шляху, хоча ви можете перевірити which vim.

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

macvim має, +clipboardяк показано наvim --version

Ось робота ~/.vim/vimrcлише з необхідними рядками.

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

Типовим лідером за замовчуванням є зворотна косої риски.

Я прочитав пропозицію про те, що слід використовувати клавішу лідера .. (звичайно, у керуванні є багато клавіш, які вже використовуються, тому пропозиція полягала в тому, щоб не використовувати контроль. Не знаю, чи це стосується і командного ключа, але так чи інакше).

При цьому згадане відображення, \cзробить "+yяке копіювання з реєстру, відомого як +, до буфера обміну. І\v вставить з реєстру, відомого як +.

Отже, це копія / вставка, яка працює між вікнами.

Інша ОС може вимагати, "*а не"+


Обидві вими є -xterm_clipboard. Можливо, +xterm_clipboardдеяким чином корисно буде, але це рішення не має значення.
барлоп

0

Якщо ви використовуєте сеанс Putty, він автоматично копіює виділення. Якщо ми використовували опцію "встановити мишу = a" в vim, вибираючи за допомогою Shift + перетягування миші, текст вибирається автоматично. Потрібно зареєструватися в X-терміні.



0

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



0

Додайте set clipboard=unnamedдо свого.vimrc . Таким чином, він буде використовувати регістр буфера обміну "*" замість безіменного реєстру для всіх yank, видаляти, змінювати та ставити операції (зауважте, це не стосується лише миші).

Поведінка регістра "*" залежить від вашої платформи та того, як ваш файл vimскладено (або якщо ви використовуєтеneovim ).

Якщо це не працює, ви можете спробувати set clipboard=unnamedplus, але ця опція має сенс лише у системах X11.


-3

У режимі ESC, коли встановлено mouse = a, виберіть текст за допомогою миші. Це дозволить зробити візуальний режим in vim. Потім ви можете натиснути «y», щоб витягнути вибраний текст, і «p», щоб вставити його куди завгодно. Це відбувається лише в межах vim.


ні, це не спрацює, коли ви
вставите
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.