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)
чтобы скопировать содержимое в буфер обмена.