Vim에서 시스템 클립 보드로 텍스트를 복사하려면 어떻게해야합니까?


282

텍스트 블록을 시스템 클립 보드에 복사하여 다른 프로그램에 붙여 넣을 수있는 방법이 있습니까?


12
이것은 이미 SO에 대해 묻고 대답했습니다. 더 많은 정보를 찾을 수 있습니다.
bsmith89

1
macvim christoomey / vim-system-copy 에서이 플러그인을 사용 하고 있으며 정말 좋아합니다. 그것은 움직임과 정말 잘 작동 cpip, cpi{.
Filype

2
실제로 필요한 것은 EasyClip 입니다. 그것은 훨씬 더 많은 일을 할 것입니다 ...
Scott Wade

답변:


321

들어 X11 기반 시스템 (. 즉, 리눅스 및 대부분의 다른 UNIX -like 시스템) 서로 독립적 인 두 개의 클립 보드가 있습니다 :

  • 기본-선택시 복사되며 마우스 가운데 버튼으로 붙여 넣을 수 있습니다.
  • CLIPBOARD-(보통)로 복사하고 ( MS Windows와 유사)로 ^C붙여 넣습니다 ^V.

OS XWindows 시스템에는 하나의 클립 보드 만 있습니다.

X11 시스템에는 이러한 클립 보드를 동기화하는 여러 도구가 있습니다. 동일한 것으로 보이면 그 중 하나가 실행 중일 수 있습니다.

Vim에는이 클립 보드에 해당하는 두 개의 특수 레지스터가 있습니다.

  • *PRIMARY를 사용합니다. 연상 기호 : S의 타르는 S (복사 - 온에 대한 차기 차기)
  • +CLIPBOARD를 사용합니다. 니모닉 : CTRL PLUS C (공통 키 바인드 용)

윈도우 및 OS X에 사이에는 차이가 없다 +하고 *, 이러한 시스템은 하나의 클립 보드를 갖고 있기 때문에, 두 레지스터 (당신이 사용하는 하나 중요하지 않습니다) 같은 일을 참조하십시오.

이 레지스터를 임의의 레지스터로 사용할 수 있습니다. 예를 들어, and 명령 *과 함께 PRIMARY 클립 보드 사용 :yp

  • "*yy
  • "*p

이를보다 편리한 키 바인드로 사용할 수 있습니다.

noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>Y "+y
noremap <Leader>P "+p

시스템 클립 보드를 항상 수동으로 참조하는 대신 "자동으로"인터페이스하려는 경우 clipboard변수를 설정할 수 있습니다 .

  • unnamed사용하도록 설정 *(PRIMARY, 선택시)
  • unnamedplus사용하도록 설정 +(CLIPBOARD, ^C)

이제 사용 yy하면 Vim의 명명되지 않은 레지스터 대신 시스템의 클립 보드로 이동하여 시스템의 클립 보드 p를 붙여 넣습니다.

다음과 같은 레지스터와 마찬가지로 이러한 레지스터에 할당 할 수도 있습니다 let.

  • :let @+=42
  • :let @*=42

clipboard설정 (예 : 제외 필터 등) 좀 더 많은 옵션을 가지고; 그러나 이것들은 기본입니다. :help 'clipboard'전체 이야기를 참조하십시오 ;-)

gVim

gVim을 사용하면를 사용할 때 선택시 복사 동작을 얻을 수 있습니다 :set guioptions+=a.
X11 시스템 (기본으로 복사)에서는 기본적으로 활성화되지만 MS Windows & OSX에서는 활성화 되지 않습니다 (텍스트를 선택하면 클립 보드가 무시 됨).

아니 +clipboard?

Vim은 +clipboard기능 플래그 가 필요합니다 . 당신의 빔을 사용하여이이 있는지 확인할 수 있습니다 :echo has('clipboard')(출력 인 경우 빔 내에서 0, 그것의 하지 가 있다면, 현재 1그것이,), 또는 출력 확인 vim --version을위한을 +clipboard.

대부분의 Linux 배포판에는 기본적으로 "최소"Vim 빌드가 포함되어 +clipboard있지만이 패키지는 설치 되어 있지 않지만 일반적으로 설치할 수 있습니다.

  • 데비안 및 우분투 : 설치 vim-gtk또는 vim-gnome.
  • Fedora : install vim-X11, ( more info ) vimx대신 실행하십시오 .vim
  • 아치 리눅스 : 설치 gvim( +clipboard일반적 vim으로도 가능).

당신은 또한 사용할 수 있습니다 xclip, xcopy또는 xsel클립 보드에 텍스트를 복사; 솔루션에 대해서는 다음 질문을 참조하십시오.

SSH

SSH를 통한 X11 전달을 활성화하면 원격 시스템에서 클립 보드를 사용할 수도 있습니다. xclip데스크톱의 클립 보드에 액세스 하는 데 사용할 수 있으므로 위의 팁에 특히 유용합니다 . ssh-ing하려는 머신의 Vim에는 여전히 +clipboard기능이 필요합니다 .

이를 위해서는 ForwardX11Trusted설정 이 필요하며 서버 는 X11 세션을 거의 완벽하게 제어 할 수 있으므로 신뢰할 수있는 서버로만 수행 해야 합니다 .

$ ssh -XY myhost

이러한 설정을 지속적으로 유지하려면 ( -XY매번 추가 할 필요가 없습니다 ) 다음과 같이 할 수 있습니다 ~/.ssh/config.

# Do **NOT** set this globally; it gives the server complete control over
# your X11 session.
Host myhost
    ForwardX11 yes
    ForwardX11Trusted yes

네오 빔

Neovim은 클립 보드 지원을 개선했습니다. 내장 된 인터페이스는 제거와 같은 외부 유틸리티를 호출하는 시스템으로 대체 xclip, xsel또는 pbcopy/ pbpaste.

이러한 유틸리티는 자동으로 선택하여 사용해야합니다. OS의 X에 pbcopypbpaste기본적으로 사용할 수 있어야합니다, 리눅스에 당신은 아마 설치할 xclip즉 가장 널리 사용할 수로서, (실제로는 거기에 두 가지 의 버전 xsel호환되지 않는 플래그 . 이건 정말 바보입니다).

:help clipboardNeovim을 참조하십시오 .


6
ssh -Y는 -X를 의미하므로 -X는 생략 할 수 있습니다.
초에 hildred

일부 국제 키보드의 경우을 ( "<Space>를) 받으려면 을 (를) 눌러야 할 수도 있습니다 ". 이 경우 "<Space>+y또는 "<Space>*y을 눌러 복사해야합니다.
Arthur F

1
저를 위해 이것을 배우는 것의 매우 흥미로운 부작용은 "많은 명명 된 레지스터를 선택할 수 있는 실현 이었습니다. "+마술이 아니라, 그냥 register +입니다. 그래서 예를 들어, 당신은 동시에 세 가지를 복사 한 일을 수행 할 수 있습니다에 의해 그들 각각을 붙여 넣을 경우 "1y, "2y그리고 "3y나중에 "1p, "2p그리고 "3p. 이것은 거의 모든 편집기에서 실제로 강력하고 존재하지 않습니다. 또 다른 흥미로운 사용법은 저장된 매크로를 보는 것입니다. 예를 들어,로 기록 qq했지만 문제를 해결해야한다는 것을 알고있는 경우 임시 행에서 "qp, 수정 및을 수행 할 수 있습니다 "qd.
Shahbaz

1
참고 사항 : OS X에는 두 개의 별도 클립 보드가 있습니다. 하나는 Cmd-C 및 Cmd-V를 사용하여 액세스하고 다른 하나는 emacs 키 바인딩 Ctrl-K 및 Ctrl-Y를 사용하여 액세스합니다.
BallpointBen

3
@shahbaz-번호 매기기는 텍스트가 삭제 될 때마다 변경되기 때문에 문자 레지스터를 사용하는 것이 좋습니다.
evilsoup

18

다른 답변은 버퍼에서 시스템 클립 보드로 텍스트를 복사하는 방법을 다룹니다. 다른 일반적인 작업은 다른 레지스터 에서 클립 보드로 텍스트를 복사 하는 것입니다. 예를 들어, 일부 텍스트를 이미 "기본 레지스터에 넣은 경우 해당 레지스터를 클립 보드에로드 할 수 있습니다.

당신은 이것을 할 수 있습니다 :let:

  • let @+=@" — 기본 레지스터를 클립 보드에 복사
  • let @*=@" — 기본 레지스터를 X11 기본 선택 항목으로 복사합니다 ( "마우스 클립 보드")
  • let @+=@a— 등록 a에서 클립 보드로 복사
  • 기타

이것은 일반적으로 레지스터에서 작동합니다. let @a=@bcopy register bto register a.


17

에서 http://vim.wikia.com/wiki/Accessing_the_system_clipboard

set clipboard=unnamedplus

이렇게하면 기본 Vim 레지스터가 +시스템 클립 보드에 연결된 레지스터로 변경 됩니다. 보낸 사람 :h clipboard-unnamedplus:

                                        clipboard-unnamedplus
unnamedplus     A variant of the "unnamed" flag which uses the
                clipboard register '+' (quoteplus) instead of
                register '*' for all yank, delete, change and put
                operations which would normally go to the unnamed
                register.  When "unnamed" is also included to the
                option, yank operations (but not delete, change or
                put) will additionally copy the text into register
                '*'.
                Only available with the +X11 feature.
                Availability can be checked with: 
                        if has('unnamedplus')

vim 인스턴스 (각기 별도의 터미네이터 터미널에 있음) 사이를 잡아 당겨 붙여 넣을 때 왜 이것이 작동하지 않습니까?
thinwybk

Linux를 사용 중이고 Vim이 + X11 기능으로 컴파일되었고 clipboard = unnamedplus가 설정되어 있으면 vim의 한 인스턴스에서 줄을 잡아 당겨 다른 vim 인스턴스에 붙여 넣을 수 있어야합니다. CTRL + V 또는 SHIFT + INSERT를 사용하여 다른 응용 프로그램에 붙여 넣을 수도 있습니다. 당신은 사용할 수 있습니다 :version+ X11 포함 기능 목록에 나타납니다 있는지 확인하기 위해 빔 내에서. 'unnamedplus'기능을 사용할 수있는 경우 당신은 또한 확인할 수 있습니다 :if has('unnamedplus')⏎ echo 'yes'⏎ endif 당신이 대신 unnamedplus의 이름이 사용해야 당신이 리눅스에 있지 않은 경우.
퀸시 바우어

10

이를 지원하는 빌드에서 이름 *이 지정된 레지스터 는 시스템 클립 보드입니다. Vim에서 시스템 클립 보드로 텍스트를 복사하려면 시각 모드를 사용하여 텍스트를 선택한 다음을 눌러 "*y시스템 클립 보드로 복사하십시오.

반대로, "*p시스템 클립 보드의 텍스트를 Vim에 붙여 넣는 데 사용하십시오 .


5

Gvim을 사용하고 이것을 다음에 추가하는 것이 좋습니다 .vimrc.

source $VIMRUNTIME/mswin.vim
behave mswin

이 지원을 가능하게 CtrlC, CtrlX, CtrlVWindows의 메모장처럼.

또한 CtrlSfor :w, CtrlA모두 선택 등의 일반적인 Windows 바로 가기가 추가됩니다 .


0

vim이 지원하지 않으면 Linux, Mac, Windows, tmux, screen, ...에 가짜 클립 플러그인을 +clipboard사용할 수 있습니다


0

다른 모든 답변은 레지스터에 관한 모든 중요한 사항을 다루었습니다. 내가 사용하는 것을 하나 더 추가하고 싶습니다.

Vim에서 시각적으로 선택된 텍스트를 클립 보드에 직접 복사하는 방법이 있습니다 . 이것을 vimrc 파일 에 넣으십시오 .

set guioptions+=a

그리고이 기능을 사용하면 텍스트를 시각적으로 선택할 때마다 클립 보드에 복사됩니다. 이에 대한 자세한 내용은:help guioptions

BTW, 이것은 gVim 전용입니다.


2
guioptions+=aCarpetsmoker의 답변에도 언급되어 있습니다.
muru

@muru 예, 죄송합니다. 나는 전에 그것을 보지 못했습니다. 방금 봤어
Durga Swaroop

0

전역 명령을 사용하여 클립 보드에 특정 패턴을 넣을 수도 있습니다. 파일에 정보가 흩어져 있고 수동으로 대처하는 데 오류가 발생하기 쉽고 피곤한 경우에 유용 할 수 있습니다.

먼저 정보를받을 레지스터를 청소하십시오

:let @a=""

그런 다음 패턴을 포함하는 모든 줄을 복사하십시오.

:g/pattern/yank A

마지막으로 정보를 시스템 클립 보드로 전송 (복사)

:let @+=@a

"패턴"을 포함하는 모든 줄을 클립 보드에 직접 복사하려고하면 클립 보드에 새로운 내용을 추가 할 수있는 기능이 없기 때문에 작동하지 않습니다. 따라서 여기에는 일반 vim 레지스터를 사용하여 한 번에 패턴을 만든 다음 클립 보드에 넣습니다.

OBS : 레지스터를 사용하기 전에 등록해야하며, UPPERCASE 버전의 레지스터를 사용하면 내용을 추가 할 수 있습니다. 그렇지 않으면 작동하지 않습니다.


0

+clipboard어떤 이유로 일할 수 없었던 일하는 법을 알 수 없다면이 작업을 수행 할 수 있습니다.

파일의 한 부분 만 복사한다고 가정하면 shift+ v를 사용하여 비주얼 모드로 이동하고 복사하려는 행만 강조 표시합니다. 그런 다음이 작업을 수행합니다.

# Linux Wayland
:'<,'>w !wl-copy

# Linux Xorg
:'<,'>w !xclip -selection clipboard

설명

  • '<,'> -시각 모드를 사용하여 범위를 선택했음을 의미합니다 (입력하지 않음).
  • w !{cmd}-stdin에 범위를 쓰십시오 cmd.:help w_c
  • wl-copy그리고 xclip당신이 파이프에 텍스트가 시스템 클립 보드에 추가 할 것입니다 수있는 프로그램입니다

또한, 일단 이것이 당신의 역사에 있다면, 당신은 모든 것을 다시 입력 할 필요가 없습니다. 시각 모드로 선택하고 입력 w한 다음 위로 누르면 명령이 자동 완성됩니다. 또한 시각적 모드를 사용할 필요가 없습니다. 원하는 범위를 설정할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.