ট্রাম্পের উপরে আমি যে দূরবর্তী মেশিনগুলি অ্যাক্সেস করি তার জন্য আমি কীভাবে আমার স্থানীয় ইমাস ক্লায়েন্টকে $ সম্পাদক হিসাবে ব্যবহার করতে পারি?


44

আমি প্রায়শই বেশিরভাগ দূরবর্তী সার্ভার পরিচালনা করতে ট্রাম্প ব্যবহার করি, উভয়ই ফাইল সম্পাদনা করার জন্য এবং দূরবর্তী শেলগুলি চালানোর জন্য shell-mode। যাইহোক, যখন কোনও কমান্ড EDITORফাইল সম্পাদনা করতে ভেরিয়েবল ব্যবহার করে, তবে এটি কাজ করে না , crontab -eবিশেষত কারণ shell-mode"বোবা" টার্মিনাল যা এর ভিতরে অন্য সম্পাদক চালানো সমর্থন করে না।

স্থানীয়ভাবে, আমি এটি একটি উপযুক্ত কল দিয়ে করি emacsclientযা একটি নতুন বাফার খোলে এবং জীবনকে খুব সহজ করে তোলে। দুর্ভাগ্যক্রমে, এটি দূরবর্তী মেশিন থেকে কাজ করে না।

আমি ব্যবহার করতে পারে অনুমান ed। (Hah!)

আমি কীভাবে EDITORএমন একটি রিমোট সেট আপ করতে পারি যা আমাকে আমার স্থানীয় ইম্যাক্স উদাহরণ সহ ফাইল সম্পাদনা করতে দেয়?

উত্তর:


23

[দ্রষ্টব্য]with-editor বিকাশের আপডেটগুলি অনুসরণ করতে এই উত্তরটি ভারী সম্পাদনা করা হয়েছিল । বেশিরভাগ মন্তব্য সম্ভবত আর বেশি অর্থবোধ করবে না। কিছু নতুন মন্তব্য যা আছে না জানার।


ম্যাগিটে https://github.com/magit/with-editorwith-editor এ উপলব্ধ একটি লাইব্রেরি রয়েছে যা আপনাকে ট্রাম্পের উপরের রিমোট মেশিনে আপনার স্থানীয় ইমাসকে $ এডিটর হিসাবে ব্যবহার করতে দেয়।

অন্য বিকল্পটি হ'ল https://github.com/habnabit/remote-emacsclient তবে এটি আরও জটিল এবং কম জেনেরিক বলে মনে হচ্ছে।

with-editorমেলপা মাধ্যমে ইনস্টল করার সহজ উপায় :

M-x package-install with-editor

অন্যথায়, কেবল আপনার লোডের পথে https://github.com/magit/with-editor/blob/master/with-editor.el ধরুন এবং requireএটি (এটি ড্যাশের উপরও নির্ভর করে)।

তারপরে, কেবল শুরু করুন shell, eshellবা ansi-termনিম্নলিখিতগুলি করুন:

M-x with-editor-export-editor

এটি আপনাকে জিজ্ঞাসা করবে যে কোন $ এডিটর আপনার আগ্রহী, কেবলমাত্র ডিফল্ট EDITORভেরিয়েবলের জন্য এন্টার টিপুন । তারপরে শেলের ভিতরে আপনি crontab -eইমাক্সের মধ্যে আপনার ক্রন্টব্যাটটি টাইপ করতে এবং সম্পাদনা করতে পারবেন । C-c C-cক্রন্টব সংরক্ষণ করতে বা C-c C-kসম্পাদনা বাতিল করতে টিপুন ।

আপনি যদি আরও স্থায়ী সেটআপ চান:

(add-hook 'shell-mode-hook  'with-editor-export-editor)
(add-hook 'term-mode-hook   'with-editor-export-editor)
(add-hook 'eshell-mode-hook 'with-editor-export-editor)

বিকল্পভাবে, আপনি M-x with-editor-async-shell-command crontab -e RETদ্রুত কমান্ডের জন্য ব্যবহার করতে পারেন ।


এই with-editorগ্রন্থাগারটি প্রশ্নের সাথে কীভাবে সম্পর্কিত তা আপনি ব্যাখ্যা করতে পারেন? দরকারী মনে হচ্ছে
মালবারবা

@ সাইলেক্স: এটির কাজ করার জন্য আমার কি $EDITORদূরবর্তী মেশিনে কিছু পরিবর্তনশীল সেট করা দরকার ? এটা কি শুধু ভিতরে ookোকা emacsclient?
টিখন জেলভিস

তবে হ্যাঁ, এটি দেখতে আমি যা চাই ঠিক তাই লাগে। আমাকে একরকম চেষ্টা করে দেখতে হবে — আমি ধরে নিয়েছি এটি নিজেই ইনস্টল করা যাবে, বাকি শাখা ছাড়াই?
টিখন জেলভিস

1
@ টিখন জেলভি: এটি অবশ্যই নিজেরাই ইনস্টলযোগ্য হবে তবে আপাতত এটি কেবলমাত্র একটি অংশ git-modes। আমি এই লিবিটিকে খুব কাছ থেকে অনুসরণ করছি এবং এটি ঠিক যে এর লেখক (@ টারসিয়াস) ম্যাগিট প্রকাশে ব্যস্ত, তবে শেষ পর্যন্ত এটি তার নিজস্ব প্যাকেজ হবে। $ এডিটর সম্পর্কে, আপনাকে এটিকে নিজের কোনও কিছুতে সেট করার দরকার নেই, আপনি যখন যা কিছু আদেশ ব্যবহার করেন তা চালানোর সময় এটি প্রয়োজন হয়। Magit এই lib $ GIT_EDITOR দিয়ে ব্যবহার করে।
সাইলেক্স

1
নোট করুন এটি বিদ্যমান shell-mode/ term-modeবাফারের মধ্যে থেকে কোনও রিমোটে ছড়িয়ে দেওয়ার পরে কাজ করা বন্ধ করবে । এটি অতিরিক্ত কিছু কনফিগারেশনের মাধ্যমে সম্বোধন করা যেতে পারে, emacs.stackexchange.com/questions/5589/… দেখুন । যদি আপনি এটি কাজ করতে চান তবে দয়া করে github.com/magit/magit/issues/1638 এ আপনার অনুসন্ধানের প্রতিবেদন করুন ।
তারসিয়াস

1

দাবি অস্বীকার: আমি এটি চেষ্টা করিনি।

ট্রাম্প ব্যবহার করে ফাইলটি খোলার জন্য একটি কমান্ডের জন্য একটি ফাংশন ওয়াচ কমান্ড আউটপুট রেখে আপনি অংশটির অংশ পেতে পারেন। সুরক্ষা গর্ত? হ্যাঁ. প্রায়োগিক? সম্ভবত।

একটি ব্যবহার করুন shell-modeকরার জন্য একটি হুক যোগ করার জন্য হুক after-change-hookমধ্যে shell-mode। এই হুক একটি নির্দিষ্ট অনুক্রমের জন্য নজর রাখে। উদাহরণ:

;; RemoteTRAMP token: <authentication token maybe?>
;; RemoteTRAMP edit: /path/to/my/file

এটি তখন tramp-find-fileফাইলটি খুলতে ব্যবহার করে। এটি তুলনামূলকভাবে সুরক্ষিত কারণ কেবল রিমোট যা করতে পারে তা হ'ল ট্রিগার tramp-find-file। একটি নিশ্চিতকরণ প্রথমে ভাল তবে alচ্ছিক হবে।

সম্পাদনা শেষ হয়ে গেলে, অন্য একটি হুক ডামি প্রোগ্রামের প্রস্থান (যেমন প্রেরণ দ্বারা C-c) ট্রিগার করতে পারে ।

সবচেয়ে খারাপ অবস্থা (সুরক্ষার জন্য) হ'ল তারা স্বেচ্ছাসেবী কোড চালানোর জন্য কোনও উপায় খুঁজে পান। আপনার যদি সর্বদা মূল্যায়ন করার জন্য বাফার-ভেরিয়েবলগুলি সেট করা থাকে তবে দূষিত আক্রমণকারী আপনার জ্ঞান ছাড়াই গুরুত্বপূর্ণ সেটিংস ওভাররাইট করতে পারে। তারা প্রচুর বাফার খোলার কারণে পরিষেবা আক্রমণকে অস্বীকারও করতে পারে। নিশ্চিতকরণগুলি উপরের সমস্তটি রোধ করতে পারে।

রিমোটের প্রোগ্রামটি তুচ্ছভাবে সি (বা অন্য কোনও ভাষায়) প্রয়োগ করা যেতে পারে।


1

https://stackoverflow.com/questions/2231902/originate-edit-of-remote-file- using-emacs-tramp-from-ssh-session এর মোটামুটি সহজ স্বীকৃত উত্তর রয়েছে যা এর পরিমাণ

(setq server-use-tcp t)
(setq server-host "name_of_local_machine")
(server-start)
;; Maybe also muck with `server-auth-dir`

এবং তারপরে ব্যবহার করুন

emacsclient -f ~/.emacs.d/server/server /`hostname`:/path/to/local/file

এছাড়াও https://stackoverflow.com/questions/12546722/ using-emacs-server-and-emacsclient-on-other-machines-as-other- users যা আরও জটিল তবে উত্তরগুলিও (মোটামুটি) একই রকম স্পর্শ করে ঘাঁটি।


1

আমার দূরবর্তী হোস্টে ~/bin/ecইমাস্ক্লিভের জন্য শর্টহ্যান্ডে আমার পথে একটি ছোট স্ক্রিপ্ট রয়েছে ।

#!/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এবং +আরোগুলিগুলি ইমালস্ক্লিয়েন্টে অপরিবর্তিত থাকে, অন্যথায় আপনার স্থানীয় ইমাসগুলি খোলার জন্য আরগগুলি ফাইল হিসাবে বিবেচনা করা হয়। প্রতিটি ফাইল ট্রাম্প প্রোটোকল এবং হোস্টের সাথে উপস্থাপিত হয় যাতে ইমাকরা কীভাবে এটি খুলতে পারে তা জানে। আপনি ssh:যদি পছন্দ করেন তবে আপনি আলাদা ট্রাম্প প্রোটোকলে পরিবর্তন করতে সক্ষম হতে পারেন।

আপনাকে অবশ্যই zআপনার দূরবর্তী মেশিনের হোস্টনামের সাথে প্রতিস্থাপন করতে হবে । এটি ট্রাম্পের মাধ্যমে সংযোগ করতে স্থানীয় ইম্যাক্স ব্যবহার করে। (আপনি hostnameএখানে সাধারণতার জন্য ব্যবহার করতে সক্ষম হবেন bre আমি zআমার স্থানীয় অঞ্চলের মতো ssh_configসংক্ষিপ্তসার জন্য ছোট ছোট এন্ট্রি ব্যবহার করতে পছন্দ করি এবং দূরবর্তী কোনও ধারণা রাখেনি যে আমি এটি করছি it এটি চেষ্টা করুন!)

ব্যবহার:

  • 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 একটি রিমোট ফরওয়ার্ড। আমি ~/.ssh/ssh_configফরোয়ার্ডিং স্বয়ংক্রিয় করতে গতিতে এটির জন্য কন্ট্রোলমাস্টার স্টাফগুলিকে আমার লোকালয়ে রেখেছি ।

Host z
HostName dev.example.com
User dev
ControlMaster auto
ControlPath ~/.ssh/z.sock
RemoteForward 9999 localhost:9999

অবশেষে, নিশ্চিত হয়ে নিন যে ট্রাম্প ssh_configযদি এটি ব্যবহার করে তবে আপনার সম্পর্কে :

(require 'tramp)
(tramp-set-completion-function "ssh"
  '((tramp-parse-sconfig "~/.ssh/config")))

0

কিছুটা টুইট করার দরকার হতে পারে তবে এই ধারণাটি এখানে:

EDITOR="ssh artagnon@luneth \"emacsclient -n /`hostname`:$1\""

1
আপনি কী বোঝাতে চাইছেন যে দূরবর্তী সার্ভার থেকে ক্লায়েন্ট যেখানে ইম্যাকস চলছে সেখানে ফিরে যাচ্ছেন? এটি প্রায়শই সম্ভব হয় না।
গিলস

ঠিক আছে, আপনি যদি ক্লায়েন্টের কাছে পৌঁছাতে না পারেন যেখানে ইমাস চলছে, কিছুই করা অসম্ভব।
আর্ট্যাগন

2
স্থানীয় ssh শ্রোতাকে সর্বদা দূরবর্তী মেশিনের একটি বন্দরে প্রেরণ করার জন্য আপনি ~ / .ssh / কনফিগারেশনের মাধ্যমে ssh জিজ্ঞাসা করতে পারেন। আপনি সম্ভবত আপনার এসএসএল-এজেন্টকেও ফরোয়ার্ড করতে চাইবেন, যদিও এটি কতটা নিরাপদ তা নিয়ে মতামত আলাদা হয় vary এটি আপনাকে EDITOR = "ssh $ ব্যবহারকারী @ লোকালহোস্ট: 1234 ..." করে ফিরে পেতে দেবে
বেন হাইড

অন্য বিকল্পটি সম্ভবত সম্পাদনা-
সার্ভার.এল

0

হ্যারল্ড অ্যাবনাবিট এই পদ্ধতির সাথে এগিয়ে এসেছিলেন 1 :

http://blog.habnab.it/blog/2013/06/25/emacsclient-and-tramp/

1 রায়ান ব্যারেটের পূর্ববর্তী নিবন্ধের ভিত্তিতে (যার সাথে তিনি লিঙ্ক করেছেন)।

এফডব্লিউআইডাব্লু https://stackoverflow.com/q/5154224/324105 এ রয়েছে যেখানে পেট্রি লেহটিনেন https://gist.github.com/akheron/850795 নিয়ে এসেছিলেন । আমি কল্পনা করি আরও জটিল সমাধানগুলি আরও ভাল, তবে খুব সাধারণ পদ্ধতির এখনও আগ্রহের বিষয় হতে পারে।


0

সত্যিই অবাক কেউ এখনও উল্লেখ sshfsকরেনি। আমি যখন দূরবর্তী দিকে যাই তখন আমি সাধারণত এটি করি:

1) multi-term; sshfs user@host:/dir/i/want/ /mnt/point/on/my/machine
2) open whatever I want to edit in my local emacs
3) get-term; ssh user@host to launch executables etc

যদিও multi-termদূরবর্তী Dir সাথে স্থানীয় পরিশ্রমী Dir সিঙ্ক না, এটি সব অন্যান্য সমাধান আমি একটি দীর্ঘ শট দ্বারা চেষ্টা করেছি beats। যদিও দির ট্র্যাকিং নিশ্চিতভাবে একটি স্বাগত বৈশিষ্ট্য হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.