リモートホストのパスには~/bin/ec
、emacsclientの短縮形の小さなスクリプトがあります。
#!/bin/bash
params=()
for p in "$@"; do
if [ "$p" == "-n" ]; then
params+=( "$p" )
elif [ "${p:0:1}" == "+" ]; then
params+=( "$p" )
else
params+=( "/ssh:z:"$(readlink -f $p) )
fi
done
emacsclient --server-file=$HOME/.emacs.d/server/server "${params[@]}"
このスクリプトのパス-n
と+
のemacsclientに変わらない引数は、そうでない場合はargsが開くように、あなたの地元のEmacs用のファイルとして扱われます。各ファイルにはTRAMPプロトコルとホストが接頭辞として付けられているため、Emacsはそれを開く方法を認識しています。ssh:
必要に応じて、別のTRAMPプロトコルに変更できる場合があります。
z
リモートマシンのホスト名に置き換える必要があります。これは、TRAMP経由で接続するためにローカルEmacsによって使用されます。(hostname
ここで一般性のために使用できるかもしれません。簡潔にするためz
にローカルのような小さなエントリを使用することを好みます。ssh_config
リモートはこれを実行していることを知りません。試してみてください!)
使用法:
ec file
リモートシェルでローカルEmacsのファイルを開き、待機します
ec -n file
リモートシェルでローカルEmacsのファイルを開き、戻ります
export EDITOR=~/bin/ec
リモート.bashrc
で魔法が起こる
server
ファイルが正常であることを確認するために、ローカル.emacs
でこれを使用し、再び小さなホスト名を使用しz
ます。
(setq server-use-tcp t
server-port 9999)
(defun server-start-and-copy ()
"Start server and copy server file to remote box."
(interactive)
(server-start)
(copy-file "~/.emacs.d/server/server" "/z:.emacs.d/server/server" t)
(chmod "/z:.emacs.d/server/server" (string-to-number "644" 8))
)
(add-hook 'emacs-startup-hook 'server-start-and-copy)
ポート9999はRemoteForwardです。これをローカルに配置して~/.ssh/ssh_config
、転送を自動化し、さらにControlMasterを使用して速度を向上させました。
Host z
HostName dev.example.com
User dev
ControlMaster auto
ControlPath ~/.ssh/z.sock
RemoteForward 9999 localhost:9999
最後に、ssh_config
使用する場合はTRAMPがあなたについて知っていることを確認してください:
(require 'tramp)
(tramp-set-completion-function "ssh"
'((tramp-parse-sconfig "~/.ssh/config")))
with-editor
ライブラリが質問にどのように関連しているかについて詳しく教えてください。便利なサウンド