텍스트 블록을 시스템 클립 보드에 복사하여 다른 프로그램에 붙여 넣을 수있는 방법이 있습니까?
텍스트 블록을 시스템 클립 보드에 복사하여 다른 프로그램에 붙여 넣을 수있는 방법이 있습니까?
답변:
들어 X11 기반 시스템 (. 즉, 리눅스 및 대부분의 다른 UNIX -like 시스템) 서로 독립적 인 두 개의 클립 보드가 있습니다 :
^C
붙여 넣습니다 ^V
.OS X 및 Windows 시스템에는 하나의 클립 보드 만 있습니다.
X11 시스템에는 이러한 클립 보드를 동기화하는 여러 도구가 있습니다. 동일한 것으로 보이면 그 중 하나가 실행 중일 수 있습니다.
Vim에는이 클립 보드에 해당하는 두 개의 특수 레지스터가 있습니다.
*
PRIMARY를 사용합니다. 연상 기호 : S의 타르는 S (복사 - 온에 대한 차기 의 차기)+
CLIPBOARD를 사용합니다. 니모닉 : CTRL PLUS C (공통 키 바인드 용)윈도우 및 OS X에 사이에는 차이가 없다 +
하고 *
, 이러한 시스템은 하나의 클립 보드를 갖고 있기 때문에, 두 레지스터 (당신이 사용하는 하나 중요하지 않습니다) 같은 일을 참조하십시오.
이 레지스터를 임의의 레지스터로 사용할 수 있습니다. 예를 들어, and 명령 *
과 함께 PRIMARY 클립 보드 사용 :y
p
"*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을 사용하면를 사용할 때 선택시 복사 동작을 얻을 수 있습니다
: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
.vim-X11
, ( more info ) vimx
대신 실행하십시오 .vim
gvim
( +clipboard
일반적 vim
으로도 가능).당신은 또한 사용할 수 있습니다 xclip
, xcopy
또는 xsel
클립 보드에 텍스트를 복사; 솔루션에 대해서는 다음 질문을 참조하십시오.
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에 pbcopy
와 pbpaste
기본적으로 사용할 수 있어야합니다, 리눅스에 당신은 아마 설치할 xclip
즉 가장 널리 사용할 수로서, (실제로는 거기에 두 가지
의 버전 xsel
과 호환되지 않는 플래그 . 이건 정말 바보입니다).
:help clipboard
Neovim을 참조하십시오 .
"<Space>
를) 받으려면 을 (를) 눌러야 할 수도 있습니다 "
. 이 경우 "<Space>+y
또는 "<Space>*y
을 눌러 복사해야합니다.
"
많은 명명 된 레지스터를 선택할 수 있는 실현 이었습니다. "+
마술이 아니라, 그냥 register +
입니다. 그래서 예를 들어, 당신은 동시에 세 가지를 복사 한 일을 수행 할 수 있습니다에 의해 그들 각각을 붙여 넣을 경우 "1y
, "2y
그리고 "3y
나중에 "1p
, "2p
그리고 "3p
. 이것은 거의 모든 편집기에서 실제로 강력하고 존재하지 않습니다. 또 다른 흥미로운 사용법은 저장된 매크로를 보는 것입니다. 예를 들어,로 기록 qq
했지만 문제를 해결해야한다는 것을 알고있는 경우 임시 행에서 "qp
, 수정 및을 수행 할 수 있습니다 "qd
.
다른 답변은 버퍼에서 시스템 클립 보드로 텍스트를 복사하는 방법을 다룹니다. 다른 일반적인 작업은 다른 레지스터 에서 클립 보드로 텍스트를 복사 하는 것입니다. 예를 들어, 일부 텍스트를 이미 "
기본 레지스터에 넣은 경우 해당 레지스터를 클립 보드에로드 할 수 있습니다.
당신은 이것을 할 수 있습니다 :let
:
let @+=@"
— 기본 레지스터를 클립 보드에 복사let @*=@"
— 기본 레지스터를 X11 기본 선택 항목으로 복사합니다 ( "마우스 클립 보드")let @+=@a
— 등록 a
에서 클립 보드로 복사이것은 일반적으로 레지스터에서 작동합니다. let @a=@b
copy register b
to register a
.
에서 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')
:version
+ X11 포함 기능 목록에 나타납니다 있는지 확인하기 위해 빔 내에서. 'unnamedplus'기능을 사용할 수있는 경우 당신은 또한 확인할 수 있습니다 :if has('unnamedplus')⏎ echo 'yes'⏎ endif
당신이 대신 unnamedplus의 이름이 사용해야 당신이 리눅스에 있지 않은 경우.
다른 모든 답변은 레지스터에 관한 모든 중요한 사항을 다루었습니다. 내가 사용하는 것을 하나 더 추가하고 싶습니다.
Vim에서 시각적으로 선택된 텍스트를 클립 보드에 직접 복사하는 방법이 있습니다 . 이것을 vimrc 파일 에 넣으십시오 .
set guioptions+=a
그리고이 기능을 사용하면 텍스트를 시각적으로 선택할 때마다 클립 보드에 복사됩니다. 이에 대한 자세한 내용은:help guioptions
BTW, 이것은 gVim 전용입니다.
guioptions+=a
Carpetsmoker의 답변에도 언급되어 있습니다.
전역 명령을 사용하여 클립 보드에 특정 패턴을 넣을 수도 있습니다. 파일에 정보가 흩어져 있고 수동으로 대처하는 데 오류가 발생하기 쉽고 피곤한 경우에 유용 할 수 있습니다.
먼저 정보를받을 레지스터를 청소하십시오
:let @a=""
그런 다음 패턴을 포함하는 모든 줄을 복사하십시오.
:g/pattern/yank A
마지막으로 정보를 시스템 클립 보드로 전송 (복사)
:let @+=@a
"패턴"을 포함하는 모든 줄을 클립 보드에 직접 복사하려고하면 클립 보드에 새로운 내용을 추가 할 수있는 기능이 없기 때문에 작동하지 않습니다. 따라서 여기에는 일반 vim 레지스터를 사용하여 한 번에 패턴을 만든 다음 클립 보드에 넣습니다.
OBS : 레지스터를 사용하기 전에 등록해야하며, UPPERCASE 버전의 레지스터를 사용하면 내용을 추가 할 수 있습니다. 그렇지 않으면 작동하지 않습니다.
+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
한 다음 위로 누르면 명령이 자동 완성됩니다. 또한 시각적 모드를 사용할 필요가 없습니다. 원하는 범위를 설정할 수 있습니다.