2008-09-15 40 views

Trả lời

83

Chèn đoạn mã sau vào tập tin .emacs của bạn:

(setq x-select-enable-clipboard t) 
+3

Không nói gì, cho bạn biết những gì bạn cần biết. Câu trả lời tuyệt vời. – JasonFruit

+0

Hoạt động hoàn hảo, tôi sử dụng Ubuntu 12.04. Cảm ơn – zhihong

+3

Đẹp và đơn giản, nhưng điều này không hoạt động trong thiết bị đầu cuối. Không có lý do tại sao các phím tắt tương tự không nên làm việc cả trong thiết bị đầu cuối và một cửa sổ miễn phí, và một số câu trả lời dưới đây địa chỉ cả hai cùng một lúc. – RussellStewart

0

Hmm, bạn đang sử dụng nền tảng nào và bạn đang sử dụng phiên bản nào của emac? Với GNU Emacs 22.1.1 trên Windows Vista, nó hoạt động tốt cho tôi.

Nếu, bởi bất kỳ cơ hội, bạn đang làm điều này từ Windows sang Linux thông qua một người xem RealVNC, hãy chắc chắn bạn đang chạy "vncconfig -iconic" trên hộp linux đầu tiên .....

-1

Những gì tôi làm là sử dụng một công cụ thiết bị đầu cuối tốt (PuTTY trên Windows, Konsole hoặc Terminal trên Linux) có các tiện ích sao chép tích hợp sẵn.

Trong PuTTY, bạn đánh dấu văn bản bạn muốn bằng chuột rồi dán vào nơi khác. Nhấp chuột phải vào cửa sổ PuTTY sẽ dán nội dung của bộ đệm sao chép/dán Windows.

Trong Konsole hoặc Terminal trên Linux, bạn làm nổi bật những gì bạn muốn sau đó nhấn Shift + Ctrl + C để sao chép và Shift + Ctrl + V để dán.

Trong win32 biên dịch các emacs, văn bản yanking đặt nó trên bộ đệm sao chép/dán .. hầu hết thời gian.

Trên Mac OS X, phím tắt của Apple hoạt động tốt, vì Thiết bị đầu cuối bẫy chúng.

Không có cách trực tiếp để thực hiện nó trên dòng lệnh vì trình bao không duy trì bộ đệm sao chép/dán cho mỗi ứng dụng. bash không duy trì bộ đệm sao chép/dán cho chính nó và theo mặc định, các phím tắt emacs^k/^ y hoạt động.

0

Tôi luôn sử dụng lựa chọn kéo nhanh trong các emacs, nhấn nút chuột giữa trong cửa sổ mục tiêu.

(Từ tài liệu tham khảo để kate, tôi mang nó bạn đang ở trên linux hoặc tương đương và có lẽ sử dụng emacs trong X cách này hay cách khác.)

0

Bạn có thể muốn xác định những nền tảng mà bạn đang sử dụng. Có phải trên linux, unix, macosx, windows, ms-dos không?

Tôi tin rằng đối với cửa sổ, nó sẽ hoạt động. Đối với MacOSX, nó sẽ được thêm vào khay nhớ tạm x-windows, không giống như clipboard tạm thời. Đối với Linux, nó phụ thuộc vào hương vị của trình quản lý cửa sổ của bạn, nhưng tôi tin rằng các cửa sổ x xử lý nó theo cách tốt đẹp trên hầu hết chúng.

Vì vậy, vui lòng nêu rõ.

6

an EmacsWiki article giải thích một số vấn đề với sao chép & dán dưới X và cách định cấu hình để hoạt động.

7

Tôi giả định bởi emacs bạn có nghĩa là Emacs dưới X (nghĩa là không nằm trong cửa sổ đầu cuối).

Có hai cách:

  1. (Áp dụng cho unix hệ điều hành duy nhất) Bôi đen văn bản mong muốn với chuột (bản sao này nó vào X clipboard) và sau đó click chuột giữa để dán.
  2. Đánh dấu văn bản mong muốn và sau đó "M-x clipboard-kill-ring-save" (lưu ý bạn có thể liên kết mã này với khóa dễ dàng hơn ).Sau đó, chỉ cần "Chỉnh sửa-> Dán" trong ứng dụng yêu thích của bạn.

hoạt động Clipboard sẵn:

  • vào clipboard-kill-ring-tiết kiệm - sao chép lựa chọn từ Emacs vào clipboard
  • vào clipboard-kill-khu vực - cắt lựa chọn từ Emacs vào clipboard
  • clipboard-yank - dán từ khay nhớ tạm vào Emacs
116

Hãy cẩn thận với các định nghĩa của chúng tôi ở đây

  • Một Emacs sao chép là lệnh kill-ring-save (thường là bị ràng buộc để M-w).
  • A bản sao hệ thống là những gì bạn thường nhận được khi nhấn C-c (hoặc chọn "Chỉnh sửa-> Sao chép" trong cửa sổ ứng dụng).
  • An X copy là văn bản đánh dấu "vật lý" bằng con trỏ chuột.
  • An Dán Emacs là lệnh yank (thường được liên kết với C-y).
  • A dán hệ thống là những gì bạn thường nhận được khi nhấn C-v (hoặc chọn "Chỉnh sửa dán" trong cửa sổ ứng dụng).
  • An X dán đang nhấn "nút chuột giữa" (được mô phỏng bằng cách nhấn các nút chuột trái và phải).

Trong trường hợp của tôi (trên Gnome):

  • Cả Emacs và sao chép hệ thống thường làm việc với X dán.
  • Bản sao X thường hoạt động với dán Emacs.
  • Để sao chép hệ thống làm việc với dán Emacs và công việc sao chép Emacs bằng dán hệ thống, bạn cần thêm (setq x-select-enable-clipboard t) vào .emacs của mình. Hoặc thử

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

Tôi nghĩ rằng đây là hành vi Unix hiện đại khá chuẩn. Nó cũng quan trọng cần lưu ý (mặc dù bạn nói bạn đang sử dụng Emacs trong một cửa sổ riêng biệt) khi Emacs đang chạy trong một giao diện điều khiển, nó hoàn toàn ly dị khỏi hệ thống và X clipboards: cắt và dán trong trường hợp đó là trung gian bởi các thiết bị đầu cuối. Ví dụ: "Chỉnh sửa-> Dán" trong cửa sổ đầu cuối của bạn sẽ hoạt động chính xác như khi bạn nhập văn bản từ khay nhớ tạm vào bộ đệm Emacs.

+3

[Đây là thuật ngữ khó hiểu] (http://unix.stackexchange.com/questions/158082/what-are-system-copy-and-paste). Tên tiêu chuẩn và ít gây nhầm lẫn, cho những gì bạn gọi là "X sao chép/dán" là lựa chọn chính X. Những gì bạn gọi là "sao chép hệ thống/dán" là clipboard X. – Gilles

9

tôi dính này trong emacs của tôi:

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

tôi sau đó có về cơ bản không có vấn đề cắt và dán qua lại từ bất cứ điều gì trong Emacs cho bất kỳ ứng dụng X11 hoặc Gnome khác.

Tiền thưởng: để có được những điều này xảy ra trong Emacs mà không phải tải lại toàn bộ .emacs của bạn, hãy làm C-x C-e bằng con trỏ ngay sau dấu đóng của mỗi biểu thức trong bộ đệm .emacs.

Chúc may mắn!

+1

Giải pháp này hoạt động cho emacs trong một cửa sổ X tức là emacs đang chạy bên trong một cửa sổ nếu bạn đang chạy emacs trong dòng lệnh những gì bạn cần là: http://stackoverflow.com/questions/5288213/how-can-i -paste-the-selected-region-outside-of-emacs – elviejo79

9

Khó khăn khi sao chép và dán trong Emacs là bạn muốn nó hoạt động độc lập với nội bộ kill/yank và bạn muốn nó hoạt động cả trong terminal và gui. Hiện có các giải pháp mạnh mẽ cho thiết bị đầu cuối hoặc gui, nhưng không phải cả hai. Sau khi cài đặt xsel (ví dụ sudo apt-get install xsel), đây là những gì tôi làm cho sao chép và dán để kết hợp chúng:

(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) 
+0

Vì tôi nhận được lỗi vì không có thông số. Tôi cần phải thay đổi dòng đầu tiên "(defun copy-to-clipboard()" thành "(defun copy-from-ubuntu (text & push tùy chọn)". Điều này làm việc cho tôi: D –

3

này làm việc với M-w trên Mac OSX. Chỉ cần thêm vào tệp .emacs của bạn.

(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) 

Nguồn https://gist.github.com/the-kenny/267162

1

Đoạn code dưới đây, lấy cảm hứng từ @ RussellStewart của câu trả lời ở trên, thêm hỗ trợ cho x-TIỂU và x-TRUNG, thay thế region-active-p với use-region-p để trang trải các trường hợp của một khu vực trống rỗng, không trở về âm thầm nếu xsel chưa được cài đặt (trả về một thông báo lỗi), và bao gồm một hàm "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) 
+0

Có bất kỳ lý do nào không ghi đè lên tiêu chuẩn – Paul

+0

@Paul: Các 'keybindings chuẩn' là cho 'emacs clipboard nội bộ', khác với X-clipboard. Tôi trích dẫn từ 'emacs clipboard bên trong' bởi vì thuật ngữ emacs là khác nhau - tham khảo sự xuất sắc của Chris Conway giải thích, ở trên. – user1404316

Các vấn đề liên quan