emacs 및 ssh로 원격 파일을 여는 가장 좋은 방법은 무엇입니까?


80

을 사용하여 원격 컴퓨터에 연결합니다 ssh user@192.168.1.5. 원격 컴퓨터에서 파일을 열어야 할 때 예를 들어

emacs /usr/share/nginx/html/index.html

index.html그러면 셸 에서 파일 이 열립니다 . 일부 emacs 명령은 작동하지만 다른 명령은 작동하지 않습니다. 예를 들어, C-w작동하지 않습니다. M-<작동하지 않습니다. 이 문제를 어떻게 해결할 수 있으며 emacs 및 ssh를 사용하는 가장 좋은 방법은 무엇입니까?

이 질문을 찾았 지만 더 혼란 스러웠습니다.


1
작동하는 명령의 몇 가지 예는 무엇입니까? (때때로 원격 시스템에 다른 키 바인딩이 존재합니다. 원격 시스템에서 .emacs 파일을 확인하십시오. 그리고 전체 키가 다르게 작동하는 경우도 있습니다. 예를 들어, GNU 화면은 기본적 으로 명령Ctrl-A 부분 을 emacs에 도달하기 전에 흡수합니다 .)
kbshimmyo

1
C-공간, CF, Cg를 작업
Zeynel

지금은 원격 시스템에서 이맥스 파일을 찾을 수 없습니다하지만 난 다른 컴퓨터에 새로운 키 바인딩을하지 않았다 알
Zeynel

예,이 키 바인딩 세트가 작동하지 않는 원인이 무엇인지 잘 모르겠습니다. emacs 는 원격 서버 에서 파일 로컬로 열 때 와 동일한 모드로 파일 열나요 (모든 명령이 작동하는 곳)? 아마도 이것은 단서를 줄 수 M-x describe-mode있습니다.
kbshimmyo

로컬 컴퓨터에서도 emacs를 실행합니까? 원격 emacs 대 로컬 emacs를 사용하려는 이유가 있습니까?
Carl Groner 2013-12-17

답변:


157

나는 일반적으로 로컬 Emacs 인스턴스에서 원격 파일을 여는 것을 선호합니다.

로컬 컴퓨터 에서 Emacs를 실행하는 동안 ssh를 통해 원격 파일을 여는 것은 약간 다른 구문을 제외하고는 다른 파일을 여는 것과 크게 다르지 않습니다 .

ssh의 경우 C-x C-f. 이제 입력하려는 minubuffer /ssh:user@host:/path/to/file에서 경로를 입력하기 시작하면 탭 완성이 작동합니다. 또한 선행 /문자에 유의하십시오 . 여기 에서 전체 문서를 참조 하십시오 .

귀하의 예에서는 다음과 같습니다.

C-x C-f /ssh:user@192.168.1.5:/usr/share/nginx/html/index.html

이제 로컬 구성 및 설치된 패키지 등을 사용하는 동안 Emacs에서 ssh를 통해 원격 파일을 편집 할 수 있습니다.


24
OP는이 기능이 호출된다는 사실을 알고 tramp싶을 것입니다. 이것은 여러분이 사용하게 될 가장 유용한 기능 중 하나입니다. 심지어 원격으로 컴파일됩니다!
pmr dec.

이것은 훌륭하게 작동하고 모든 명령이 작동하는 것처럼 보이지만 index.html버퍼가 읽기 전용이라고 말하기 때문에 편집 할 수 없습니다 . 하지만 원격 컴퓨터에서 열면 같은 파일을 편집 할 수 있습니다. 그건 그렇고, 파일을 열 때 C-x C-f /ssh:user@host filename암호를 물었습니다.
Zeynel

Documents 디렉토리에서 다른 파일을 시도했는데 문제없이 편집 할 수있었습니다.
Zeynel

이것으로 포트를 지정하는 방법을 알고 있습니까?
Philip Kirkbride

5
인 전체 문서화 된 구문을 @PhilipKirkbride/method:user@host#port:filename
칼 Groner

28

위의 답변에 추가하기 위해 자주 사용하는 컴퓨터에 대한 바로 가기를 작성할 수 있습니다.

(defun connect-remote ()
  (interactive)
  (dired "/user@192.168.1.5:/"))

이것은 dired 원격 컴퓨터 버퍼 . 로컬 버퍼와 마찬가지로이 버퍼를 탐색 할 수 있습니다.

원격 컴퓨터에 ssh 키를 설정 한 경우 암호를 입력 할 필요도 없습니다.

원격 시스템이 많은 경우 각 기능에 인식 할 수있는 이름 (예 :) connect-cupcake을 부여 connect-kitkat하고 smex패키지를 사용 하여 완료 할 수 있습니다.


이것은 훌륭합니다. 시도해 볼게. 위의 설명에서 내가 요청한 질문에 대한 답변도 있습니까? /usr/share/nginx/html/index.html원격 컴퓨터 에서이 파일을 열면 이 파일을 편집 할 수 있습니다 . 하지만 ssh로 열면 index.html읽기 전용입니다. 왜 이런거야?
Zeynel

나는 당신이 루트 사용자와 연결하지 않는다고 생각하고 있으며 일반적으로 그는 /usr/share/.
abo-abo

하지만 루트 사용자로 어떻게 연결합니까? 나는 몇 가지를 시도했지만 C-x C-f /sudo ssh:user@host filename작동하지 않습니다.
Zeynel

1
이것은 내가 성공하지 못한 채 얼마 전에 해결하려고 시도한 문제입니다. tramp를 사용하여 원격에 연결하거나 로컬에 sudo로 연결할 수 있지만 둘 다 사용할 수는 없습니다. 해결 방법은 자신 /usr/share/nginx/html/chown.
abo-abo

파일을 열고 /etc/nginx/sites-available/example.com.conf편집하고 저장하고 닫았습니다. 이제 다시 열 었는데 이번에는 편집 할 수 없습니까? 권한으로 뭔가를해야한다고 생각합니다. 왜 이런 일이 발생하는지 이해하도록 도와 주시겠습니까?
Zeynel

18

그리고 "바로 가기"에 대한 @ abo-abo의 게시물에 추가하려면-

Emacs 책갈피를 사용하십시오. 원격 파일이나 디렉토리를 방문 할 때 일반적으로 북마크를 만드십시오. 그런 다음을 사용C-x r b하여 이름을 입력 한 원격 북마크로 이동합니다 (완성 포함).

Bookmark + 를 사용하는 경우 원격 책갈피가에서 특별히 강조 표시되어 *Bookmark List*보다 쉽게 ​​인식 할 수 있습니다. su또는 sudo( root) 로 액세스해야하는 원격 책갈피 는 다르게 강조 표시됩니다.

Dired + 를 사용하는 경우 Dired 에서 포함 된 원격 디렉토리를 방문하여 표시 하고을 눌러 여러 원격 파일 또는 디렉토리를 빠르게 북마크 할 수도 있습니다 C-x b. 책갈피 이름을 지정할 필요가 없습니다. 파일 이름을 따서 명명됩니다. 원격 파일을 탐색하는 데 이러한 책갈피를 사용하지 않더라도 책갈피 + 태그 와 함께 사용할 수 있습니다. 하여 파일을 구성하고 하위 집합에서 작업 할 수 있습니다.

당신이 사용하는 경우 차가워을 당신이 즐겨 찾기로 이동하는 명령을 사용할 때마다 다음, 당신은 타격에 의해 원격있는 것들에 완료 후보 좁힐 수 있습니다 C-M-@완료시를.


10

원래 포스터는 루트 사용자로 원격 파일을 여는 데 관심을 표명했습니다. 다음 명령을 사용하여 수행 할 수 있습니다.

C-x C-f /ssh:you@remotehost|sudo:remotehost:/path/to/file RET

더 많은 문서는 https://www.emacswiki.org/emacs/TrampMode#toc14 에서 찾을 수 있습니다.


3

원격 시스템에 초점을 맞춘 간단한 답변 :

원격 컴퓨터에서 모든 emacs 작업을 수행하려면 다음을 사용합니다.

ssh -X username@hostname

그런 다음 원격 세션에서 emacs를 실행하여 로컬 컴퓨터에 다시 표시합니다. 오래된 질문이지만 완전성을 위해 이것을 던지고 싶었습니다. 몇 가지 xhost / X 구성 문제가 있지만 많은 네트워크에서 이것은 즉시 작동합니다!


2

emacs를위한 SSH 모드 는 당신이 찾고있는 것입니다.

일단 설정을 마치면

M-x ssh RET hostname RET

그런 다음 암호를 두 번 입력합니다 (명령 줄에 한 번, 파일로드에 한 번).

대부분의 경우 다른 셸처럼 처리 할 수 ​​있습니다 (비대화 형 및 몇 가지 사소한 차이점이 있지만 그게 다입니다).

어떤 디렉토리에 있는지 추적하므로보고있는 디렉토리에서 파일을 열려면 자동으로 올바른 디렉토리에서 시작하고 파일 이름을 입력하기 만하면됩니다.

Emacs Wiki 에도 더 많은 정보가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.