Vim и системный буфер обмена

9

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

Как я могу скопировать текст в vim и вставить его из системного буфера обмена?

grantbow
источник
иногда я использую sed -n5,10pдля печати строки 5-10, чтобы мне было легче копировать и вставлять, не реагируя vim на мышь.
Грантбоу
на самом деле изнутри vim команда выглядит так:!sed -n 5,10p %
grantbow
Спасибо за все комментарии и ответы. xclip иногда полезен, спасибо @ sergiy-kolodyazhnyy. Когда я работаю на разных машинах, я иногда не могу контролировать, какой vim установлен, но наличие инструкций для проверки ответа @muru полезно, спасибо @ ashutosh-tripathy. Мне нужно чаще использовать команды vim register, чтобы помнить их, когда они мне нужны. Как я уже упоминал в приведенном выше вопросе, если я хочу сделать это быстро, а файл небольшой, то команда внутри vim выглядит так:!cat %
grantbow

Ответы:

12

Вы должны иметь Vim с clipboardи xtermclipboardХарактеристика скомпилирован. В Ubuntu, они доступны только с ВИМ GUI пакетов ( vim-gnome, vim-gtk, vim-athenaи т.д.).

После того, как вы установите один из них, вы можете скопировать (и вставить из) регистры буфера обмена ( *и +). Из этого очень информативного поста о Ви и Виме :

Для систем на основе X11 (т. Е. Linux и большинства других UNIX- подобных систем) есть 2 буфера обмена, которые не зависят друг от друга:

  • ПЕРВИЧНЫЙ - Это копирование на выбор, и его можно вставить с помощью средней кнопки мыши.
  • CLIPBOARD - Копируется (обычно) ^Cи вставляется ^V(Это похоже на MS Windows).

Vim имеет 2 специальных регистра, соответствующих этим буферам обмена:

  • *использует ПЕРВИЧНЫЙ; Мнемоника: s деготь s избирает (для копирования-on с Избранным)
  • +использует CLIPBOARD; мнемоника: CTRL + C (для общего набора клавиш)

Чтобы скопировать в регистр, перед командой копирования ( y) "и именем регистра ( *например). "*y, затем щелкните средней кнопкой мыши, чтобы вставить, или "+yи, ShiftInsertчтобы вставить.

Мур
источник
3

Из этого вопроса вытекает довольно интересное решение . Установите xclip, затем перенаправьте вывод команды в xclip ( cat file | xclip -selection clipboardнапример), а затем вставьте его куда угодно (если это в терминале - используйте Ctrl ShiftV ). Теперь оказывается, что вы можете сократить эту команду до xclip -sel clip, что не совсем очевидно при чтении man-страницы или примеров там.

Сергей Колодяжный
источник
2
Другой выход - если вы используете screen или tmux вместе с этим плагином . В любом случае что-то нужно установить.
Муру
Какой буфер обмена используется на x сервере? Я ничего не нашел /dev, но текст все еще где-то хранится, верно?
Сергей Колодяжный
Я всегда предполагал, что это будет в памяти. Хотя это кажется хорошим вопросом для Unix и Linux .
Муру
3

У меня была проблема, потому что мой vim не поддерживал буфер обмена :

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Я установил vim-gnome (который поддерживает буфер обмена), а затем снова проверил:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Теперь я могу копировать и вставлять, используя "+ y и" + p соответственно.

Ашутош Трипатия
источник