창 관리자가 있는 Linux 데스크톱(예: X11 기반 시스템)에는 시스템 클립보드가 있다는 것을 알고 있지만 창 관리자를 사용하지 않는 경우에도 클립보드가 있습니까?
예를 들어, Vim에서는 + 레지스터를 통해 시스템 클립보드에 접근할 수 있지만 이는 창 관리자의 클립보드를 사용하기 때문에 X-windows에서 실행되는 GUI 버전의 Vim에만 적용됩니다. 터미널이나 가상 콘솔 등에서 Vim의 텍스트 기반 버전을 사용하는 경우에는 작동하지 않습니다. 예를 들어, 서로 다른 가상 콘솔에서 두 개의 서로 다른 Vim 인스턴스를 여는 경우 어떻게 둘 사이에 복사하여 붙여넣을 수 있나요?
답변1
screen
복사-붙여넣기 버퍼를 지원 하므로 tmux
이것이 가능한 접근 방식입니다(자세한 내용은 다른 답변 참조).
Linux 가상 콘솔을 사용하면 실행할 수 있습니다.gpm
(또는 libinput
대체,consolation
)는 마우스 기반 복사-붙여넣기를 제공합니다. 마우스 왼쪽 버튼으로 텍스트를 선택하고 마우스 가운데 버튼으로 붙여넣습니다.
내가 아는 한, 그 중 어느 것도 Vim과 직접 통합되지 않으므로 화면이나 스크롤백 버퍼(있는 경우)에 보이는 것만 복사할 수 있습니다.
답변2
tmux
X 클립보드와 유사한 "붙여넣기 버퍼"가 있으며 동일한 호스트에서 실행되는 다른 세션 간에 액세스할 수 있습니다. 세션에서 각 vim
인스턴스를 시작하고 tmux
(단일 세션에서 또는 각 인스턴스를 자체 세션에서 - 이러한 목적에는 중요하지 않음) 인스턴스 간에 텍스트를 쉽게 복사하여 붙여넣을 수 있습니다.
기본 키 바인딩이 다음과 같다고 가정하면 tmux
+를 눌러 복사 모드로 들어갈 수 있습니다. 복사하려는 텍스트의 시작 부분으로 이동하여 + 를 탭한 후 커서를 이동하여 원하는 텍스트를 강조 표시하고 탭합니다. 그러면 선택 항목이 붙여넣기 버퍼에 복사됩니다. 이제 다른 세션(또는 그 아래에서 실행 중인 다른 프로그램)으로 전환하고 +를 눌러 버퍼 내용을 현재 창에 붙여넣을 수 있습니다.CTRLB[CTRLSPACEENTERvim
tmux
CTRLB]
tmux
여러 개의 붙여넣기 버퍼가 유지됩니다. CTRL+를 눌러 B#전체 내용을 보거나 CTRL+를 눌러 B=붙여넣기 버퍼를 시각적으로 선택하고 해당 내용을 현재 창에 삽입할 수 있습니다.
답변3
X가 실행 중일 때 Vim은 xclip에서 끌어옵니다. 이는 대부분의 사람들이 응용 프로그램 간 복사하여 붙여넣기라고 생각하는 것이 실제로는 X 기능이라는 것을 의미합니다.
많은 애플리케이션에는 복사-붙여넣기 기능이나 버퍼가 있어 진정한 클립보드가 될 수 있지만 이는 IPC 형식을 통해 애플리케이션 간에 공유되는 기능이어야 합니다.
아래의 2가지 큰 툴킷은 실제로 dbus를 통해 이를 어느 정도 지원합니다. 어쨌든 내부적으로 X를 사용한다고 해도 요점은 이것이 다른 응용 프로그램에서 사용할 수 있는 인터페이스라는 것입니다.
https://developer.gnome.org/gtk3/stable/gtk3-Clipboards.html
http://doc.qt.io/qt-5/qclipboard.html
두 인터페이스 모두 기본 창 시스템 클립보드를 추상화하므로 여기에는 "데이터 공유"의 보다 일반적인 개념인 Wayland와의 사용이 포함됩니다.
https://wayland.freedesktop.org/docs/html/ch04.html#sect-Protocol-data-sharing
기술적으로 콘솔에서 복사하고 붙여넣는 것은 버퍼를 저장하고 로드하는 것과 동일하므로 필요한 것을 리디렉션하기만 하면 됩니다. 따라서 이것은 OS 수준에서 복사하여 붙여넣는 것입니다.
mkfifo clipboard && (echo -e "$copy" > clipboard && rm clipboard) &
paste=$(<clipboard)
bash/명령 해석기 수준에서 복사하여 붙여넣는 방법은 다음과 같습니다.
copy="some text"
echo $copy
나는 또한 첫 번째 것도 변수를 사용한다는 것을 깨달았습니다. 그러나 운영 체제의 기능을 데모로 사용합니다.
답변4
필수 사항
init.vim에서 (그림 참조 ) '+': ['tmux', 'load-buffer', '-w', '-']
을 사용합니다.'+': ['tmux', 'load-buffer', '-']
:help g:clipboard
그런 다음 ctrl-v
로컬 win10의 "+y
nvim에 복사 해야 합니다.
내 네트워크 정보
나는 win10을 로컬 컴퓨터로 사용하고 SSH를 캠퍼스의 우분투 컴퓨터에 사용합니다(VPN을 통해 Easy Connect라는 소프트웨어의 도움으로). 내 로컬 컴퓨터에서는 다음과 같이 작동합니다(pwsh7, Windows 터미널 사용).ssh [email protected]
echo $SSH_CLIENT
그런 다음 원격 셸에서 10.11.220.32 50859 22
;10.11.220.32
다음 과 같이 표현해보자 .win_ip
. 여전히 원격 셸에서는 ssh -v win_ip
다음을 얻습니다.
.....something ...
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to win_ip [win_ip] port 22.
ssh: connect to host win_ip port 22: Connection timed out
동일한 로컬 시스템에서 해당 원격 시스템으로 wsl2(ubuntu)를 사용하는 경우에도 동일한 일이 발생합니다.
또한 scp
,,,,실패했습니다 xclip
.xlogo
멀티플렉서
~/.config//tmux/tmux.conf에는 다음이 있습니다.
bind -n M-v run-shell "tmux copy-mode"
bind 'v' run-shell "tmux copy-mode ; tmux send -X begin-selection"
bind -T copy-mode-vi 'y' send -X copy-selection-and-cancel
따라서 주문하면:
Alt-v
v
- 텍스트를 선택하세요(예:나는 멀리 떨어져 있다)
h
j
k
또는l
... y
tmux에는 ctrl-b
=
"I_am_remote"가 표시되며(그림 1 참조) ctrl-b
]
"I_am_remote"를 붙여넣을 수 있습니다.
크롬 같은 앱에서현지의win10, ctrl-v
선택한 텍스트를 가져옵니다.
nvim과 tmux
init.vim에서 g:clipboard를 설정했습니다.
:echo g:clipboard
얻다
{
\ 'paste': {
\ '*': ['tmux', 'save-buffer', '-'],
\ '+': ['tmux', 'save-buffer', '-'],
\ },
\ 'cache_enabled': 1,
\ 'name': 'ClipboarD-no-x11',
\ 'copy': {
\ '*': ['tmux', 'load-buffer', '-w', '-'],
\ '+': ['tmux', 'load-buffer', '-w, '-'],
\ },
\ }
그런 다음 ctrl-v
로컬 win10의 "+y
nvim에 복사 해야 합니다.
ps: "+y
때로는 nvim show: "I_am_remote" clipboard: error invoking xclip: Error: Can't open display: win_ip:47
can be located via 또는 오류 메시지가 나타나는 경우에도 발생합니다 .ctr-b
=
ctrl-b
]