复制/粘贴emacs ansi-term shell

时间:2010-05-21 23:15:15

标签: shell emacs

我已将emacs配置为在ansi-term中运行zsh shell。但是,复制/粘贴不再有效,即没有任何东西从kill-ring粘贴到终端。 将TERM更改为vt100或eterm并不能解决问题。

会感激任何想法或解决方案。

要提供上下文,我已将ansi-term配置如下:

(global-set-key "\C-x\C-a" '(lambda ()(interactive)(ansi-term "/bin/zsh")))
(global-set-key "\C-x\ a" '(lambda ()(interactive)(ansi-term "/bin/zsh")))

6 个答案:

答案 0 :(得分:77)

您可能只想在使用终端时在字符模式和线路模式之间切换。 C-x C-j将激活term-line-mode,它将终端缓冲区视为普通文本缓冲区,您可以在其中移动光标和移动文本。您可以使用C-c C-k切换回字符模式。

答案 1 :(得分:8)

正如this lovely blog snippet中所述,term-paste中的函数term.el完全符合您的要求。默认情况下,它仅限于S-insert,但博客推荐的C-c C-y似乎是一个很好的建议。

答案 2 :(得分:5)

ansi-term中的

char-mode采用终端仿真的普通绑定。您需要一个新的绑定,以及一种正确输出到ansi-term的方法。我用这个:

(defun ash-term-hooks ()
  ;; dabbrev-expand in term
  (define-key term-raw-escape-map "/"
    (lambda ()
      (interactive)
      (let ((beg (point)))
        (dabbrev-expand nil)
        (kill-region beg (point)))
      (term-send-raw-string (substring-no-properties (current-kill 0)))))
  ;; yank in term (bound to C-c C-y)
  (define-key term-raw-escape-map "\C-y"
    (lambda ()
       (interactive)
       (term-send-raw-string (current-kill 0)))))
  (add-hook 'term-mode-hook 'ash-term-hooks)

当你这样做时,C-c C-y会猛拉。但是,只有一个猛拉,你不能循环通过你的杀戮缓冲区。可以这样做,但我还没有实现它。

答案 3 :(得分:1)

上述解决方案适用于将文本从某个缓冲区复制到ansi-term,但是它们无法将文本从ansi-term复制到另一个缓冲区(例如,复制您刚刚运行到shell脚本的命令&& #39;重新编辑)。将此添加到我的.emacs文件为我解决了这个问题(在Emacs 24.4中):

(defun my-term-mode-hook ()
  (define-key term-raw-map (kbd "C-y") 'term-paste)
  (define-key term-raw-map (kbd "C-k")
    (lambda ()
      (interactive)
      (term-send-raw-string "\C-k")
      (kill-line))))
(add-hook 'term-mode-hook 'my-term-mode-hook)

注意,如果你想将kill / yank绑定到以ansi-term转义字符开头的键击(默认为Cc和Cx),并希望这在不太可能发生的事件中发生变化,你可以改为定义你的击键(没有前导逃脱)​​到term-raw-escape-map,就像在用户347585的答案中所做的那样。

答案 4 :(得分:0)

这些其他解决方案对我来说效果不佳,在字符模式和行模式之间切换会导致ansi-term随机停止正常工作,并将ansi-term的term-paste设置为Cc Cy(基于Glyph的链接),没有工作的代码片段是用于术语,而不是ansi-term:

    (eval-after-load "ansi-term"
    '(define-key ansi-term-raw-map (kbd "C-c C-y") 'term-paste))

答案 5 :(得分:0)

我启用了xterm-mouse-mode,此后,我能够使用鼠标选择文本并使用Mac OS X的emacs GUI中ansi-term中的标准Mac命令C按钮进行复制,