X가 아닌 Linux에도 클립보드가 있습니까?

X가 아닌 Linux에도 클립보드가 있습니까?

창 관리자가 있는 Linux 데스크톱(예: X11 기반 시스템)에는 시스템 클립보드가 있다는 것을 알고 있지만 창 관리자를 사용하지 않는 경우에도 클립보드가 있습니까?

예를 들어, Vim에서는 + 레지스터를 통해 시스템 클립보드에 접근할 수 있지만 이는 창 관리자의 클립보드를 사용하기 때문에 X-windows에서 실행되는 GUI 버전의 Vim에만 적용됩니다. 터미널이나 가상 콘솔 등에서 Vim의 텍스트 기반 버전을 사용하는 경우에는 작동하지 않습니다. 예를 들어, 서로 다른 가상 콘솔에서 두 개의 서로 다른 Vim 인스턴스를 여는 경우 어떻게 둘 사이에 복사하여 붙여넣을 수 있나요?

답변1

screen복사-붙여넣기 버퍼를 지원 하므로 tmux이것이 가능한 접근 방식입니다(자세한 내용은 다른 답변 참조).

Linux 가상 콘솔을 사용하면 실행할 수 있습니다.gpm(또는 libinput대체,consolation)는 마우스 기반 복사-붙여넣기를 제공합니다. 마우스 왼쪽 버튼으로 텍스트를 선택하고 마우스 가운데 버튼으로 붙여넣습니다.

내가 아는 한, 그 중 어느 것도 Vim과 직접 통합되지 않으므로 화면이나 스크롤백 버퍼(있는 경우)에 보이는 것만 복사할 수 있습니다.

답변2

tmuxX 클립보드와 유사한 "붙여넣기 버퍼"가 있으며 동일한 호스트에서 실행되는 다른 세션 간에 액세스할 수 있습니다. 세션에서 각 vim인스턴스를 시작하고 tmux(단일 세션에서 또는 각 인스턴스를 자체 세션에서 - 이러한 목적에는 중요하지 않음) 인스턴스 간에 텍스트를 쉽게 복사하여 붙여넣을 수 있습니다.

기본 키 바인딩이 다음과 같다고 가정하면 tmux+를 눌러 복사 모드로 들어갈 수 있습니다. 복사하려는 텍스트의 시작 부분으로 이동하여 + 를 탭한 후 커서를 이동하여 원하는 텍스트를 강조 표시하고 탭합니다. 그러면 선택 항목이 붙여넣기 버퍼에 복사됩니다. 이제 다른 세션(또는 그 아래에서 실행 중인 다른 프로그램)으로 전환하고 +를 눌러 버퍼 내용을 현재 창에 붙여넣을 수 있습니다.CTRLB[CTRLSPACEENTERvimtmuxCTRLB]

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의 "+ynvim에 복사 해야 합니다.


내 네트워크 정보

나는 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의 "+ynvim에 복사 해야 합니다.

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 ]

관련 정보