ssh を介してリモート サーバーで Emacs を実行しようとすると、C-y
(でもM-x yank
) が機能しません。を押すたびにC-y
「マークセット」と表示されますが、何も起こりません。私は Linux で作業しており、リモート サーバーは Mac Pro です。
現在、ファイルを自分のPCにダウンロードすることしかできません。この問題をよりよく解決する方法についてのアイデアはありますか?
あなたの問題は Emacs がリモートで実行されているためではなく、Emacs が「テキスト モード」で実行されている (つまり、ターミナル エミュレータ内で実行されている) ことが原因であると思われます。このようなモードで実行している場合、Emacs は実行中の可能性のある周囲の GUI を認識しないためC-y
、同じ Emacs セッションで以前に kill したテキストのみを や などでヤンクしC-w
ますM-w
。
端末エミュレーター (おそらく Cmd-v) で「貼り付け」を試みることができます。これにより、選択したテキストが下にあるアプリケーション (この場合は Emacs) に入力されたかのように送信されます。貼り付けるテキストが「十分に単純な」文字で構成されている限り、問題なく機能する可能性があります。面白い制御文字が含まれている場合、すべての賭けはオフです (非 ASCII 文字が含まれている場合、「端末エミュレーター + ssh + Emacs」全体が適切に構成されているかどうかに応じて、おかしな動作をする可能性もあります)。 .
テキストモードの問題は私の問題ではありませんでした。
私はemacsを実行するMacBookを持っています。Linuxボックスでファイルを(リモートで)編集するためにtramp-modeを使用しています。リモート emacs はありません。すべてローカルです。
Mac で次のようにコピー/貼り付けを設定していたので、emacs の外部でシステム クリップボードから「ヤンク」できました。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; handle copy/paste intelligently
(defun copy-from-osx ()
"Handle copy/paste intelligently on osx."
(let ((pbpaste (purecopy "/usr/bin/pbpaste")))
(if (and (eq system-type 'darwin)
(file-exists-p pbpaste))
(shell-command-to-string pbpaste))))
(defun paste-to-osx (text &optional push)
"Handle copy/paste intelligently on osx.
TEXT gets put into the Macosx clipboard.
The PUSH argument is ignored."
(let* ((process-connection-type nil)
(proc (start-process "pbcopy" "*Messages*" "pbcopy")))
(process-send-string proc text)
(process-send-eof proc)))
(setq interprogram-cut-function 'paste-to-osx
interprogram-paste-function 'copy-from-osx)
どうやらtramp-modeは賢くしようとしており、テキストをヤンクするとき、私が設定したpbpasteコマンドをリモートで実行します。またはしようとします。私はしたくない。そこで、次のcopy-from-osx
ように変更しました。
(defun copy-from-osx ()
"Handle copy/paste intelligently on osx."
(let ((pbpaste (purecopy "/usr/bin/pbpaste")))
(if (and (eq system-type 'darwin)
(file-exists-p pbpaste))
(let ((tramp-mode nil)
(default-directory "~"))
(shell-command-to-string pbpaste)))))
pbpaste を実行する前に、tramp-mode を一時的に nil に設定していることに注意してください。
私のために働きます。