Emacs에서 Linux의 다른 응용 프로그램으로 텍스트를 복사하는 방법


113

Emacs 22.1.1 (X의 자체 창, KDE, Kubuntu의 경우)에서 텍스트를 잘라내어 (죽일) 다른 응용 프로그램에 붙여 넣을 수 없습니다.


나는 이것을 읽는 것이 좋습니다 : CopyAndPaste-Emacs Wiki . 이것은 여행 문제를 아주 잘 설명합니다.
El borito

답변:


122

여기서 우리의 정의에주의합시다

  • 이맥스 복사 명령입니다 kill-ring-save일반적으로 바인딩 (M-w ).
  • 시스템 사본은 당신이 일반적으로 눌러에서 무엇을 얻을 것입니다 C-c(또는 응용 프로그램 창에서 "편집 -> 복사"를 선택).
  • X 복사는 "물리적으로"마우스 커서 텍스트를 강조한다.
  • 이맥스 붙여 넣기 명령입니다 yank일반적으로 바인딩 (C-y ).
  • 시스템 페이스트 는 일반적으로 눌러에서 무엇을 얻을C-v (또는 응용 프로그램 창에 "편집 - 붙여 넣기"를 선택).
  • X 페이스트 (함께 왼쪽 및 오른쪽 마우스 버튼을 눌러 시뮬레이션) "센터 마우스 버튼"을 누르면된다.

제 경우 (GNOME에서) :

  • Emacs와 시스템 복사는 일반적으로 X 붙여 넣기와 함께 작동합니다.
  • X 복사는 일반적으로 Emacs 붙여 넣기와 함께 작동합니다.
  • Emacs 붙여 넣기를 사용하여 시스템 복사 작업을 수행하고 시스템 붙여 넣기를 사용하여 Emacs 복사 작업을 수행 (setq x-select-enable-clipboard t)하려면 .emacs. 또는 시도

    META-X set-variable RET x-select-enable-clipboard RET t

나는 이것이 꽤 표준적인 현대 유닉스 동작이라고 생각합니다.

Emacs가 콘솔에서 실행 중일 때 시스템 및 X 클립 보드에서 완전히 분리된다는 점 (별도의 창에서 Emacs를 사용한다고하더라도)에 유의하는 것도 중요합니다.이 경우 잘라 내기 및 붙여 넣기는 터미널에 의해 조정됩니다. . 예를 들어, 터미널 창에서 "Edit-> Paste"는 클립 보드의 텍스트를 Emacs 버퍼에 입력 한 것과 똑같이 작동해야합니다.


7
이것은 혼란스러운 용어 입니다. "X 복사 / 붙여 넣기"라고 부르는 표준적이고 덜 혼란스러운 이름은 X 기본 선택입니다. "시스템 복사 / 붙여 넣기"라고 부르는 것은 X 클립 보드입니다.
Gilles 'SO- 그만 사악한'

감사합니다 ... 이것이 작성된 이후 변수의 이름이 변경된 것 같습니다. META-X set-variable RET select-enable-clipboard RET t또는(setq select-enable-clipboard t)
데이비드 McCorrie

95

.emacs파일에 다음을 삽입 하십시오.

(setq x-select-enable-clipboard t)

3
말하지 않고 알아야 할 사항을 알려줍니다. 훌륭한 대답입니다.
JasonFruit 2011

완벽하게 작동하며 Ubuntu 12.04를 사용합니다. 감사합니다
zhihong

7
멋지고 간단하지만 터미널에서는 작동하지 않습니다. 동일한 바로 가기가 터미널과 무료 창 모두에서 작동하지 않아야 할 이유가 없으며 아래 답변 중 일부는 둘 다 동시에 처리합니다.
RussellStewart 2014 년

1
를 실행할 때 emacs -nw터미널 고유의 바로 가기를 사용합니다. 텍스트를 잘라내려면 (종료) Shift-Ctrl-X, 복사하려면 Shift-Ctrl-C.
memius

4
emacs -nw수평으로 분할 된 tmux 창 내에서 실행할 때는 작동하지 않습니다 .
Sridhar Ratnakumar

11

내 .emacs에 이것을 붙입니다.

(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)

이후에 Emacs의 어떤 것에서 다른 X11 또는 Gnome 응용 프로그램으로 앞뒤로 자르고 붙여 넣는 데 기본적으로 문제가 없습니다.

보너스 : 전체 .emacs를 다시로드 할 필요없이 Emacs에서 이러한 일이 발생하도록하려면 .emacs 버퍼에서 각 표현식의 괄호를 닫은 직후 커서로 Cx Ce를 수행하십시오.

행운을 빕니다!


3
: 당신은 당신이 필요 명령 줄에서 이맥스를 실행하는 경우 창 내에서 실행되는이 솔루션은 인 X 윈도우 즉, 이맥스에서 이맥스 작동 stackoverflow.com/questions/5288213/...
elviejo79

Symbol’s function definition is void: x-cut-buffer-or-selection-value
alper

10

Emacs에서 복사 및 붙여 넣기의 어려움은 내부 kill / yank와 독립적으로 작동하고 터미널과 GUI 모두에서 작동하기를 원한다는 것입니다. 터미널 또는 GUI에 대한 기존의 강력한 솔루션이 있지만 둘다는 아닙니다. xsel (예 :)을 설치 한 후 sudo apt-get install xsel복사 및 붙여 넣기를 통해 결합하는 작업은 다음과 같습니다.

(defun copy-to-clipboard ()
  (interactive)
  (if (display-graphic-p)
      (progn
        (message "Yanked region to x-clipboard!")
        (call-interactively 'clipboard-kill-ring-save)
        )
    (if (region-active-p)
        (progn
          (shell-command-on-region (region-beginning) (region-end) "xsel -i -b")
          (message "Yanked region to clipboard!")
          (deactivate-mark))
      (message "No region active; can't yank to clipboard!")))
  )

(defun paste-from-clipboard ()
  (interactive)
  (if (display-graphic-p)
      (progn
        (clipboard-yank)
        (message "graphics active")
        )
    (insert (shell-command-to-string "xsel -o -b"))
    )
  )

(global-set-key [f8] 'copy-to-clipboard)
(global-set-key [f9] 'paste-from-clipboard)

매개 변수가 없기 때문에 오류가 발생합니다. 나는 ") defun는 (복사 -에서 - 우분투 (텍스트 및 선택 푸시를"을 "defun는 복사 - 투 - 클립 보드 () ("첫 번째 줄을 변경해야 할이 작품을 나를 위해 : D.
레나토 시노

작동하지만 붙여 넣기 작업이 상당히 느립니다. 네트워크에 구현 될 수 있습니까?
alper

7

나는 emacs에 의해 X에서 Emacs를 의미한다고 가정합니다 (즉, 터미널 창 안에 있지 않음).

두 가지 방법이 있습니다.

  1. (유닉스 OS에만 적용됨) 마우스로 원하는 텍스트를 강조 표시 한 다음 (X 클립 보드에 복사 됨) 가운데 클릭하여 붙여 넣습니다.
  2. 원하는 텍스트를 강조 표시 한 다음 "Mx clipart-kill-ring-save"(이것을 더 쉬운 키에 바인딩 할 수 있음). 그런 다음 좋아하는 앱에서 "편집-> 붙여 넣기"만하면됩니다.

사용 가능한 클립 보드 작업 :

  • clipboard-kill-ring-save-Emacs에서 클립 보드로 선택 복사
  • clipboard-kill-region-Emacs에서 클립 보드로 선택을 잘라냅니다.
  • 클립 보드 -yank-클립 보드에서 Emacs로 붙여 넣기

7

EmacsWiki 문서를 복사 & 붙여 넣기 X에서 어떻게 작동하도록 구성하는 몇 가지 문제에 대해 설명합니다.


복사하여 붙여 넣을 수있는 emacs 위키 항목이 있습니다. 그게 얼마나 나쁜지.
니콜라스

4

이것은 M-wMac OSX에서 작동합니다 . .emacs 파일에 추가하기 만하면 됩니다.

(defun copy-from-osx ()
   (shell-command-to-string "pbpaste"))
(defun paste-to-osx (text &optional push)
   (let ((process-connection-type nil))
      (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
         (process-send-string proc text)
         (process-send-eof proc))))

(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx)

출처 https://gist.github.com/the-kenny/267162


1

위의 @RussellStewart의 답변에서 영감을 얻은 아래 코드는 x-PRIMARY 및 x-SECONDARY에 대한 지원을 추가 하고 빈 영역의 경우를 덮기 위해로 대체 region-active-p되며 use-region-pxsel이 설치되지 않은 경우 자동으로 반환되지 않습니다 (오류 메시지 반환). "cut"기능 (emacs Cy, windows Cx)을 포함합니다.

(defun my-copy-to-xclipboard(arg)
  (interactive "P")
  (cond
    ((not (use-region-p))
      (message "Nothing to yank to X-clipboard"))
    ((and (not (display-graphic-p))
         (/= 0 (shell-command-on-region
                 (region-beginning) (region-end) "xsel -i -b")))
      (error "Is program `xsel' installed?"))
    (t
      (when (display-graphic-p)
        (call-interactively 'clipboard-kill-ring-save))
      (message "Yanked region to X-clipboard")
      (when arg
        (kill-region  (region-beginning) (region-end)))
      (deactivate-mark))))

(defun my-cut-to-xclipboard()
  (interactive)
  (my-copy-to-xclipboard t))

(defun my-paste-from-xclipboard()
  "Uses shell command `xsel -o' to paste from x-clipboard. With
one prefix arg, pastes from X-PRIMARY, and with two prefix args,
pastes from X-SECONDARY."
  (interactive)
  (if (display-graphic-p)
    (clipboard-yank)
   (let*
     ((opt (prefix-numeric-value current-prefix-arg))
      (opt (cond
       ((=  1 opt) "b")
       ((=  4 opt) "p")
       ((= 16 opt) "s"))))
    (insert (shell-command-to-string (concat "xsel -o -" opt))))))

(global-set-key (kbd "C-c C-w") 'my-cut-to-xclipboard)
(global-set-key (kbd "C-c M-w") 'my-copy-to-xclipboard)
(global-set-key (kbd "C-c C-y") 'my-paste-from-xclipboard)

표준 키 바인딩을 덮어 쓰지 않는 이유가 있습니까?
Paul Brodersen

@Paul : '표준 키 바인딩'은 X- 클립 보드와 다른 'emacs 내부 클립 보드'용입니다. emacs 용어가 다르기 때문에 'emacs 내부 클립 보드'라는 용어를 인용했습니다. 위의 Chris Conway의 훌륭한 설명을 참조하십시오.
user1404316 08

1

나는하기 위해, 여기에 다른 답변에 따라 다음을 사용 C-x C-w하고 C-x C-y있을 사본을하고 (누군가가 Windows 용 버전을 알고있는 경우를 추가 부담) Mac 및 Linux 모두에 붙여 넣습니다. Linux에서는 패키지 관리자를 사용하여 xsel 및 xclip을 설치해야합니다.

;; Commands to interact with the clipboard

(defun osx-copy (beg end)
  (interactive "r")
  (call-process-region beg end  "pbcopy"))

(defun osx-paste ()
  (interactive)
  (if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
  (call-process "pbpaste" nil t nil))

(defun linux-copy (beg end)
  (interactive "r")
  (call-process-region beg end  "xclip" nil nil nil "-selection" "c"))

(defun linux-paste ()
  (interactive)
  (if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
  (call-process "xsel" nil t nil "-b"))

(cond
 ((string-equal system-type "darwin") ; Mac OS X
  (define-key global-map (kbd "C-x C-w") 'osx-copy)
  (define-key global-map (kbd "C-x C-y") 'osx-paste))
 ((string-equal system-type "gnu/linux") ; linux
  (define-key global-map (kbd "C-x C-w") 'linux-copy)
  (define-key global-map (kbd "C-x C-y") 'linux-paste)))

1
실제로을 사용 xclip하여 클립 보드 내용을 붙여 넣을 때도 사용할 수 있습니다 xclip -o. 이것은 xclip복사와 붙여 넣기를 모두 수행하기 위해 다른 프로그램을 이미 가지고 있고 설치하고 싶지 않은 사람들에게 유용 할 수 있습니다 .
Amin NAIRI

0

흠, 어떤 플랫폼과 어떤 버전의 emacs를 사용하고 있습니까? Windows Vista에서 GNU Emacs 22.1.1을 사용하면 잘 작동합니다.

혹시 RealVNC 뷰어를 통해 Windows에서 Linux로이 작업을 수행하는 경우 먼저 Linux 상자에서 "vncconfig -iconic"을 실행하고 있는지 확인하십시오 .....


0

저는 항상 빠른 붙여 넣기를 사용합니다. emacs에서 선택 항목을 드래그하고 대상 창에서 마우스 가운데 버튼을 누릅니다.

(kate에 대한 언급에서, 나는 당신이 리눅스 또는 이와 유사한 것을 사용하고 있고 아마도 X에서 이맥스를 사용하고 있다고 생각합니다.)


0

사용중인 플랫폼을 지정할 수 있습니다. Linux, unix, macosx, windows, ms-dos에 있습니까?

나는 창문의 경우 작동해야한다고 믿습니다. MacOSX의 경우 x-windows 클립 보드에 추가되며 이는 macosx 클립 보드와 동일하지 않습니다. Linux의 경우 창 관리자의 취향에 따라 다르지만 x-windows가 대부분의 경우 좋은 방식으로 처리한다고 생각합니다.

따라서 지정하십시오.


-1

내가하는 일은 복사 기능이 내장 된 좋은 터미널 도구 (Windows의 경우 PuTTY, Linux의 Konsole 또는 터미널)를 사용하는 것입니다.

PuTTY에서 마우스로 원하는 텍스트를 강조 표시 한 다음 다른 곳에 붙여 넣습니다. PuTTY 창을 마우스 오른쪽 버튼으로 클릭하면 Windows 복사 / 붙여 넣기 버퍼의 내용이 붙여 넣어집니다.

Linux의 Konsole 또는 Terminal에서 원하는 항목을 강조 표시 한 다음 복사하려면 Shift + Ctrl + C를 누르고 붙여 넣으려면 Shift + Ctrl + V를 누릅니다.

emacs의 win32 컴파일에서 yanking 텍스트는 대부분의 경우 복사 / 붙여 넣기 버퍼에 넣습니다.

Mac OS X에서는 터미널이이를 트랩하기 때문에 Apple 키 chortcut이 제대로 작동합니다.

쉘은 각 응용 프로그램에 대한 복사 / 붙여 넣기 버퍼를 유지하지 않기 때문에 명령 줄에서 직접 수행하는 방법이 없습니다. bash 자체적으로 복사 / 붙여 넣기 버퍼를 유지하며 기본적으로 emacs ^ k / ^ y 단축키가 작동합니다.

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