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

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

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

4 ответа

Решение

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

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

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

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

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

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

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

У меня была проблема, потому что мой 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 соответственно.

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

Основываясь на ответе Сергея Колодяжного, если вы скомпилировали vim без поддержки, выполните следующие действия, чтобы скопировать содержимое из vim в системный буфер обмена:

  • Установитьxclip(sudo apt install xclip)
  • Выдерните нужные строки — они будут сохранены в"0регистр
  • Тогда делай:call system('xclip -sel clipboard', @0)чтобы скопировать содержимое в буфер обмена.
Другие вопросы по тегам