回答:
ここでの定義に注意しましょう
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
これはかなり標準的な最新のUnixの動作だと思います。
(別のウィンドウでEmacsを使用していると言いますが)Emacsがコンソールで実行されている場合、システムとXクリップボードから完全に切り離されていることに注意することも重要です。その場合、カットアンドペーストは端末によって仲介されます。たとえば、ターミナルウィンドウの[編集]→[貼り付け]は、クリップボードから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を意味していると思います。
2つの方法があります。
利用可能なクリップボード操作:
Xでのコピーと貼り付けに関するいくつかの問題と、Xが動作するように構成する方法を説明するEmacsWikiの記事があります。
これ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がインストールされていない場合にエラーを返さず、エラーメッセージを返します。 「カット」機能が含まれています(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
もコピーをとMacとLinux(誰かがWindowsのバージョンを知っていれば、それを追加して自由に感じる)の両方の上に貼り付けます。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、KonsoleまたはLinuxの端末)を使用することです。
PuTTYでは、必要なテキストをマウスで強調表示してから、別の場所に貼り付けます。PuTTYウィンドウを右クリックすると、Windowsのコピー/貼り付けバッファーの内容が貼り付けられます。
LinuxのKonsoleまたはターミナルで、必要なものを強調表示してから、Shift + Ctrl + Cを押してコピーし、Shift + Ctrl + Vを押して貼り付けます。
emacsのwin32コンパイルでは、テキストをヤンクすると、ほとんどの場合、コピー/貼り付けバッファーに配置されます。
Mac OS Xでは、ターミナルがトラップするため、Appleキーのショートカットが正常に機能します。
シェルは各アプリケーションのコピー/貼り付けバッファーを維持しないため、コマンドラインで直接実行する方法はありません。bash はそれ自体のコピー/貼り付けバッファーを維持します。デフォルトでは、emacs ^ k / ^ yショートカットが機能します。