답변:
여기서 우리의 정의에주의합시다
kill-ring-save
일반적으로 바인딩 (M-w ).yank
일반적으로 바인딩 (C-y ).제 경우 (GNOME에서) :
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 버퍼에 입력 한 것과 똑같이 작동해야합니다.
META-X set-variable RET select-enable-clipboard RET t
또는(setq select-enable-clipboard t)
.emacs
파일에 다음을 삽입 하십시오.
(setq x-select-enable-clipboard t)
emacs -nw
터미널 고유의 바로 가기를 사용합니다. 텍스트를 잘라내려면 (종료) Shift-Ctrl-X, 복사하려면 Shift-Ctrl-C.
emacs -nw
수평으로 분할 된 tmux 창 내에서 실행할 때는 작동하지 않습니다 .
내 .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를 수행하십시오.
행운을 빕니다!
Symbol’s function definition is void: x-cut-buffer-or-selection-value
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)
나는 emacs에 의해 X에서 Emacs를 의미한다고 가정합니다 (즉, 터미널 창 안에 있지 않음).
두 가지 방법이 있습니다.
사용 가능한 클립 보드 작업 :
이 EmacsWiki 문서를 복사 & 붙여 넣기 X에서 어떻게 작동하도록 구성하는 몇 가지 문제에 대해 설명합니다.
이것은 M-w
Mac 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)
위의 @RussellStewart의 답변에서 영감을 얻은 아래 코드는 x-PRIMARY 및 x-SECONDARY에 대한 지원을 추가 하고 빈 영역의 경우를 덮기 위해로 대체 region-active-p
되며 use-region-p
xsel이 설치되지 않은 경우 자동으로 반환되지 않습니다 (오류 메시지 반환). "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)
나는하기 위해, 여기에 다른 답변에 따라 다음을 사용 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)))
xclip
하여 클립 보드 내용을 붙여 넣을 때도 사용할 수 있습니다 xclip -o
. 이것은 xclip
복사와 붙여 넣기를 모두 수행하기 위해 다른 프로그램을 이미 가지고 있고 설치하고 싶지 않은 사람들에게 유용 할 수 있습니다 .
사용중인 플랫폼을 지정할 수 있습니다. Linux, unix, macosx, windows, ms-dos에 있습니까?
나는 창문의 경우 작동해야한다고 믿습니다. MacOSX의 경우 x-windows 클립 보드에 추가되며 이는 macosx 클립 보드와 동일하지 않습니다. Linux의 경우 창 관리자의 취향에 따라 다르지만 x-windows가 대부분의 경우 좋은 방식으로 처리한다고 생각합니다.
따라서 지정하십시오.
내가하는 일은 복사 기능이 내장 된 좋은 터미널 도구 (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 단축키가 작동합니다.