Копіювання тексту поза 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.